关于IT运维技术的
最佳实践博客网站

使用logrotate高效切割轮询管理nginx日志文件

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

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

老方法,使用mv 添加定时任务。

切割nginx日志并删除指定天数前的日志记录

新方法使用logratate:

由于logratate已经加到cron.daily(/etc/cron.daily/logrotate),不再需要加到计划任务中。

主流Linux发行版上都默认安装有logrotate包,如果出于某种原因,logrotate没有出现在里头,你可以使用apt-get或yum命令来安装。

#Ubuntu/debian
apt-get install logrotate cron
在Fedora,CentOS或RHEL上
yum install logrotate crontabs

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

1、轮询nginx日志,其它日志也是类似的配置过程。vim /etc/logrotate.d/nginx

/home/wwwlogs/*nginx.log {
daily
rotate 5
missingok
dateext
compress
delaycompress
notifempty
mail admin@cnhzz.com
create 644 www root
sharedscripts
postrotate
    [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
  • home/wwwlogs/*nginx.log 需要轮询日志路径
  • daily: 日志文件将按月轮循。其它可用值为‘daily’,monthly,‘weekly’或者‘yearly’。
  • rotate 5: 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。
  • missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
  • dateext 使用日期作为命名格式
  • compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。
  • delaycompress: 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
  • notifempty: 如果日志文件为空,轮循不会进行。
  • sharedscripts 表示postrotate脚本在压缩了日志之后只执行一次
  • create 644 www root: 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。
  • postrotate/endscript: 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。

2、运行logrotate,当然可以在任何时候从命令行手动调用。

#要调用为/etc/lograte.d/下配置的所有日志调用logrotate:
logrotate /etc/logrotate.conf
#要为某个特定的配置调用logrotate:
logrotate /etc/logrotate.d/nginx

3、模拟测试轮询分隔。

[root@aliyun wwwlogs]# logrotate -d /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx

Handling 1 logs

rotating pattern: /home/wwwlogs/*nginx.log  after 1 days (5 rotations)
empty log files are not rotated, old logs are removed
considering log /home/wwwlogs/access_nginx.log
  log does not need rotating
considering log /home/wwwlogs/error_nginx.log
  log does not need rotating
considering log /home/wwwlogs/www.cnhzz.com_nginx.log
  log does not need rotating
not running postrotate script, since no logs were rotated

如果文件的时间小于一天,就会提示,logrotate判断该轮循是不必要的。

4、强制轮询切割日志

[root@aliyun wwwlogs]# logrotate -vf /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx

Handling 1 logs

rotating pattern: /home/wwwlogs/*nginx.log  forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /home/wwwlogs/access_nginx.log
  log needs rotating
considering log /home/wwwlogs/error_nginx.log
  log does not need rotating
considering log /home/wwwlogs/www.cnhzz.com_nginx.log
  log needs rotating
rotating log /home/wwwlogs/access_nginx.log, log->rotateCount is 5
dateext suffix '-20150709'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /home/wwwlogs/access_nginx.log-20150709.gz already exists, skipping rotation
rotating log /home/wwwlogs/www.cnhzz.com_nginx.log, log->rotateCount is 5
dateext suffix '-20150709'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
destination /home/wwwlogs/www.cnhzz.com_nginx.log-20150709.gz already exists, skipping rotation

已经强制切割保存为了.gz 的文件。

赞(0)
未经允许不得转载:菜鸟HOW站长 » 使用logrotate高效切割轮询管理nginx日志文件

留下你的脚印

  Subscribe  
提醒