您的位置:首页 > 其它

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

2017-06-27 18:58 232 查看

概述

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.1
xxx.log.2.gz
,如果不需要压缩可以将
compress
delaycompress
选项去掉.

logrotate配置项

copytruncate 首先将目标文件复制一份,然后在做截取(truncate)。这样做就防止了直接将原目标文件重命名引起的问题。

rotate 备份的数量

daily, weekly, monthly, or yearly 每天、星期、月或者是年备份一次

size 目标文件达到一定大小后进行备份

参考文献

easy-logging-with-logrotate-and-supervisord

/etc/logrotate.conf && /etc/logrotate.d/*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: