余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

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

xiyangw 2023-05-14 11:12 13 浏览 0 评论

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

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

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

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/nginx
logrotate -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.d
total 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.d
total 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.conf
weekly 			//默认每一周执行一次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 nobody
nocreate //不建立新的日志文件
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 %s
size(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
}

参考文章

  • https://www.digihunch.com/2018/05/cron-and-logrotate-in-centos/
  • https://www.jianshu.com/p/c44e7d79096e
  • http://c.biancheng.net/view/1095.html
  • https://cloud.tencent.com/developer/article/1619542
  • https://zhuanlan.zhihu.com/p/90507023
  • https://blog.csdn.net/xiaojin21cen/article/details/122309230
  • https://blog.csdn.net/damiaomiao666/article/details/72597731
  • https://www.cnblogs.com/wushuaishuai/p/9330952.html#_label0
  • https://www.jianshu.com/p/87e2fd01393c

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: