当前位置: 首页 > article >正文

在Ubuntu 16.04上使用Logrotate管理日志文件

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

Logrotate 是一个系统实用工具,用于管理日志文件的自动轮转和压缩。如果日志文件不进行轮转、压缩和定期修剪,它们最终可能会占用系统上的所有可用磁盘空间。

Logrotate 默认安装在 Ubuntu 16.04 上,并设置为处理所有已安装软件包的日志轮转需求,包括 rsyslog,默认的系统日志处理器。

在本文中,我们将探讨默认的 Logrotate 配置,然后为一个虚构的自定义应用程序配置日志轮转。

先决条件

本教程假设您有一个 Ubuntu 16.04 服务器,具有非根 sudo 启用用户,如《使用 Ubuntu 16.04 进行初始服务器设置》中所述。

Logrotate 也可用于许多其他 Linux 发行版,但默认配置可能会有很大不同。只要您的 Logrotate 版本类似于 Ubuntu 16.04 的版本,本教程的其他部分仍然适用。请按照第 1 步来确定您的 Logrotate 版本。

登录到服务器上作为您的 sudo 启用用户以开始。

确认您的 Logrotate 版本

如果您使用的是非 Ubuntu 服务器,请首先确保 Logrotate 已安装,方法是请求其版本信息:

logrotate --version

logrotate 3.8.7

如果 Logrotate 未安装,您将收到错误消息。请使用您的 Linux 发行版的软件包管理器安装该软件。

如果 Logrotate 已安装但版本号明显不同,您可能会在本教程中遇到一些配置问题。请参考您的特定版本的 Logrotate 文档,方法是阅读其 man 页面:

man logrotate

接下来,我们将查看 Ubuntu 上 Logrotate 的默认配置结构。

探索 Logrotate 配置

在 Ubuntu 上,Logrotate 的配置信息通常可以在两个地方找到:

  • /etc/logrotate.conf:该文件包含一些默认设置,并设置了一些不属于任何系统软件包的日志的轮转。它还使用 include 语句从 /etc/logrotate.d 目录中的任何文件中导入配置。
  • /etc/logrotate.d/:这是您安装的任何需要日志轮转帮助的软件包将放置其 Logrotate 配置的位置。在标准安装中,您应该已经在此处拥有一些基本系统工具的文件,如 aptdpkgrsyslog 等。

默认情况下,logrotate.conf 将配置为每周进行日志轮转(weekly),日志文件由 root 用户和 syslog 组拥有(su root syslog),保留四个日志文件(rotate 4),并在当前日志文件轮转后创建新的空日志文件(create)。

让我们来看看 /etc/logrotate.d 中一个软件包的 Logrotate 配置文件。查看 apt 软件包工具的文件:

cat /etc/logrotate.d/apt

/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

该文件包含 /var/log/apt/ 目录中两个不同日志文件 term.loghistory.log 的配置块:它们都具有相同的选项。在这些配置块中未设置的选项将继承默认值或在 /etc/logrotate.conf 中设置的值。apt 日志设置的选项包括:

  • rotate 12:保留十二个旧日志文件。
  • monthly:每月进行一次轮转。
  • compress:压缩轮转后的文件。默认情况下使用 gzip 进行压缩,结果是文件以 .gz 结尾。压缩命令可以使用 compresscmd 选项进行更改。
  • missingok:如果日志文件丢失,则不生成错误消息。
  • notifempty:如果日志文件为空,则不进行轮转。

还有许多其他配置选项可用。您可以通过在命令行上键入 man logrotate 来阅读所有这些选项,以打开 Logrotate 的手册页面。

接下来,我们将设置一个配置文件来处理一个虚构服务的日志。

设置示例配置

