Linux下Tomcat和nginx日志切割轮转

程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,每次在监控上看到磁盘空间都要满了,还需要手动清理,非常的麻烦。为此下面介绍一款强大的系统软件,对日志文件有着一套完整的操作模式。

logrotate功能简单介绍:


1、把旧的日志文件删除,并创建新的日志文件。
2、可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行。
默认logrotate加到cron(/etc/cron.daily/logrotate)作为每日任务执行。 通过让用户来配置规则的方式,检测和处理日志文件。 并且可以配合Cron处理定时任务。 预制了大量判断条件和处理方式。

下面举例说明


上配置

logrotate的主配置在 /etc/logrotate.conf,在主配置文件内会引入 /etc/logrotate.d 配置目录
一般来说我们只需要把自己的配置文件放到/etc/logrotate.d/下面就可以了

[root@NEWCWS-AS06 logrotate.d]# cat /etc/logrotate.d/tomcat 
/data/tomcat-*/logs/catalina.out{
    daily
    size 500M
    rotate 7
    missingok
    copytruncate
    create 644 root root
    dateext
    notifempty
    compress
}

配置说明

daily # 每天分割
size 500M # 日志文件大于500M才会去轮转
rotate 7 # 保留最近7次轮转的日志
missingok # 如果日志文件丢失,不要显示错误
copytruncate #用于还在打开中的日志文件,把当前日志备份并截断
create 644 root root # 使用指定的文件模式创建新的日志文件,创建的轮转文件权限
dateext # 轮询的文件名字带有日期信息
notifempty # 如果日志文件为空,则不转储
compress #通过gzip压缩转储以后的日志,以*.gz结尾

测试一下轮转


[root@k8s-master01 logrotate.d]# logrotate /etc/logrotate.d/tomcat
[root@k8s-master01 logrotate]# ls /data/tomcat-document-aggregation/logs/catalina.out* -l
-rw-r----- 1 root root   4401613 4月  29 09:19 /data/tomcat-document-aggregation/logs/catalina.out
-rw-r----- 1 root root 385944620 4月  29 08:43 /data/tomcat-document-aggregation/logs/catalina.out-20210429.gz

OK。配置文件没有问题

下面我们看一下crond服务配置

[root@k8s-master01 ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
[root@k8s-master01 ~]# 
[root@k8s-master01 ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-04-26 14:52:20 CST; 2 days ago
 Main PID: 1503 (crond)
    Tasks: 1 (limit: 99475)
   Memory: 8.5M
   CGroup: /system.slice/crond.service
           └─1503 /usr/sbin/crond -n

4月 29 03:01:01 k8s-master01 anacron[3213759]: Jobs will be executed sequentially
4月 29 03:46:01 k8s-master01 anacron[3213759]: Job `cron.daily' started
4月 29 03:46:01 k8s-master01 anacron[3213759]: Job `cron.daily' terminated
4月 29 03:46:01 k8s-master01 anacron[3213759]: Normal exit (1 job run)
4月 29 04:01:01 k8s-master01 CROND[3266006]: (root) CMD (run-parts /etc/cron.hourly)
4月 29 05:01:01 k8s-master01 CROND[3318305]: (root) CMD (run-parts /etc/cron.hourly)
4月 29 06:01:01 k8s-master01 CROND[3370655]: (root) CMD (run-parts /etc/cron.hourly)
4月 29 07:01:01 k8s-master01 CROND[3422976]: (root) CMD (run-parts /etc/cron.hourly)
4月 29 08:01:01 k8s-master01 CROND[3475277]: (root) CMD (run-parts /etc/cron.hourly)
4月 29 09:01:01 k8s-master01 CROND[3527598]: (root) CMD (run-parts /etc/cron.hourly)

crond在运行中,到这里就可以了配置成功,等明天上班看一下效果

全部配置说明

有需要自己选用,但我们项目上面配置已够用

daily,weekly,monthly  # 转储周期分别是每天/每周/每月;
minsize 15M           # 日志体积大于此值时轮换(例如:100K,4M);
dateext	              # 轮询的文件名字带有日期信息;
missingok             # 如果日志文件丢失,不要显示错误;
rotate 5              # 轮转存储中包含多少备份日志文件,0为无备份,以数字为准;
compress              # 通过gzip压缩转储以后的日志,以*.gz结尾;
nocompress            # 不需要压缩时,用这个参数;
delaycompress         # 延迟压缩,和compress一起使用时压缩所有日志,除当前和下一个最近的;
nodelaycompress       # 覆盖delaycompress选项,转储同时压缩;
copytruncate          # 用于还在打开中的日志文件,把当前日志备份并截断;
nocopytruncate        # 备份日志文件但是不截断;
create 644 www root   # 转储文件,使用指定的文件模式创建新的日志文件;
nocreate              # 不建立新的日志文件;
errors renwole@my.org # 专储时的错误信息发送到指定的Email地址;
ifempty               # 即使是空文件也转储,这个是logrotate的缺省选项;
notifempty            # 如果日志文件为空,则不转储;
mail renwole@my.org   # 把转储的日志文件发送到指定的E-mail地;
nomail                # 转储时不发送日志文件;
olddir /tmp           # 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统;
noolddir              # 转储后的日志文件和当前日志文件放在同一个目录下;
prerotate/endscript   # 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行;
postrotate/endscript  # 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行;
tabooext              # 不转储指定扩展名的文件,缺省扩展名:cfsaved,.disabled,.dpkg-dist等;
sharedscripts         # 共享脚本,让postrotate/endscript包含脚本只执行一次即可;
dateformat            # 配合dateext使用可以为切割后的日志加上YYYYMMDD格式的日期;

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/477.html

发表评论

登录后才能评论