龙空技术网

Linux日志切割工具Logrotate配置详解

海淘世界 1259

前言:

现时咱们对“apache224解析漏洞”可能比较关怀,你们都需要学习一些“apache224解析漏洞”的相关知识。那么小编也在网上收集了一些关于“apache224解析漏洞””的相关内容,希望同学们能喜欢,我们快快来学习一下吧!

日志记录了程序运行时各种信息,通过日志可以分析用户行为,记录运行轨迹,查找程序问题。随着时间增长,日志越来越大,为了节省空间和整理方便,日志文件经常需要按时间或大小等维度分成多份,删除时间久远的日志文件,这也称为日志轮转、日志分割、日志切割等。

Logrotate 程序是Linux默认安装的日志文件管理工具,它可以用来轻松分割日志文件,压缩转存、删除旧的日志文件,并创建新的日志文件。

Logrotate(/usr/sbin/logrotate)由Linux计划任务crond(/usr/sbin/crond)定期驱动运行的,它的主配置文件位于:/etc/logrotate.conf。

logrotate命令格式如下:

logrotate [OPTION...] <configfile>

常用选项包括:

-d, --debug :debug模式,测试配置文件是否有错误。-f, --force :强制转储文件。-m, --mail=command :压缩日志后,发送日志到指定邮箱。-s, --state=statefile :使用指定的状态文件。-v, --verbose :显示转储过程。

既然Logrotate是一个普通的程序,那么我们就可以手动运行它,例如 -f 进行调试:

logrotate -f /etc/logrotate.d/nginxlogrotate -f /etc/logrotate.d/php
Logrotate配置文件介绍

Linux系统已经默认安装了logrotate,位于/usr/sbin/logrotate,配置文件包括:

/etc/logrotate.conf 主配置文件,其中语句include /etc/logrotate.d的作用是包含logrotate.d目录下的配置文件。/etc/logrotate.d/ 应用程序配置文件,保存一些应用的配置文件(Apache、Nginx、MySQL、PHP、Tomcat…)

# ll /etc/logrotate.dtotal 56-rw-r--r--  1 root root   91 Mar 15  2022 bootlog-rw-r--r--. 1 root root  130 Feb 19  2018 btmp-rw-r--r--. 1 root root  160 May 12  2021 chrony-rw-r--r--. 1 root root   88 Apr 12  2021 dnf-rw-r--r--  1 root root   93 Mar 15  2022 firewalld-rw-r--r--  1 root root  194 Mar 25  2022 httpd-rw-r--r--. 1 root root  162 Mar 11  2022 kvm_stat-rw-r--r--  1 root root 1977 Sep 22  2021 mysqld-rw-r--r--  1 root root  203 Nov 10  2021 php-fpm-rw-r--r--. 1 root root  408 Apr 12  2021 psacct-rw-r--r--. 1 root root  155 Mar 16  2022 samba-rw-r--r--. 1 root root  237 Feb  2  2022 sssd-rw-r--r--  1 root root  100 May 19  2021 wpa_supplicant-rw-r--r--. 1 root root  145 Feb 19  2018 wtmp
Logrotater日志文件切割策略

主配置文件 logrotate.conf 定义了Logrotate的默认行为,例如轮转周期、保留几个日志文件、是否压缩等。

注意:include /etc/logrotate.d 语句还将导入/etc/logrotate.d/ 目录中的各个应用配置,例如Apache、yum等程序。如果想要轮转某个应用产生的日志文件,那么可以将它的日志轮转配置文件放到这个目录。

# ll -h /etc/logrotate.dtotal 28K-rw-r--r--  1 root root  91 Aug  6  2019 bootlog-rw-r--r--  1 root root 160 Sep 19  2018 chrony-rw-r--r--  1 root root 194 Jan  8  2022 httpd-rw-r--r--  1 root root 810 Oct  2  2020 mariadb-rw-r--r--  1 root root 224 Sep 30  2020 syslog-rw-r--r--. 1 root root 100 Oct 31  2018 wpa_supplicant-rw-r--r--  1 root root 103 Aug  8  2019 yum

文件的最后还举了两个示例,从这两个示例可以看出logrotate使用方法非常简单:

/var/log/wtmp 表示想要轮转的对象(这里是文件wtmp),除了单个文件以外,还支持通配符以表示多个文件,例如:

