如何配置Linux日志轮转策略以轻松管理海量日志?
- 内容介绍
- 文章标签
- 相关推荐
本文将深入解析Linux日志轮转机制,手把手教你配置logrotate工具,让系统日志管理变得轻松高效。.Linux系统日志轮转完全指南:从原理到实战配置.,整起来。
摸个底
systemd 的 timer 更易于查看状态和历史记录;只需施行 `systemctl enable --now logrotate.timer` 即可生效。
指令含义使用场景示例
- daily / weekly / monthly:指定轮转周期。业务高峰期建议 weekly,低流量服务可 daily。
- rotate N:保留最近 N 次生成的旧文件。比方说rotate 7 → 保存最近一周的日志。
- compress / delaycompress:压缩旧日志 / 延迟一次轮转后再压缩。audit 日志常用 delaycompress,以免影响实时分析。
- missingok / notifempty:A)缺失时不报错 B)空文件不轮转。
- Create mode owner group:新建文件权限。
- copytruncate:复制截断避免服务重启。
- dateext/dateformat:在旧文件名中加入日期。
- olddir & olddirmode:将旧文件搬到指定目录并设权限。
- -size K/M/G 或 maxsize/minsize:A)当文件大小超过阈值即触发轮转 B)限定最大/最小大小。
一步到位:从安装到实战的完整流程, 上手
Type=oneshot ExecStart=/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status,PPT你。
Nginx 示例配置
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
sharedscripts
postrotate
&& kill -USR1 `cat /run/nginx.pid`
endscript
}
Mysql 示例配置
/etc/logrotate.d/mysql-server
/var/log/mysql/*.log {
weekly # 数据库日志一般不需要每日切割
rotate 8 # 保留两个月左右
compress
missingok
notifempty
create 640 mysql adm
sharedscripts
postrotate
test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin flush-logs
endscript
}
Myapp 日志轮转实战
假设需管理/var/log/myapp.log日志文件,每天轮转一次,保留7天日志:,就这样吧...
/etc/logrotate.d/myapp
/var/log/myapp.log {
daily # 每天轮转一次
rotate 7 # 保留7份旧文件
compress # 压缩旧日志为 .gz
missingok # 文件不存在也不报错
notifempty # 空文件直接跳过
create 0644 www-data www-data # 新建空白日志并设权限
}
小明负责一家电商平台,每天产生约20GB 的访问日志。如果直接按天切割,一周后磁盘就要吃掉140GB。通过以下组合,他成功把每日增长控制在5GB 以下: 也是没谁了... 实施后 小明团队监控到磁盘使用率稳稳维持在70%以下再也不用担心因突发流量导致硬盘爆炸式增长! 🎉🎉🎉,什么鬼?
➡️ 最佳实践与避坑指南 💥 copytruncate 与 create 一边使用可能导致空洞。建议二选其一, 搞一下... 📍 如果你喜欢通过日期快速定位历史记录, 可开启 dateext 并自定义 format。 ⚠️ 定时任务冲突 避免一边有 cron 和 systemd 两套 timer 在跑同一个配置,否则可能出现重复轮换导致误删。 🚧 软链接路径误判 Logrot ate 默认解析真实路径。如果想针对链接本身进行操作,需要加上 followlinks 。 ✅ 日志轮转是Linux系统管理中不可或缺的重要功能,它能有效管理系统日志文件大小,防止日志文件无限增长占用磁盘空间.Linux系统日志轮转配置完全指南.本文将详细介绍Linux系统日志轮转的工作原理、 配置 💻 安装 Logrotate sudo apt-get update && sudo 纯属忽悠。 apt-get install -y logrotate 抄近道。 sudo yum install -y logrotate # 或 dnf install -y logrotate ✨ 编写全局策略 /etc/logrotate.conf compress delaycompress create 0640 root adm olddir /var/log/old olddirmode 0750,多损啊! 换言之... /etc/logrotate.d/datefmt-demo /var/log/demo/*.log { daily rotate 30 compress dateext # 在旧文件名后追加 .YYYYMMDD.gz dateformat -%Y-%m-%d # 自定义日期格式 } /etc/logrotate.d/nginx-highload /var/l og/nginx/access.log { size 500M rotate 30 compress delaycompress missingok notifempty create 0640 nginx adm sharedscripts postr otate systemctl reload nginx.service endscript} 很棒。 /etc/logrotate.d/syslog-ng-copytruncate /var/log/syslog-ng/*.log { weekly rotate 4 compress copytruncate # 核心所在 } /etc/logrota ted/myapp /var/l og/myapp/app.l og { daily # 每 天轮 转 一次 rotate 10 # 保 留10份旧 文件 compress # old 日志 为 .gz missingok # 文 件 不 存 也 不 报 not ifempty # 空 文 件 跳 过 creat e0644www-data www-data 新建 空 日志 并设权限 sharedscripts postrotat e 向进程发送 USR1 号,让它重新打开 日志 kill-USR1$2>/dev/null||trueendscr ipt } /bigapp/*.l og{ size500M rotate5 compres s missingok not ifempty creat e0644biguser biggroup } /sudo logrot ate-d/etc/ logrot ate. conf 干跑模式,不真的改动任何东西 sudo logrot ate-f/etc/ logrot ate. conf 制施行,即使没有达到触发条件 如果需要为特定的应用程序设置日志轮转策略,可以在/etc/ l og 从头再来。 rot ate. d/目录下创建一个新的配置文件,比方说myapp。 我裂开了。 拜托大家... 我的看法是... 没耳听。 翻车了。 造起来,到位。。
当某个应用发生变化时,你只需要修改其对应的配置文件,而不会影响到其他服务的 日志轮 转。 解决方案:对于 Linux 系统日 志的有效管 理, 这套规则兼顾了“平安”和“效率”:即使程序意外崩溃,也不会主要原因是找不到老日 志 而导致脚本报错。 C位出道。 真香! 差不多得了... YYDS! 卷不动了,ICU你。。
copytruncat e会先复制当前内容到新 文件 , 你我共勉。 再截断原始 文件 ,从而实现无缝切换。
他急了。 WantedBy=timers.target
记住... 如果没有安装,可以使用包管理器进行安装: 如果需要更复杂的 日志轮 转策略,可以在 配置文件中使 用更多的选项。你可以通过编辑/etc/l ogro tate.conf 文 件 或创建新的配 置文 件 在/etc/l ogro tate.d/目录下来 管 理日 志轮 转。
记得检查系统cron 日志 ,确保定时任务真的在运行。 盘它。大多数发行版默认已装好,只要确认版本足够 我持保留意见... 新即可: Cron:/etc/cron.daily/l ogrot ate 大多数 发行版已经预置此链接
KTV你。有些守护进程不支持通过信号重新打开 日志 , 试试水。 这种情况直接删除原始 文件会导致写入错误。
本文将指导您如何 在 Linux 系统 中利 总结一下。 用log rotat e 实现日 志轮 转。
只要掌握了几个核心指令,你就能把“海量 日志 ”变成“井井有条”。我心态崩了。下面我们一步步拆解。 礼貌吗? 编辑完 配置 后用以下命令模拟一次施行 ,观察详细输出: 反思一下。若发现某个路径拼写错误或权限不足,可在对应块里加入debug标记进行排查。
假设你有一个名为/v ar/ l og/myapp.l og 的日志文件,你希望每天轮转一次,并保留7天的 日志文 件,离了大谱。。
假设你的程序产生的 日志位于/v ar/l og/myapp/app.l og希望每天切一次并保留最近10天一边在切割后马上发送信号让程序重新打开 日志。我们可以这么写: 弄一下... 创建单独的service单 元 /usr/lib/systemd/system/l ogrot ate. service Description=Rotate system logs
/usr/lib/systemd/system/l ogrot ate.tim 歇了吧... er Description=Run l ogrotation daily
差不多得了... OnCalendar=-*03:0000Persistent=trueWantedBy=timers.target
放心去做... 通过以上步骤,您可以有效配置 日志轮 转,节省磁盘空间并优化系统 日志 管理。
本文将深入解析Linux日志轮转机制,手把手教你配置logrotate工具,让系统日志管理变得轻松高效。.Linux系统日志轮转完全指南:从原理到实战配置.,整起来。
摸个底
systemd 的 timer 更易于查看状态和历史记录;只需施行 `systemctl enable --now logrotate.timer` 即可生效。
指令含义使用场景示例
- daily / weekly / monthly:指定轮转周期。业务高峰期建议 weekly,低流量服务可 daily。
- rotate N:保留最近 N 次生成的旧文件。比方说rotate 7 → 保存最近一周的日志。
- compress / delaycompress:压缩旧日志 / 延迟一次轮转后再压缩。audit 日志常用 delaycompress,以免影响实时分析。
- missingok / notifempty:A)缺失时不报错 B)空文件不轮转。
- Create mode owner group:新建文件权限。
- copytruncate:复制截断避免服务重启。
- dateext/dateformat:在旧文件名中加入日期。
- olddir & olddirmode:将旧文件搬到指定目录并设权限。
- -size K/M/G 或 maxsize/minsize:A)当文件大小超过阈值即触发轮转 B)限定最大/最小大小。
一步到位:从安装到实战的完整流程, 上手
Type=oneshot ExecStart=/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status,PPT你。
Nginx 示例配置
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
sharedscripts
postrotate
&& kill -USR1 `cat /run/nginx.pid`
endscript
}
Mysql 示例配置
/etc/logrotate.d/mysql-server
/var/log/mysql/*.log {
weekly # 数据库日志一般不需要每日切割
rotate 8 # 保留两个月左右
compress
missingok
notifempty
create 640 mysql adm
sharedscripts
postrotate
test -x /usr/bin/mysqladmin && \
/usr/bin/mysqladmin flush-logs
endscript
}
Myapp 日志轮转实战
假设需管理/var/log/myapp.log日志文件,每天轮转一次,保留7天日志:,就这样吧...
/etc/logrotate.d/myapp
/var/log/myapp.log {
daily # 每天轮转一次
rotate 7 # 保留7份旧文件
compress # 压缩旧日志为 .gz
missingok # 文件不存在也不报错
notifempty # 空文件直接跳过
create 0644 www-data www-data # 新建空白日志并设权限
}
小明负责一家电商平台,每天产生约20GB 的访问日志。如果直接按天切割,一周后磁盘就要吃掉140GB。通过以下组合,他成功把每日增长控制在5GB 以下: 也是没谁了... 实施后 小明团队监控到磁盘使用率稳稳维持在70%以下再也不用担心因突发流量导致硬盘爆炸式增长! 🎉🎉🎉,什么鬼?
➡️ 最佳实践与避坑指南 💥 copytruncate 与 create 一边使用可能导致空洞。建议二选其一, 搞一下... 📍 如果你喜欢通过日期快速定位历史记录, 可开启 dateext 并自定义 format。 ⚠️ 定时任务冲突 避免一边有 cron 和 systemd 两套 timer 在跑同一个配置,否则可能出现重复轮换导致误删。 🚧 软链接路径误判 Logrot ate 默认解析真实路径。如果想针对链接本身进行操作,需要加上 followlinks 。 ✅ 日志轮转是Linux系统管理中不可或缺的重要功能,它能有效管理系统日志文件大小,防止日志文件无限增长占用磁盘空间.Linux系统日志轮转配置完全指南.本文将详细介绍Linux系统日志轮转的工作原理、 配置 💻 安装 Logrotate sudo apt-get update && sudo 纯属忽悠。 apt-get install -y logrotate 抄近道。 sudo yum install -y logrotate # 或 dnf install -y logrotate ✨ 编写全局策略 /etc/logrotate.conf compress delaycompress create 0640 root adm olddir /var/log/old olddirmode 0750,多损啊! 换言之... /etc/logrotate.d/datefmt-demo /var/log/demo/*.log { daily rotate 30 compress dateext # 在旧文件名后追加 .YYYYMMDD.gz dateformat -%Y-%m-%d # 自定义日期格式 } /etc/logrotate.d/nginx-highload /var/l og/nginx/access.log { size 500M rotate 30 compress delaycompress missingok notifempty create 0640 nginx adm sharedscripts postr otate systemctl reload nginx.service endscript} 很棒。 /etc/logrotate.d/syslog-ng-copytruncate /var/log/syslog-ng/*.log { weekly rotate 4 compress copytruncate # 核心所在 } /etc/logrota ted/myapp /var/l og/myapp/app.l og { daily # 每 天轮 转 一次 rotate 10 # 保 留10份旧 文件 compress # old 日志 为 .gz missingok # 文 件 不 存 也 不 报 not ifempty # 空 文 件 跳 过 creat e0644www-data www-data 新建 空 日志 并设权限 sharedscripts postrotat e 向进程发送 USR1 号,让它重新打开 日志 kill-USR1$2>/dev/null||trueendscr ipt } /bigapp/*.l og{ size500M rotate5 compres s missingok not ifempty creat e0644biguser biggroup } /sudo logrot ate-d/etc/ logrot ate. conf 干跑模式,不真的改动任何东西 sudo logrot ate-f/etc/ logrot ate. conf 制施行,即使没有达到触发条件 如果需要为特定的应用程序设置日志轮转策略,可以在/etc/ l og 从头再来。 rot ate. d/目录下创建一个新的配置文件,比方说myapp。 我裂开了。 拜托大家... 我的看法是... 没耳听。 翻车了。 造起来,到位。。
当某个应用发生变化时,你只需要修改其对应的配置文件,而不会影响到其他服务的 日志轮 转。 解决方案:对于 Linux 系统日 志的有效管 理, 这套规则兼顾了“平安”和“效率”:即使程序意外崩溃,也不会主要原因是找不到老日 志 而导致脚本报错。 C位出道。 真香! 差不多得了... YYDS! 卷不动了,ICU你。。
copytruncat e会先复制当前内容到新 文件 , 你我共勉。 再截断原始 文件 ,从而实现无缝切换。
他急了。 WantedBy=timers.target
记住... 如果没有安装,可以使用包管理器进行安装: 如果需要更复杂的 日志轮 转策略,可以在 配置文件中使 用更多的选项。你可以通过编辑/etc/l ogro tate.conf 文 件 或创建新的配 置文 件 在/etc/l ogro tate.d/目录下来 管 理日 志轮 转。
记得检查系统cron 日志 ,确保定时任务真的在运行。 盘它。大多数发行版默认已装好,只要确认版本足够 我持保留意见... 新即可: Cron:/etc/cron.daily/l ogrot ate 大多数 发行版已经预置此链接
KTV你。有些守护进程不支持通过信号重新打开 日志 , 试试水。 这种情况直接删除原始 文件会导致写入错误。
本文将指导您如何 在 Linux 系统 中利 总结一下。 用log rotat e 实现日 志轮 转。
只要掌握了几个核心指令,你就能把“海量 日志 ”变成“井井有条”。我心态崩了。下面我们一步步拆解。 礼貌吗? 编辑完 配置 后用以下命令模拟一次施行 ,观察详细输出: 反思一下。若发现某个路径拼写错误或权限不足,可在对应块里加入debug标记进行排查。
假设你有一个名为/v ar/ l og/myapp.l og 的日志文件,你希望每天轮转一次,并保留7天的 日志文 件,离了大谱。。
假设你的程序产生的 日志位于/v ar/l og/myapp/app.l og希望每天切一次并保留最近10天一边在切割后马上发送信号让程序重新打开 日志。我们可以这么写: 弄一下... 创建单独的service单 元 /usr/lib/systemd/system/l ogrot ate. service Description=Rotate system logs
/usr/lib/systemd/system/l ogrot ate.tim 歇了吧... er Description=Run l ogrotation daily
差不多得了... OnCalendar=-*03:0000Persistent=trueWantedBy=timers.target
放心去做... 通过以上步骤,您可以有效配置 日志轮 转,节省磁盘空间并优化系统 日志 管理。

