Linux 日志自动分割神器 —— logrotate

前言

我们在Linux服务器上部署服务时,会生成很多日志,如果请求量大的话,日志文件会变得很大,不方便我们定位问题。Linux为我们提供了日志分隔的服务,可用于java、node.js、nginx等服务器的日志分隔及定期清理。

logrotate

  • logrotate 是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。
  • logrotate是基于linux定时任务crontab运行的,主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 linux 系统中找不到 logrotate, 可以使用 apt-get 或 yum 命令来安装。

我们可以通过查看logroate的文件来看下其原理

[root@xpqcsyx27128xx8gen ~]# 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

[root@xpqcsyx27128xx8gen ~]# cat /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
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

cron.xxx是定时执行的任务,有每天执行的,也有每小时执行等。这里以每天执行的文件来看,其主要的内容就是以/etc/logrotate.conf配置文件来执行logroate,所以/etc/logrotate.conf里就是日志分隔的配置,而其中又include了/etc/logroate.d,所以我们可以将日志分隔的配置放到/etc/logroate.d中。

配置

/etc/logroate.d中默认存放了一些日志的分隔配置,用于系统一些日志的分隔。当我们需要对自己启动的服务进行日志管理时,就需要创建配置文件,然后按照规则来配置日志分隔,下面以自己创建的nginx日志分隔为例,为大家介绍logroate的配置参数:

[root@xpqcsyx27128xx8gen ~]# cd /etc/logrotate.d/
[root@xpqcsyx27128xx8gen logrotate.d]# ls
aide  bootlog  chrony  nginx  syslog  wpa_supplicant  yum
[root@xpqcsyx27128xx8gen logrotate.d]# cat nginx
/app/generalmpl/openresty/nginx/logs/*.log {
daily
rotate 7
missingok
dateext
compress
notifempty
sharedscripts
postrotate
    [ -e /app/generalmpl/openresty/nginx/logs/nginx.pid ] && kill -USR1 `cat /app/generalmpl/openresty/nginx/logs/nginx.pid`
endscript
}

/app/generalmpl/openresty/nginx/logs/*.log代表日志路径,可用*来模糊匹配。

配置项 说明
daily
weekly
monthly
yearly
切割周期,多久切割一次。
daily : 切割周期为 每天
weekly : 切割周期为 每周
monthly: 切割周期为 每月
yearly: 切割周期为 每年
size 10k 当日志文件到达指定的大小时才转储。
默认单位是 bytes。bytes (缺省) 及 KB (sizek) 或 MB (sizem)。
如: size 10k、 size 10M
rotate 5 日志文件保留备份的个数。默认是 0
如:0 指没有备份;5 指保留最近的5个备份,其余的全部删除。
maxage count 保留多少天的日志文件。
如:5 指保留最近的5天的日志文件,其余的全部删除。
missingok 在日志轮循期间,错误将被忽略。
例如 “文件无法找到” 之类的错误。
copytruncate
nocopytruncate
copytruncate: 用于还在打开中的日志文件,把当前日志备份并截断。 把正在输出的日志拷 (copy) 一份出来,再清空 (trucate) 原来的日志。
nocopytruncate: 备份日志文件,但是不截断 。
nocompress
compress
nocompress: 不压缩(默认)
compress: 通过 gzip 压缩转储以后的日志。如 XXX.gz
delaycompress
nodelaycompress
delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩。
nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。
prerotate
endscript
在所有其它指令完成 执行这两个关键字之间的脚本。这两个关键字必须单独成行
postrotate
endscript
在所有其它指令完成 执行这两个关键字之间的脚本。这两个关键字必须单独成行
sharedscripts 共享脚本,整个日志组运行一次脚本 。
比如 nginx 涉及到多个日志文件,一般使用 * 号 通配符:/var/log/nginx/*.log { ... }
sharedscripts 的作用是在 所有的日志文件 都轮转完毕后 统一执行一次脚本
如果没有 sharedscripts ,那么 每个日志文件 轮转完毕后 都会执行一次脚本
errors address 转储时的错误信息发送到指定的 Email 地址。
mail address
nomail
mail address : 把转储的日志文件发送到指定的 E-mail 地址
nomail : (默认)转储时不发送日志文件
ifempty
notifempty
ifempty :if empty ,即使是空文件也转储(默认)。
notifempty :not if empty ,如果是空文件的话,不转储。
olddir directory
noolddir
olddir directory :储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统。
noolddir : 转储后的日志文件和当前日志文件放在同一个目录下。
dateext 在日志名称后面,添加日期后缀。默认是当前日期。默认是 -%Y%m%d 的后缀。
可用 dateformat 选项扩展配置。
如:nginx_access.log --> nginx_access.log-20210120
注意: 格式化日期中不要出现 分号(:) ,因为文件名称是不能含有分号的。
dateformat 对 dateext 的拓展,必须配合 dateext 使用
在V3.9.0 之前,只支持 %Y、%m、%d、 %s 参数。
在V3.9.0 及之后,支持 %H 参数。
如: dateformat -%Y-%m-%d
结果:nginx_access.log --> nginx_access.log-2021-01-20
注意: 文件名称中禁止出现分号(:) ,因为文件名称是不能含有分号的。
dateyesterday 与 dateext 配合使用,日期提前一天。
比如,当前日期是2023-03-15,提前一天就是 2021-03-14
extension dateextdateformat 配合使用,指定文件的后缀。
如:extension .log
结果:nginx_access.log --> nginx_access-2023-03-15.log

参考:
https://blog.csdn.net/xiaojin21cen/article/details/122309230
https://zhuanlan.zhihu.com/p/90507023

你可能感兴趣的:(linux,linux,logroate,服务器)