3 min read

优雅的处理日志-logrotate

5/100

对系统管理员或者运维的同学来说,处理日志是很常见的工作,日志里的数据是系统监控,问题诊断,性能分析的重要数据来源.不过随着业务的变化生产的日志体量也越来越庞大,如果不考虑日志的合理存储策略,那么生产系统有一天也会因为空间不足而无法提供服务,造成生产事故.

通常我们要处理日志下意识的反应就是"写一个脚本来处理", 如果你的脚本经验丰富可以很轻松的处理这些问题,那么写一个脚本来处理也许更适合你.但如果对脚本的编写不那么熟悉,那么logrotate这款工具可以帮你轻松的完成任务.

通识概念

logrotate已经在大多数的Linux发行版中自带了,如果你的电脑中没有这个命令可以直接用包管理进行安装:

#CentOS
yum install logrotate -y 

#Ubuntu
apt install logrotate -y

logrotate可以帮你对日志进行切割,归档,删除旧的归档,对日志进行压缩甚至通过电子邮件邮寄日志到你的邮箱.

logrotate会读取配置文件,配置文件中存储的就是日志的处理策略./etc/logrotate.conf是主要的配置文件,打开配置文件我们会发现有一行配置是include /etc/logrotate.d./etc/logrotate.d存放的是对应应用程序日志处理策略配置.

需要注意的就是/etc/logrotate.d下的配置会覆盖/etc/logrotate.conf.

logrotate会每天执行一次,可以在/etc/corn.daily/logrotate看到执行的脚本哦.

使用logrotate

logrotate的使用重点在对配置文件中各个选项的理解.完整的选项列表可以在man logrotate手册中查找到.

Youtube上有视频对常用的参数做了介绍:

logrotate

这里举个例子:

/var/log/nginx/*log {
    create 0664 nginx root
    daily
    rotate 10
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

create: logrotate对日志进行归档的操作是先进行重命名操作(mv access_log access_log.1)然后再进行其他处理(压缩等).所以create就是使用后面的权限,用户和用户组重新创建一个新的同名文件.也可以使用copytruncate来让logrotate始终处理同一个日志文件(即不进行mv操作)

daily: 每天对日志进行一次归档,其他可选项是weekly,yearly

rotate: 总共保留多少份归档,对于旧的归档logrotate会将它删除

missingok: 如果日志文件不存在,不要报错继续对其他可用日志进行归档

notifempty: 对空的日志不做归档

delaycompress: 对归档的日志延迟压缩,

例如原始日志access_log的归档日志有2份,access_log.1,access_log.2

如果不启用delaycompress那么归档的日志均会被压缩access_log.1.gz,access_log.2.gz.

而启用了delaycompress最近的归档不会被压缩:

access_log.1,access_log.2.gz