Linux 日志管理之logrotate

举报
kaliarch 发表于 2021/12/21 18:30:42 2021/12/21
【摘要】 一 相关概念logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。 二 原理logrotate 的执行由crond服务实现在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天...

一 相关概念

logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们可以根据日志的大小,或者根据其使用的天数来转储。

二 原理

logrotate 的执行由crond服务实现

在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。

(base) [root@go2cloud_api_prod projectlogs]# cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

在执行logrotate时,需要指定其配置文件/etc/logrotate.conf

(base) [root@go2cloud_api_prod projectlogs]# egrep -v "^#|^$" /etc/logrotate.conf 
weekly																	#每周轮转一次
rotate 4																#保留四个日志文件,循环删除之前的
create																	#rotate后,创建一个新的空文件
dateext																	#备份文件名包含日期信息
include /etc/logrotate.d								#这个目录下面配置文件生效
/var/log/wtmp {
    monthly
    create 0664 root utmp								#新的日志文件的权限,属主,属主;
    minsize 1M													#定义日志必须要大于1M大小才会去轮转;
    rotate 1
}
/var/log/btmp {
    missingok														#如果日志丢失, 不报错;
    monthly
    create 0600 root utmp
    rotate 1
}

只想强调下面这行,它的作用包含存放在/etc/logrotate.d目录下面的配置文件,不可或缺。 如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d下面。它其实也因为下面的这句话,在 logrotate服务启动时被读取。

每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。

(base) [root@go2cloud_api_prod logrotate.d]# ll
total 20
-rw-r--r--. 1 root root 136 Jun 10  2014 ppp
-rw-r--r--  1 root root  98 Jul 29  2017 supervisor
-rw-r--r--  1 root root 249 Mar 28  2017 syslog
-rw-r--r--. 1 root root 100 Mar  3  2017 wpa_supplicant
-rw-r--r--. 1 root root 100 Nov 15  2016 yum

Logrotate的运行分为三步,判断系统的日志文件,建立转储计划以及参数,通过cron daemon 运行下面的代码是 Red Hat Linux缺省的crontab 来每天运行logrotate。logrotate启动脚本放在/etc/cron.daily/logrotate中.

三 相关参数

daily                     #指定转储周期为每天
weekly                    #指定转储周期为每周;
monthly                   #指定转储周期为每月;
rotate count              #指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份;
compress                  #通过gzip压缩转储以后的日志;
nocompress                #不需要压缩时,用这个参数;
delaycompress             #延迟压缩,和compress一起使用时,转储的日志文件到下一次转储时才压缩;
nodelaycompress           #覆盖delaycompress选项,转储同时压缩;
copytruncate              #用于还在打开中的日志文件,把当前日志备份并截断;
nocopytruncate            #备份日志文件但是不截断;
create mode owner group   #转储文件,使用指定的文件模式创建新的日志文件;
nocreate                  #不建立新的日志文件;
errors address            #专储时的错误信息发送到指定的Email地址;
ifempty                   #即使是空文件也转储,这个是logrotate的缺省选项;
notifempty                #如果是空文件的话,不转储;
mail address              #把转储的日志文件发送到指定的E-mail地;
nomail                    #转储时不发送日志文件;
olddir directory          #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统;
noolddir                  #转储后的日志文件和当前日志文件放在同一个目录下;
prerotate/endscript       #在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行;
postrotate/endscript      #在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行;
tabootext [+] list        #让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,v,和~ ;
size size                 #当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem);
postrotate                #日志轮换过后指定指定的脚本,endscript参数表示结束脚本;
sharedscripts             #共享脚本,下面的postrotate中的脚本只执行一次即可;

以上参数都可以已定义在全局配置,或者指定为某个日志文件对的配置,但注意使用时参数之间不要冲突。

一个新系统准备上线前,应该做好以下日志的配置,配置到/etc/logrotate.d/目录下即可。

四 实践

配置迁移平台日志滚动

4.1 配置

cat > /etc/logrotate.d/go2cloud-api-prod <<EOF
/data/projectlogs/go2cloud_api.log {
       daily
       dateext
       rotate 15 
       create
       missingok
       notifempty
       nocompress
}
EOF

修改配置文件后,并不需要重启服务。
由于logrotate实际上只是一个可执行文件,不是以daemon运行。

4.2 测试

logrotate -d /etc/logrotate.d/log-file 
 
#强制执行,如果轮询的条件不满足,上面的命令不会执行,这个时候可以用下面这条命令来达到效果
logrotate -vf /etc/logrotate.d/log-file 
-f 强制轮询  -v 打印logrotate  日志

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。