如何在 Linux 中使用 Logrotate 管理日志文件

几天前,我们发布了一个指南,描述了如何设置 集中式 Rsyslog 服务器 在 CentOS 系统上。 今天,在本指南中,我们将了解如何使用 对数旋转 在 Linux 上。 此实用程序简化了日志文件的管理,特别适用于每天产生大量日志文件的系统。 顾名思义,LogRotate 会定期将日志完全轮换出您的系统。 它还允许日志文件的自动轮换、压缩、删除和邮寄。 每个日志文件可以每天、每周、每月或当它变得太大时处理。

使用 Logrotate 管理日志文件

安装 Logrotate

Logrotate 在大多数 Linux 发行版的默认存储库中可用。

在 Arch Linux 及其衍生产品上,您需要运行以下命令来安装它。

$ sudo pacman -S logrotate

在基于 RPM 的系统上,例如 RHEL、CentOS、Scientific Linux,您可以使用以下命令安装它:

$ sudo yum install logrotate

在 Debian、Ubuntu 上:

$ sudo apt-get install logrotate

在 SUSE 上,openSUSE:

$ sudo znf install logrotate

下载免费电子指南:“让 Ubuntu 感觉像家一样的 22 个有用的调整”

配置 Logrotate

LogRotate的主要配置文件是 /etc/logrotate.conf.

这是我的 Arch 系统中这个文件的默认内容。 此文件输出在其他 Linux 发行版上可能看起来有些不同。

$ cat /etc/logrotate.conf

样本输出:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# restrict maximum size of log files
#size 20M

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# Logs are moved into directory for rotation
# olddir /var/log/archive

# Ignore pacman saved files
tabooext + .pacorig .pacnew .pacsave

# Arch packages drop log rotation information into this directory
include /etc/logrotate.d

/var/log/wtmp {
 monthly
 create 0664 root utmp
 minsize 1M
 rotate 1
}

/var/log/btmp {
 missingok
 monthly
 create 0600 root utmp
 rotate 1
}

让我们看看上面配置文件中每个选项的作用。

  • 每周 – 它每周轮换日志。
  • 旋转 4 – 默认情况下,LogRotate 保留四个星期(显然是一个月)的日志文件。 由于它会在特定时间段后轮换所有日志文件,因此如果您不想丢失重要日志文件,则可能需要保留它们的备份。
  • 大小 20M – 如果日志文件达到 20MB 的大小,则轮换它们。 默认情况下,此选项被禁用。 要启用它,只需取消注释即可。
  • 创造 – 在轮换旧日志文件后创建新的日志文件。 默认情况下启用此选项。
  • 压缩 – 压缩日志文件。 此外,它默认不压缩日志。 如果要压缩日志,请取消注释此行。
  • /etc/logrotate.d/ – 此目录包含特定于应用程序的日志规则文件。
  • 没关系 – 如果日志文件丢失,Logrotate 将继续下一个而不发出错误消息。

Logrotate 对日志文件进行分段,并根据以下指定的规则压缩日志 /etc/logrotate.d/ 目录。

让我们看一下这个目录的内容。

$ ls /etc/logrotate.d/

示例输出为:

lirc  samba

正如您在上面的输出中看到的,它包含由 LogRotate 管理的所有日志的各种规则文件。 要查看特定的应用程序日志规则,对于 example 桑巴,运行:

$ cat /etc/logrotate.d/samba

样本输出:

/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log {
 notifempty
 missingok
 sharedscripts
 copytruncate
 postrotate
 /bin/kill -HUP `cat /var/run/samba/*.pid 2>/dev/null` 2>/dev/null || true
 endscript
}

这里,

  • 通知空 – 表示如果日志文件为空,则不会轮换日志文件。
  • 复制截断 – 创建副本后将原始日志文件截断到位。
  • postrotate/endscript – postrotate 和 endscript 之间的行在日志文件旋转后执行。
  • 共享脚本 – 脚本只运行一次,无论有多少日志匹配通配符模式。

您还可以在 /etc/logrotate.d/ 目录中创建自己的日志规则文件并定义自己的规则。

Cron 每天运行 logroate 实用程序来搜索要轮换的日志文件。 您可以在中指定自动日志轮换规则 /etc/cron.daily/logrotate 文件以避免手动用户干预。 它将每天在特定时间执行日志轮换。

要验证日志文件是否正在轮换,请运行:

$ cat /var/lib/logrotate.status

样本输出:

logrotate state -- version 2
"/var/log/samba/log.smbd" 2016-5-12-11:0:0
"/var/log/lircd" 2016-6-15-10:0:0
"/var/log/httpd/*log" 2016-5-12-11:0:0
"/var/log/wtmp" 2016-5-6-10:0:0
"/var/log/samba/*.log" 2016-5-12-11:0:0
"/var/log/btmp" 2017-4-1-11:36:53
"/var/log/samba/log.nmbd" 2016-5-12-11:0:0

有关更多详细信息,请输入以下命令运行 logrotate:

$ logrotate --help

或者,

$ man logrotate

这就是现在的一切。 Logrotate 是一个简单但有用的日志轮换工具,可简化日志管理。 您无需为复杂的配置和安装步骤而苦恼。 一切都是不言自明的。 如果您正在管理一个产生大量日志文件的系统,您可以使用 Logrotate 定期轮换它们。

干杯!

资源:

感谢您的光临!

帮助我们帮助您:

祝你有美好的一天!!