Centos 使用rsyslog自动定时切割网站运行日志
本方法可用于Centos 7、Centos 8、Centos Stream 8系统自动分割网站运行日志,其他Linux平台未做测试。
我们都知道网站运行,有人访问,就会有日志产生。随着时间的推移,网站日志文件会越来越大。
好在Linux系统自带了一个rsyslog服务,可以用于自动切割系统运行日志。我们经过一些简单的配置,就可以实现每天、每周或者每月定时将日志文件重命名为日期格式,并且可以定时自动删除那些已经保存了很久的日志文件。
在/etc/logrotate.d目录下,新建一个文件(名字随意),比如我这里新建了两个website、modsec。
其中,website用于定期分割网站运行日志,modsec用于定期分割防火墙运行日志。
然后,在文件中加入日志位置,以及一些基本参数。
我的website内容如下:
/data/wwwlog/iymark.com/*.log {
monthly
missingok
dateext
rotate 12
create 0600 root root
}
/data/wwwlog/stat.iymark.com/*.log {
daily
missingok
dateext
rotate 7
create 0600 root root
}表示,每月以日期格式重命名一次iymark.com目录下日志文件,一共最多12份日志文件,超过自动删除;每天以日期格式重命名一次stat.iymark.com目录下日志文件,一共最多7份日志文件,超过自动删除。
我的modsec内容如下:
/var/log/modsec_audit.log {
daily
missingok
dateext
rotate 7
create 0600 root root
}/var/log/modsec_debug.log {
daily
missingok
dateext
rotate 7
create 0600 root root
}表示,每天以日期格式重命名一次日志文件,一共最多7份日志文件,超过自动删除。
然后,保存文件即可。
最后ssh终端运行如下命令,重载rsyslog:
systemctl restart rsyslog
到此,你就再也不用担心日志过大的问题了。
2021年01月31日 17:04值得一提的是,rsyslog服务有着自己的默认规则,如果你只是在/etc/logrotate.d目录下新建了文件给出了日志文件位置,如果某些参数没给出。那么它会使用默认参数,默认参数文件为:/etc/logrotate.conf
内容如下:
# see “man logrotate” for details
# rotate log files weekly
weekly# keep 4 weeks worth of backlogs
rotate 4# create new (empty) log files after rotating old ones
create# use date as a suffix of the rotated file
dateext# uncomment this if you want your log files compressed
#compress# RPM packages drop log rotation information into this directory
include /etc/logrotate.d# system-specific logs may be also be configured here.
2021年01月31日 17:07最后,我再给一份rsyslog服务所可能用到的参数,这样,你就可以根据自己的实际情况,完全自定义自己的日志处理方式了。切记,不要修改/etc/logrotate.conf文件,你只需要修改你在/etc/logrotate.d目录下自己新建的文件即可。
missingok 日志切割期间产生错误将被忽略(如果日志丢失,不报错继续切割)
daily、weekly、monthly、yearly 每天、每周、每月、每年执行
create MODE OWNER GROUP 切割后指定创建新的空白文件的属性
nocreate 不建立新的日志文件
rotate N 保留N份,多余删除,不计算新建日志文件
dateext 用当前日期作为后缀命名格式(默认年月日)
dateformat .%s 配合dateext使用,紧跟在下一行出现,定义切割后的文件名,只支持%Y,%m,%d,%s
size/minsize 达到指定大小才会切割,默认单位bytes,还可以是KB和MB
compress 切割结束后,归档并使用gzip格式压缩
nocompress 解除compress参数
delaycompress 总是与compress参数一起使用,指示logrotate不要将最近的归档压缩,压缩将在下一次切割进行。
nodelaycompress 解除delaycompress参数
ifempty 即使日志为空,也执行切割
notifempty 如果日志为空,切割不执行
prerotate/endscript 在所有其他指令之前执行prerotate和endscript之间的命令。
postrotate/endscript 在所有其他指令完成后,postrotate和endscript之间的命令将被执行。
sharescripts 所有日志切割后统一执行一次脚本,如果没有配置该参数,则每个日志切割后都会执行一次脚本。
errors ADDRESS 切割时的错误信息发送到指定的Emial地址
mail ADDRESS 切割日志发送到指定的Email地址
nomail 切割日志不发送邮件
olddir DIRECTORY 切割后的日志文件放入指定目录,必须与当前日志处在同一文件系统
noolddir 切割后的日志文件与当前文件放在同一目录下
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断;先拷贝后清空,可能丢失部分日志
nocopytruncate 备份日志文件,但不截断。
2021年01月31日 17:10最后,来几张图,可以搭配着看。对啦,顺便提一句,你可以使用如下命令,查看rsyslog服务最近的日志分割详情:
cat /var/lib/logrotate/logrotate.status
2021年01月31日 17:16经过实测,发现需要把文件权限改成644,即
/data/wwwlog/iymark.com/*log {
monthly
missingok
dateext
rotate 12
create 0644 root root
}
/data/wwwlog/stat.iymark.com/*log {
daily
missingok
dateext
rotate 7
create 0644 root root
}2021年02月04日 21:43