Linux 日志自动分割神器 —— logrotate
创始人
2025-05-28 10:13:03
0

前言

我们在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 {monthlycreate 0664 root utmpminsize 1Mrotate 1
}/var/log/btmp {missingokmonthlycreate 0600 root utmprotate 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
extensiondateextdateformat 配合使用,指定文件的后缀。
如: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

相关内容

热门资讯

刚刚,大跳水!超42万人爆仓!... 来源:券商中国 加密货币,遭遇抛售潮! 凯文·沃什被提名为下一任美联储主席所产生的后续效应,正持续波...
做好银行网点“加减法” 国家金融监督管理总局网站披露的信息显示,2025年共有约1.1万家银行业金融机构的线下网点获准退出,...
金价暴跌引热议,网友:商场门口... 来源:中国基金报 随着国际金价急速下跌,国内首饰金价也迎来大幅回调。 1月31日,老庙报1546元/...
内蒙古一银行员工将储户220万... 内蒙古一银行员工将储户220万元存款转走并挥霍,银行称员工已离岗不愿承担赔偿 1月31日,有媒体报...
老年医学科进修轶事|老年医学如... 和年苑,北京协和医院老年医学科公众号,传递老年医学的价值和声音 在这里,了解当代老年医学 Autum...
和讯投顾余兴栋:周五杀跌,下周... 周五大盘大幅度的杀跌又探底回升,收出一根长长的下影线,不少的朋友又在问我,那这根k线是不是就意味着调...
【数智周报】马化腾评豆包手机;... 【数智周报将整合本周最重要的企业级服务、云计算、大数据领域的前沿趋势、重磅政策及行研报告。】 观点马...
和美字节,用字节连接和美 和美字节(Hemei Byte),是杭州桑桥网络科技有限公司于 2026 年 1 月完成品牌升级后启...
仙乐健康56岁副总姚壮民业务员... 瑞财经 刘治颖 1月29日,仙乐健康科技股份有限公司(以下简称:仙乐健康)向港交所主板递交上市申请书...
詹姆斯下家概率:骑士最高退役第... 近日,有关詹姆斯的未来引发了大众的热议,相关机构也更新了这位巨星的下家概率,回归骑士是最大可能。 相...
原创 猛... 在国际金价屡创历史新高之时,资本市场正经历一场有趣的分化:有人急于套现离场,有人却大举加码。近日,一...
原创 男... 在爱情的海洋中,星座与情感交织出无数动人的故事。当一个男性用以下这四个称呼来称呼你时,他的爱情之舟正...
民航持续回暖:南航、海航预计去... 时隔五年,南航预计在三大航中率先实现年度扭亏。 截至1月30日晚间,中国国航(601111.SH)、...
公募加仓非银金融,后市机会如何... 基金增配保险、券商股。 最新数据显示,公募基金2025年四季度的非银金融仓位提高1个百分点。继有色金...
赵慧芳主任中医治疗产后“月子病... 赵慧芳主任中医治疗产后“月子病”的临床智慧 产后调理是中华民族传承千年的养生智慧,在中医理论中占据重...
江西万年青水泥股份有限公司20... 本公司及董事会全体成员保证信息披露的内容真实、准确、完整,没有虚假记载、误导性陈述或重大遗漏。 一、...
科学应对甲状腺结节,别让“结节... 随着健康意识的提升 超声检查在体检中普及率不断提高 甲状腺结节的检出率也显著上升 不少人拿着“结节”...
春节前,政府债发行提速 来源:郁言债市 01 1月资金面,两轮波动,中枢平稳 回顾开年以来资金利率走势,月内资金经历两轮波动...
【央行多措并举护航,专家预期节... 【央行多措并举护航,专家预期节前流动性保持充裕】1月29日,中国人民银行以固定利率、数量招标方式开展...
季节性因素叠加市场需求不足,1... 来源:界面新闻 记者 辛圆 国家统计局周六公布数据显示,1月份,中国制造业采购经理人指数(PM...