logrotate日志分割

 https://www.cnblogs.com/dadonggg/p/8649706.html

一. 以docker运行的mongo日志为例

/etc/logrotate.d中编写mongo文件如下, 实际执行时不能写注释内容

/mnt/elements/log/mongodb/mongod.log {
su root docker  #因为mongod.log上级目录mongodb权限为777,这里需要指定mongod.log的所属用户
daily    #指定转储周期为每天
rotate 15  #保留15个的文件数
create
dateext   #使用当期日期作为命名格式
missingok  #如果日志丢失,不报错继续滚动下一个日志
notifempty #当日志文件为空时,不进行轮转
}

如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要
# /usr/sbin/logrotate -f /etc/logrotate.d/mongo
# /usr/sbin/logrotate -d -f /etc/logrotate.d/mongo

 

mongo经测试不能使用这种方式,虽然生产了新的mongo日志文件,但是不会自动向里面写内容,需要用下面定时任务的方式

00 00 * * * /usr/local/bin/mongo --eval "new Mongo('localhost').getDB('admin').runCommand({logRotate:1});"

 

参考:https://blog.csdn.net/qq_31183727/article/details/90236112

 

 

 二. docker中nginx日志分割

/etc/logrotate.d/nginx内容如下

/mnt/elements/log/nginx/access.log {
  su root root 
  daily   
  rotate 7  
  create 0644 root root
  dateext
  missingok  
  notifempty 
  sharedscripts
  postrotate
      docker exec elements_nginx_1 bash -c "if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec elements_nginx_1 cat /run/nginx.pid`; echo 日志打包完毕; fi"
  endscript
}

这种写法生成的新日志文件所属用户可能为systemd-resolve 

 

 

每日轮询默认是在每天早上6:25执行的

root@ip-10-0-0-89:/etc# cat /etc/crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

https://www.cnblogs.com/276815076/p/7053640.html

 

如果想自定义轮询时间 crontab -e中写入

0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx -fv  >/tmp/logro.log 2>&1

 

 

kill -USR1的含义不是终止nginx的进程,而是传递给它信号重新生成日志

kill -USR1 $(/bin/cat /var/run/nginx.pid)

kill -USR1的含义:
1)nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。
2)然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)
3)nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log-$date.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)
 
 
另外一种写法如下,参考:https://www.cnblogs.com/zhangeamon/p/7092702.html
docker inspect -f '{{ .State.Pid }}' nginx | xargs kill -USR1


https://www.it610.com/article/1290705252365967360.htm
https://blog.csdn.net/wu__peng/article/details/90754671

 

 

三. docker中traefik的日志轮询

经测试发现,好像不写create后面的文件归属,以及su root root后,生成的新文件属性就可以为root:root。

cat /etc/logrotate.d/traefik
/data/elements/logs/traefik/access.log {
daily   #指定转储周期为每天
rotate 10  #转储次数,超过将会删除最老的那一个
create
dateext  #使用当前日期作为命名格式
missingok  #忽略错误
#size 10G #size选项将忽略每日,每周,每月时间选项,看需要是否要写 notifempty  #如果日志文件为空,不执行切割 sharedscripts  #只为整个日志组运行一次的脚本 postrotate  #postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 docker inspect
-f '{{ .State.Pid }}' elements_traefik_1 | xargs kill -USR1 endscript
}
  • weekly    指定转储周期为每周
  • monthly  指定转储周期为每月
  • compress   通过gzip 压缩转储旧的日志
  • delaycompress   当前转储的日志文件到下一次转储时才压缩
  • prerotate/endscript   在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript   在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • size    size当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem). 

 

/usr/sbin/logrotate -d -f /etc/logrotate.d/traefik测试下,没问题的话写入定时任务

0 1 * * * /usr/sbin/logrotate /etc/logrotate.d/traefik -fv  >/tmp/logro-traefik.log 2>&1

 

 traefik日志轮询方法2

这种方法生成的新日志文件,用户所属都是root:root, 可以尝试比较下

/mnt/elements/logs/traefik/access.log
{
        daily
        size=300M
        rotate 10
        copytruncate
        missingok
        notifempty
        compress
        delaycompress
        dateext
}
  • copytruncate。在创建副本后在原地截断原始日志文件,而不是移走旧日志文件并(可选)创建新日志文件。当程序无法关闭其日志文件并且可能继续写入到旧日志文件时,请使用此参数。
  • 注: 从复制该文件到将其截断之间可能存在一小段时间,因此,部分日志记录数据可能会丢失。使用此选项时,create 选项将不起作用,因为旧日志文件将留在原地。

 


posted @ 2021-12-17 11:46  坚强的小蚂蚁  阅读(302)  评论(0编辑  收藏  举报