searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何使用logrotate管理linux日志文件

2023-06-02 10:22:13
24
0

背景:

日志文件记录关键应用或者系统的运行过程中发生重要信息。日志文件在排障或者系统监控中,有十分重要的作用。对于业务量大的应用来说,日志文件可能很快增长为很大很大,甚至将磁盘空间耗尽,将严重影响业务的正常运行。即使空间足够,打开和检查单个巨型日志文件也很棘手。

logrotate介绍

logrotate 是一个非常有用的工具,它可以自动分割(或转储)、压缩以及删除旧的日志文件。例如,你可以设定 logrotate 来分割 /var/log/foo 文件,每 30 天轮转一次,删除超过 6 个月的日志。一旦设定,使用 logrotate 自动执行该过程,无需进一步人为干预。 另外,你也可以将旧日志通过邮件发送出去。

安装logrotate

logrotate 包通常默认安装在主要的 Linux 发行版上。如果系统不存在 logrotate,您可以使用 apt-get 或 yum 命令安装它。

在Debian或Ubuntu上:

# apt-get install logrotate cron

在Fedora,CentOS或RHEL上:

# yum install logrotate crontabs

logrotate 的配置文件是 /etc/logrotate.conf,一般不需要修改。需要转储的日志文件在 /etc/logrotate.d/ 目录下用独立的配置文件定义。

示例1:

在第一个例子中,我们将创建一个10MB的日志文件 /var/log/log-file。我们将学习如何使用 logrotate 来管理这个日志文件。

我们首先创建一个日志文件,并填充一个10MB的随机比特流。

# touch /var/log/log-file

# head -c 10M < /dev/urandom > /var/log/log-file

现在日志文件已经准备好了,让我们来配置 logrotate 转储这个日志文件。让我们创建一个配置文件:

/var/log/log-file {

monthly

rotate 5

compress

delaycompress

missingok

notifempty

create 644 root root

postrotate

/usr/bin/killall -HUP rsyslogd

endscript

}

配置说明:

  • monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
  • rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
  • compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
  • delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
  • missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • notifempty: 如果日志文件为空,轮循不会进行。
  • create 644 root root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

示例2:

在本例中,我们希望仅在日志文件大小超过50MB时进行日志转储。

/var/log/log-file {

    size=50M

    rotate 5

    create 644 root root

    postrotate

        /usr/bin/killall -HUP rsyslogd

    endscript

}

示例3:

如果希望旧的日志文件按照创建日期命名,可以通过添加 dateext 参数实现。

/var/log/log-file {

Monthly

rotate 5

Dateext

create 644 root root

Postrotate

/usr/bin/killall -HUP rsyslogd

Endscript

}

这将导致存档日志文件在其名称中包含日期。

排障

  • 手动执行logrotate

logrotate可以在任何时候从命令行手动调用。

  1. /etc/lograte.d/下配置的所有日志调用logrotate

# logrotate /etc/logrotate.conf

  1. 某个特定的配置调用logrotate

# logrotate /etc/logrotate.d/log-file

  • 演练

排障过程中的最佳选择是使用‘-d’选项以预演方式运行logrotate。要进行验证,不用实际轮循任何日志文件,可以模拟演练日志轮循并显示其输出。

# logrotate -d /etc/logrotate.d/log-file

根据上面的输出我们可以看出,logrotate决定不需要进行转储,因为日志文件的创建时间小于1天。

小结

logrotate是一个防范日志文件过大的工具,配置后可以长久自动地执行,无需人工干预。本文讲解了几个logrotate使用的案例,你可以根据需求进行更进一步的定制。

参考文献:

xmodulo.com/logrotate-manage-log-files-linux.html

0条评论
0 / 1000
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