Centos 使用rsyslog自动定时切割网站运行日志

古哥 网站咨询

本方法可用于Centos 7、Centos 8、Centos Stream 8系统自动分割网站运行日志,其他Linux平台未做测试。

我们都知道网站运行,有人访问,就会有日志产生。随着时间的推移,网站日志文件会越来越大。

好在Linux系统自带了一个rsyslog服务,可以用于自动切割系统运行日志。我们经过一些简单的配置,就可以实现每天、每周或者每月定时将日志文件重命名为日期格式,并且可以定时自动删除那些已经保存了很久的日志文件。

回复

共5条回复 我来回复
  • 古哥的头像
    古哥
    联系邮箱:admin#iymark.com
    评论

    在/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 0条评论
  • 古哥的头像
    古哥
    联系邮箱:admin#iymark.com
    评论

    值得一提的是,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 0条评论
  • 古哥的头像
    古哥
    联系邮箱:admin#iymark.com
    评论

    最后,我再给一份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 0条评论
  • 古哥的头像
    古哥
    联系邮箱:admin#iymark.com
    评论

    最后,来几张图,可以搭配着看。对啦,顺便提一句,你可以使用如下命令,查看rsyslog服务最近的日志分割详情:

    cat /var/lib/logrotate/logrotate.status

    2021013109154325

    2021013109155053

    2021013109155661

    2021013109160135

    2021年01月31日 17:16 0条评论
  • 古哥的头像
    古哥
    联系邮箱:admin#iymark.com
    评论

    经过实测,发现需要把文件权限改成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 0条评论
微信小程序
微信公众号