doina

一个小菜鸟运维工程师.

Linux日志文件总管 logrotate

logrotate介绍

  • 参考:https://linux.cn/article-4126-1.html
  • 参考:https://blog.csdn.net/vicky_lxw/article/details/58594400

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

默认会安装如没有安装则使用 yum install logrotate crontabs 安装

命令参数

-d, --debug模式,       隐含-v,不会对日志文件做实际操作
-f, --force             强制轮转日志
-m, --mail <command>    邮寄日志时使用的命令
-s, --state <statefile> 指定另一个state文件
-v, --verbose           详细信息
--usage                 打印帮助

配置文件参数

  • 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 进程将立即再次读取其配置并继续运行。

实战

因为我们的日志已经被elk采集走了,所以本地的日志就没有必要保留一个月,而且会触发zabbix空间报警,所以修改日志处理策略

[root@baiyongjie logrotate.d]# ls /var/log/
anaconda           boot.log-20191015  cron-20190930                 journal           messages-20190922  php-fpm          secure-20191013   tuned             yum.log
audit              boot.log-20191016  cron-20191006                 lastlog           messages-20190930  redis            spooler           vsftpd            yum.log-20190101
boot.log           btmp               cron-20191013                 maillog           messages-20191006  rhsm             spooler-20190922  wtmp
boot.log-20191010  btmp-20191001      dmesg                         maillog-20190922  messages-20191013  sa               spooler-20190930  xferlog
boot.log-20191011  chrony             dmesg.old                     maillog-20190930  multi-nic-util     secure           spooler-20191006  xferlog-20190922
boot.log-20191012  cloud-init.log     ecs_network_optimization.log  maillog-20191006  mysqld.log         secure-20190922  spooler-20191013  xferlog-20190930
boot.log-20191013  cron               grubby                        maillog-20191013  ntp.log            secure-20190930  squid             xferlog-20191006
boot.log-20191014  cron-20190922      grubby_prune_debug            messages          ntpstats           secure-20191006  tallylog          xferlog-20191013

修改配置文件

因为是测试环境我直接修改的是全局的配置文件,生产环境应该修改/etc/logrotate.d/目录下的对应文件

$ cp /etc/logrotate.conf{,.bak}


#修改后对比
$ diff /etc/logrotate.conf{,.bak}
6c6
< rotate 2  #保留2周
---
> rotate 4
15,16c15
< compress  #开启历史日志压缩
< delaycompress #指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。
---
> #compress

执行logrotate

$ logrotate -fv /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file bootlog
reading config file chrony
reading config file mysql
reading config file php-fpm
reading config file redis
......
removing /var/log/secure-20190922.gz
removing old log /var/log/secure-20190922.gz
removing /var/log/secure-20190930.gz
removing old log /var/log/secure-20190930.gz
removing /var/log/secure-20191006.gz
removing old log /var/log/secure-20191006.gz
......
compressing log with: /bin/gzip
removing /var/log/btmp-20191001.gz
removing old log /var/log/btmp-20191001.gz
destination /var/log/btmp-20191016 already exists, skipping rotation
[root@baiyongjie ~]# ls /var/log/
anaconda              boot.log-20191014.gz  cron                          grubby_prune_debug   messages-20191013.gz  redis               spooler-20191013.gz  wtmp-20191016.gz
audit                 boot.log-20191015.gz  cron-20191013.gz              journal              messages-20191016.gz  rhsm                spooler-20191016.gz  xferlog
boot.log              boot.log-20191016.gz  cron-20191016.gz              lastlog              multi-nic-util        sa                  squid                xferlog-20191013
boot.log-20191010.gz  btmp                  dmesg                         maillog              mysqld.log            secure              tallylog             xferlog-20191016
boot.log-20191011.gz  btmp-20191016.gz      dmesg.old                     maillog-20191013.gz  ntp.log               secure-20191013.gz  tuned                yum.log
boot.log-20191012.gz  chrony                ecs_network_optimization.log  maillog-20191016.gz  ntpstats              secure-20191016.gz  vsftpd               yum.log-20190101
boot.log-20191013.gz  cloud-init.log        grubby                        messages             php-fpm               spooler             wtmp                 yum.log-20191016.gz

线上示例

# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    compress
    delaycompress
    daily
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
点赞

发表评论

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据