supervisord + logrotate实现程序日志按天备份

原创
2017/06/27 18:58
阅读数 9.9K

概述

supervisord可以实现对进行的监控,自动重启等功能,而logrotate可以根据用户的配置将文件自动备份。本文档说明如何使用supervisor监控一个进行,并每天将被监控的进程产生的日志进行备份,共保留30天日志。

需要说明的是,supervisor默认也提供日志备份,但是它提供的是当日志文件达到一定容量后进行备份,这个很方便,但是当想要将每天的日志单独拿出来放到一个文件来说就不是很方便了。

本文档综合了supervisor的功能和logrotate的功能,最终实现了将程序输出的日志以天为单位进行保存,并且保存指定天数的日志,从而避免日志文件消耗过多磁盘资源的问题。

supervisor配置

# /etc/supervisor/conf.d/my_app.conf
[program:my_app]
directory=/opt/%(program_name)s
command=/opt/%(program_name)s/run

stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log

# no limit on the size
stdout_logfile_maxbytes=0
stderr_logfile_maxbytes=0

# no backup with supervisor
stdout_logfile_backups=0
stderr_logfile_backups=0

要使用logrotate需要确保在supervisor的配置的配置中xxx_logfile_maxbytes=0以及xxx_logfile_backups=0的存在,这样supervisor自己不会进行日志的备份,从而实现用logrotate来进行日志备份的管理。

logrotate配置

# /etc/logrotate.d/my_app
/var/log/supervisor/my_app_*.log {
    daily
    rotate 30 . # num of backups
    copytruncate
    delaycompress    # today and yesterday will not compress
    compress
    missingok
    notifempty
}

说明: 备份出来的日志名称为xxx.log.1xxx.log.2.gz,如果不需要压缩可以将compressdelaycompress选项去掉.

logrotate配置项

  1. copytruncate 首先将目标文件复制一份,然后在做截取(truncate)。这样做就防止了直接将原目标文件重命名引起的问题。
  2. rotate 备份的数量
  3. daily, weekly, monthly, or yearly 每天、星期、月或者是年备份一次
  4. size 目标文件达到一定大小后进行备份

参考文献

  1. easy-logging-with-logrotate-and-supervisord
  2. /etc/logrotate.conf && /etc/logrotate.d/*
展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部