优雅的处理日志-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上有视频对常用的参数做了介绍:
这里举个例子:
/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
Member discussion