日志一天涨 20G:从定位来源到轮转配置的完整处理

Linux · 3 分钟阅读· 244 次阅读

磁盘告警最常见的原因就是日志。它涨得快、删得容易,所以很多人直接清空——然后第二天又满了。

日志暴涨通常有三种根因:调试级别忘关、错误循环刷屏、访问量突增。三者的处理方式完全不同。

先说结论

先定位写入源,再限流,最后做轮转。 清空只能买到几小时。

  • du 定位目录 → lsof 找写入进程
  • tail -f 看内容判断是调试输出还是错误刷屏
  • 应用层调日志级别或加采样
  • logrotate 配 size + rotate + compress
  • journald 设 SystemMaxUse

先把问题说清楚

错误循环最常见:一个连接失败重试的日志,每秒写几百条,一小时就是几个 G。

访问日志暴涨则要看是不是被扫或被打,日志里会出现大量同 IP 的 404/400。

具体怎么做

按顺序执行,每步都验证完再进下一步:

  • du -sh /var/log/* | sort -h 找大户,再进子目录下钻
  • lsof /var/log/xxx.log 找出写入进程
  • tail -n 200 看内容:调试信息 / 重试错误 / 异常请求
  • 应用侧调级别(info→warn)或对重复错误做限流
  • 配 logrotate:daily、size 100M、rotate 7、compress、copytruncate 或 postrotate 重开句柄

参数与成本对照

把关键数值摊开,方便判断该选哪条路:

来源 典型特征 处理方式
应用调试日志 同一请求多行 debug 调级别,别只删
错误重试 每秒固定频率重复 修根因 + 限流
访问日志 大量 404/400 同 IP 上 WAF/限速
journald system.journal 巨大 SystemMaxUse=500M

日志一天涨 20G

几个容易踩的坑

下面这些是最常见的错误做法:

  • rm 掉正在写的日志:句柄不释放,空间不回收
  • logrotate 不配 postrotate:进程还写旧句柄
  • 把 rotate 设成 0:等于每次都删,出问题没日志可查
  • 只清不治:几小时后原样复现

最后补两句

日志策略的目标不是「让小」,而是「出问题时查得到,平时不占盘」。这两条同时满足才算配好。

工具是手段,理解机制才是能力。命令记不住没关系,知道「该看什么」就够了。

评论 (3)

阿
阿哲

照着做了一遍,确实少走弯路。第二步最容易漏,建议顺手加个检查清单。

南
南风

比「一键脚本」有用多了,知道为什么比知道怎么做重要。

K
Kevin

补充一句:不同版本行为会变,动手前先确认自己的版本号。

发表评论

验证码

提交后需站长审核,通过后才会显示。