Nginx磁盘监控需结合df、logrotate与通知脚本实现闭环:定时检查日志分区使用率(如/var/log/nginx),超阈值(如90%)时触发logrotate轮转或find清理旧日志,并通过邮件/Webhook发送告警,需设置静默期防刷屏。

在 Nginx 环境中,Nginx 本身不提供磁盘空间监控和自动清理功能,需结合系统级工具与脚本实现。核心思路是:定时检测磁盘使用率 → 触发阈值告警 → 执行日志轮转或清理 → 发送通知。下面分三部分说明关键实现方式。
监控磁盘空间并设置告警阈值
使用 df 命令获取挂载点使用率,配合 shell 脚本判断是否超限(如超过 90%):
- 示例检查命令:
df -h /var/log | awk 'NR==2 {print $5}' | sed 's/%//' - 建议将检查逻辑写入定时任务(crontab),每 5–10 分钟执行一次
- 避免只监控
/根分区,应重点监控 Nginx 日志所在路径(如/var/log/nginx或独立挂载的/data/logs)
自动清理过期 Nginx 日志文件
清理不是简单 rm,而是安全轮转 + 定期删除旧文件:
- 用 logrotate 配置 Nginx 日志自动切分(推荐方式),在
/etc/logrotate.d/nginx中设置:/var/log/nginx/*.log {<br> daily<br> missingok<br> rotate 30<br> compress<br> delaycompress<br> notifempty<br> create 0644 www-data www-data<br> sharedscripts<br> postrotate<br> if [ -f /var/run/nginx.pid ]; then<br> kill -USR1 `cat /var/run/nginx.pid`<br> fi<br> endscript<br>} - 若需手动清理,可用
find /var/log/nginx -name "*.log" -mtime +7 -delete删除 7 天前日志(先测试再启用) - 清理前建议保留最小可用空间(如 2GB),防止误删导致服务异常
触发告警通知(邮件 / Webhook / 短信)
当磁盘超限时,通过轻量方式发送通知:
- 发邮件:用 mailutils 或 ssmtp,脚本中调用
echo "磁盘超限!" | mail -s "Nginx 日志磁盘告警" admin@example.com - 推送到企业微信/钉钉:用
curl调用 Webhook(需提前配置群机器人),示例:curl 'https://qyapi.weixin.qq.com/...' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": {"content": "Nginx 日志盘使用率已达 92%"}}' - 避免高频告警:加入“静默期”逻辑(如上次告警后 1 小时内不再重复发送)
整个流程无需侵入 Nginx 配置,靠外部脚本+系统工具协同完成。关键是把监控、清理、通知三步串成闭环,并在测试环境验证清理逻辑是否影响 Nginx 日志写入。