/var/log/news/*:/var/log/news/目录下的所有文件~/log/*.log:~/log/目录下所有.log文件

# cat /etc/logrotate.confweekly 			//默认每一周执行一次rotate轮转工作rotate 4 		//保留多少个日志文件(轮转几次),默认保留四个,即指定日志文件删除之前轮转的次数,0 指没有备份create 			 //自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为修改了日志文件名,因此要创建一个日志文件dateext 	  //这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216,如果注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式compress //是否通过gzip压缩转储以后的日志文件,如xxx.log-20131216.gz ;如果不需要压缩,注释掉就行include /etc/logrotate.d //导入/etc/logrotate.d/ 目录中的各个应用配置/var/log/wtmp { 		//仅针对 /var/log/wtmp 所设定的参数    monthly //每月一次切割,取代默认的一周    minsize 1M //文件大小超过 1M 后才会切割    create 0664 root utmp //指定新建的日志文件权限以及所属用户和组    rotate 1 //只保留一个日志}#这个 wtmp 可记录用户登录系统及系统重启的时间#因为有 minsize 的参数,因此不见得每个月一定会执行一次喔,要看文件大小。/var/log/btmp {    missingok    monthly    create 0600 root utmp    rotate 1}

Logrotate中其他可配置参数,具体如下:

compress //通过gzip 压缩转储以后的日志nocompress //不做gzip压缩处理copytruncate //用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。nocopytruncate //备份日志文件不过不截断create mode owner group //轮转时指定创建新文件的属性,如create 0777 nobody nobodynocreate //不建立新的日志文件delaycompress //和compress 一起使用时,转储的日志文件到下一次转储时才压缩nodelaycompress //覆盖 delaycompress 选项,转储同时压缩。missingok //如果日志丢失,不报错继续滚动下一个日志errors address //专储时的错误信息发送到指定的Email 地址ifempty //即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。notifempty //当日志文件为空时,不进行轮转mail address //把转储的日志文件发送到指定的E-mail 地址nomail //转储时不发送日志文件olddir directory //转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统noolddir //转储后的日志文件和当前日志文件放在同一个目录下sharedscripts //运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本prerotate //在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行postrotate //在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行daily //指定转储周期为每天weekly //指定转储周期为每周monthly //指定转储周期为每月rotate count //指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份dateext //使用当期日期作为命名格式dateformat //配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %H %M %S %V %ssize(minsize) logsize //当日志文件到达指定的大小时才轮转,可以指定单位为k或M,例如size 500k、size 100M
Apache日志
# cat /etc/logrotate.d/httpd/var/log/httpd/*log {    missingok    notifempty    sharedscripts    delaycompress    postrotate        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true    endscript}

查看Apache日志目录,可以发现轮转规律与上面描述一致。

# ll -h /var/log/httpd/total 772M-rw-r--r-- 1 root root  76M Nov  7 21:16 access_log-rw-r--r-- 1 root root 166M Oct 16 03:14 access_log-20221016-rw-r--r-- 1 root root 158M Oct 23 03:27 access_log-20221023-rw-r--r-- 1 root root 177M Oct 30 03:34 access_log-20221030-rw-r--r-- 1 root root 196M Nov  6 03:43 access_log-20221106-rw-r--r-- 1 root root  36K Nov  7 21:05 error_log-rw-r--r-- 1 root root 352K Oct 16 03:14 error_log-20221016-rw-r--r-- 1 root root 211K Oct 23 03:27 error_log-20221023-rw-r--r-- 1 root root 302K Oct 30 03:34 error_log-20221030-rw-r--r-- 1 root root 142K Nov  6 03:43 error_log-20221106-rw-r--r-- 1 root root    0 May 22 03:34 ssl_access_log-rw-r--r-- 1 root root  32K May 15 10:46 ssl_access_log-20220522-rw-r--r-- 1 root root    0 May 22 03:34 ssl_error_log-rw-r--r-- 1 root root 1.9K May 15 10:50 ssl_error_log-20220522-rw-r--r-- 1 root root    0 May 22 03:34 ssl_request_log-rw-r--r-- 1 root root  42K May 15 10:46 ssl_request_log-20220522
Nginx日志
# cat /etc/logrotate.d/nginx/var/log/weblog/*.log {    daily  //指定转储周期为每天    compress  //通过gzip 压缩转储以后的日志    rotate 7  //保存7天的日志    missingok  //如果日志文件丢失,不要显示错误    notifempty  //当日志文件为空时,不进行轮转    dateext  //使用当期日期作为命名格式,exp: nginx_access.log-20190120    sharedscripts  //运行postrotate脚本    postrotate  //执行的指令            if [ -f /run/nginx.pid ]; then                    kill -USR1 `cat /run/nginx.pid`            fi    endscript  //结束指令}
PHP-FPM日志
# cat /etc/logrotate.d/php-fpm/var/log/php-fpm/*log {    missingok    notifempty    sharedscripts    delaycompress    postrotate        /bin/kill -SIGUSR1 `cat /run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true    endscript}
参考文章

标签: #apache224解析漏洞 #vcf分割工具 #apache 配置too long truncate to