记录一下那天晚上的排查过程。服务器 40G 的系统盘被 nginx 日志占满,PHP 无法写临时文件,蜘蛛抓到的页面全是 500。磁盘监控阈值设的是 95%,报警发到了没人看的邮箱,第二天才发现。

刚开始盯着「500 页面返回很快 响应时间监控看不出来」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。日志没有轮转 单个文件涨到 20G。也可能是磁盘告警只发邮件 没有值班通道。

不容易想到的是,应用日志和访问日志写在同一块盘。

第一件事是看磁盘和目录占用

df -h / && du -sh /var/log/nginx/* | sort -h | tail -5

再往下配置按天轮转并压缩

/var/log/nginx/*.log { daily rotate 14 compress delaycompress missingok notifempty }

接着把日志目录迁到数据盘

ln -s /data/logs/nginx /var/log/nginx

给磁盘占用加阈值告警

df -h | awk '$5+0>85 {print "disk "$5}' | mail -s 'disk alert' ops@example.com

改完先别撤,确认这几项。磁盘占用降到 60% 以下,5xx 归零,告警能同时到达邮件和值班群。

补一句。磁盘和 5xx 要一起看,磁盘满最先表现成 500,只盯一个指标会绕远路。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189