Logrotate日志切割
前言
最近将docker上的nginx服务完善添加日志的切割,之前一直是一个文件时间久了出现体积过大,而且不利于查看访问情况(比如每个小时情况、每天的情况等)
实现
日志切割,在Linux中自带有Logrotate,但是默认情况最小粒度是按天切割,比如需要按小时切割则需要做一些修改。下面为详细的过程。
Logrotate配置文件修改
# 编辑 vi /etc/logrotate.conf # 删除下面这行前面的#号 include /etc/logrotate.d
支持按小时切割
# 将按天切割中的logrotate复制到按小时cron cp /etc/cron.daily/logrotate /etc/cron.hourly/logrotate
添加具体服务的切割配置文件
# 进入logrotate目录新建配置文件 cd /etc/logrotate.d # 这里示例采用nginx vi nginx # 填充如下内容 /var/log/nginx/*.log { # 这里是nginx中存放日志的地方 hourly # 按小时切割 missingok # #如果日志文件不存在,继续进行下一个操作,不报错 rotate 48 # 最多保留最近48份日志文件 nocompress # 不压缩 create 640 nginx adm # 新日志文件的权限以及组 sharedscripts postrotate docker exec nginx bash -c "if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec nginx cat /run/nginx.pid`; fi" # 执行切割的命令,注意博主这边命名nginx的container为nginx endscript }
haproxy分享
博主这边再分享一个haproxy的日志切割配置文件,当然官方默认的镜像是不支持日志输出,可以使用一位作者使用的镜像mminks/haproxy-docker-logging
/var/log/haproxy/haproxy.log {
hourly
missingok
rotate 48
nocompress
create 640 root adm
sharedscripts
postrotate
docker exec haproxy sh -c "/bin/kill -HUP `docker exec haproxy cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true" # 注意博主这边命名nginx的container为haproxy
endscript
}