要管理预打包和预配置的系统服务之外的应用程序的日志文件,我们有两个选项:

  1. 创建一个新的 Logrotate 配置文件,并将其放置在 /etc/logrotate.d/ 中。这将作为 root 用户每天运行,以及所有其他标准的 Logrotate 作业。
  2. 创建一个新的配置文件,并在 Ubuntu 默认的 Logrotate 设置之外运行它。只有在需要以非 root 用户身份运行 Logrotate,或者如果您需要比每天更频繁地轮转日志(在 /etc/logrotate.d/ 中的 hourly 配置将无效,因为系统的 Logrotate 设置只运行一次每天)时,才真正需要这样做。

让我们通过一些示例设置来详细介绍这两个选项。

将配置添加到 /etc/logrotate.d/

我们希望为一个虚构的 Web 服务器配置日志轮转,该服务器将 access.logerror.log 放入 /var/log/example-app/。它以 www-data 用户和组身份运行。

要在 /etc/logrotate.d/ 中添加一些配置,首先打开一个新文件:

sudo nano /etc/logrotate.d/example-app

以下是一个可以处理这些日志的示例配置文件:


/var/log/example-app/*.log {
	daily
	missingok
	rotate 14
	compress
	notifempty
	create 0640 www-data www-data
	sharedscripts
	postrotate
		systemctl reload example-app
	endscript
}

此文件中的一些新配置指令包括:

  • create 0640 www-data www-data:这将在轮转后创建一个具有指定权限(0640)、所有者(www-data)和组(也是 www-data)的新空日志文件。
  • sharedscripts:此标志意味着每个运行的脚本只运行一次,而不是对每个轮转的文件运行一次。由于此配置将匹配 example-app 目录中的两个日志文件,如果没有此选项,postrotate 中指定的脚本将运行两次。
  • postrotateendscript:此块包含日志文件轮转后要运行的脚本。在这种情况下,我们正在重新加载我们的示例应用程序。这有时是必要的,以便您的应用程序切换到新创建的日志文件。
    请注意,postrotate 在日志被压缩之前运行。压缩可能需要很长时间,您的软件应立即切换到新的日志文件。对于需要在日志被压缩后运行的任务,请改用 lastaction 块。

在自定义配置以满足您的需求 并将其保存在 /etc/logrotate.d 中后,您可以通过执行干运行来测试它:

sudo logrotate /etc/logrotate.conf --debug

这将调用 logrotate,指向标准配置文件,并打开调试模式。

将打印有关 Logrotate 处理的日志文件以及它们将要执行的操作的信息。如果一切正常,您就完成了。标准的 Logrotate 作业将每天运行一次,并包括您的新配置。

接下来,我们将尝试一个不使用 Ubuntu 默认配置的设置。

创建独立的 Logrotate 配置

在这个示例中,我们有一个作为我们的用户 sammy 运行的应用程序,生成的日志存储在 /home/sammy/logs/ 中。我们希望每小时轮转这些日志,因此我们需要在 Ubuntu 提供的 /etc/logrotate.d 结构之外设置这个。

首先,我们将在我们的主目录中创建一个配置文件。在文本编辑器中打开它:

nano /home/sammy/logrotate.conf

然后粘贴以下配置:


/home/sammy/logs/*.log {
	hourly
	missingok
	rotate 24
	compress
	create
}

保存并关闭文件。我们在之前的步骤中已经看到了所有这些选项,但让我们总结一下:此配置将每小时轮转文件,压缩并保留二十四个旧日志,并创建一个新的日志文件以替换轮转后的文件。

您需要根据您的应用程序自定义配置,但这是一个很好的开始。

为了测试它是否有效,让我们创建一个日志文件:

cd ~
mkdir logs
touch logs/access.log

现在我们在正确的位置有一个空白日志文件,让我们运行 logrotate 命令。

因为日志文件是由 sammy 拥有的,我们不需要使用 sudo。但是我们确实需要指定一个 状态 文件。这个文件记录了上次运行 logrotatelogrotate 看到和执行的内容,以便它知道下次运行时该做什么。当使用 Ubuntu Logrotate 设置时,这是由系统自动处理的(可以在 /var/lib/logrotate/status 中找到),但现在我们需要手动处理。

我们将让 Logrotate 将状态文件放在我们的主目录中。我可以放在任何方便访问的地方:

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose

读取配置文件 /home/sammy/logrotate.conf

处理 1 个日志

轮转模式:/home/sammy/logs/*.log  每小时(24 次轮转)
空日志文件被轮转,旧日志被删除
考虑日志 /home/sammy/logs/access.log
  日志不需要轮转

--verbose 将打印有关 Logrotate 正在执行的详细信息。在这种情况下,看起来它没有轮转任何内容。这是 Logrotate 第一次看到这个日志文件,因此就它所知,该文件的年龄为零小时,不应该被轮转。

如果我们查看状态文件,我们将看到 Logrotate 记录了有关运行的一些信息:

cat /home/sammy/logrotate-state

logrotate state -- version 2
"/home/sammy/logs/access.log" 2017-11-7-19:0:0

Logrotate 记录了它看到的日志以及上次考虑对它们进行轮转的时间。如果我们一个小时后再次运行相同的命令,日志将按预期进行轮转。

如果您想要强制 Logrotate 在它本来不会轮转日志文件时进行轮转,请使用 --force 标志:

logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

这在测试 postrotate 和其他脚本时很有用。

最后,我们需要设置一个 cron 作业,每小时运行 Logrotate。打开您的用户 crontab:

crontab -e

这将打开一个文本文件。文件中可能已经有一些注释,解释了预期的基本语法。将光标移动到文件末尾的新空行,并添加以下内容:

[secondary_label crontab]
14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state

此任务将在每小时的第 14 分钟运行,每天都会运行。它基本上运行了我们之前运行的相同 logrotate 命令,尽管我们将 logrotate 扩展到其完整路径 /usr/sbin/logrotate,以确保安全。在编写 cron 作业时,尽可能明确是一个良好的做法。

保存文件并退出。这将安装 crontab,我们的任务将按指定的时间表运行。

如果我们在大约一个小时后重新访问我们的日志目录,我们应该会发现已经轮转和压缩的日志文件 access.log.1.gz(如果您使用 --force 标志,则为 .2.gz)。

结论

在本教程中,我们验证了我们的 Logrotate 版本,探索了默认的 Ubuntu Logrotate 配置,并设置了两种不同类型的自定义配置。要了解更多关于 Logrotate 的命令行和配置选项,您可以在终端中运行 man logrotate 来阅读其手册页面。


http://www.kler.cn/news/335572.html

相关文章:

  • 【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
  • ChatGPT进行翻译
  • 目录工具类 - C#小函数类推荐
  • 大数据新视界 --大数据大厂之 Ibis:独特架构赋能大数据分析高级抽象层
  • Ubuntu 通过 Docker 搭建 GitLab
  • 数据结构与算法篇((原/反/补)码 进制)
  • 使用axios封装AJAX
  • 计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • DOS 命令学习笔记
  • Apollo配置中心实战
  • PHP 基础语法详解
  • Java项目实战II基于Java+Spring Boot+MySQL的大创管理系统(源码+数据库+文档)
  • Spring MVC__@RequestMapping注解、获取请求参数、域对象共享数据、视图、Restful
  • 【力扣 | SQL题 | 每日四题】力扣2082, 2084, 2072, 2112, 180
  • 24-10-2-读书笔记(二十二)-《契诃夫文集》(一)上([俄] 契诃夫 [译] 汝龙)啊!真想生活。
  • mac M2安装单机版 MongoDB 7.x
  • Spring Cloud面试题收集
  • Python知识点:在Python编程中,如何使用Gensim进行主题建模
  • 10月5日刷题记录
  • 【重学 MySQL】四十五、数据库的创建、修改与删除