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

概述

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/*

转载于:https://my.oschina.net/alazyer/blog/1036945

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值