2核1G云服务器实战:logrotate日志轮转与磁盘空间告警
写在前面
2 核 1G 的云服务器跑一个小博客和几个轻量服务,CPU、内存通常够用,真正容易在半夜翻车的,是磁盘被日志悄悄写满:Nginx 的 access.log 一天几百兆,应用日志从不清理,journald 越攒越大。磁盘一满,服务写不进日志、数据库无法提交,严重时连 SSH 都登不上。本文给出一套“轮转 + 告警”的组合方案,十分钟配好,长期不用操心。
1. 先看清磁盘被谁占了
df -h
du -sh /var/log/* | sort -rh | head -10
journalctl --disk-usage
du 经常会发现:/var/log/nginx 和 /var/log/journal 是两个大头。确认凶手之后,再对症下药。
2. 用 logrotate 给日志“瘦身”
大多数发行版自带 logrotate,Nginx 的配置在 /etc/logrotate.d/nginx,按天轮转、保留 14 天、压缩旧日志:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
对小磁盘来说,按大小轮转比按天更保险。给自己的应用日志单独建一个配置,超过 50M 就轮转:
/var/log/myapp/*.log {
size 50M
rotate 7
compress
missingok
notifempty
copytruncate
}
copytruncate 是先复制再清空原文件,适合那些不支持信号重载、一直握着文件句柄的应用;缺点是轮转瞬间可能丢少量日志,能接受再用。
配置写好先演练、再强制跑一次验证:
sudo logrotate -d /etc/logrotate.d/nginx # 演练模式,只打印不执行
sudo logrotate -f /etc/logrotate.d/nginx # 强制执行一次
ls -lh /var/log/nginx/
看到 .gz 结尾的旧日志,就说明轮转生效了。
3. 磁盘用量超过 80% 就告警
光轮转还不够,万一哪天日志暴涨,还是要在磁盘满之前收到提醒。写一个检查脚本 /usr/local/bin/disk-check.sh:
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
echo "磁盘告警:根分区使用率已达 ${USAGE}%,请及时清理" \
| mail -s "磁盘告警 $(hostname)" admin@example.com
logger "磁盘告警:根分区使用率 ${USAGE}%"
fi
再用 systemd timer 每天定时跑一次(也可以用 cron):
# /etc/systemd/system/disk-check.timer
[Unit]
Description=每天检查一次磁盘用量
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl enable --now disk-check.timer
sudo systemctl list-timers | grep disk-check
没有邮件服务时,可以把告警改成写系统日志,再推送到钉钉或企业微信机器人 webhook,效果一样。
4. 顺手限制 journald 的体积
systemd 的日志也常被忽略,用两行配置封顶:
# /etc/systemd/journald.conf
SystemMaxUse=200M
MaxFileSec=14day
sudo systemctl restart systemd-journald
sudo journalctl --vacuum-size=200M
5. 日常巡检清单
- 每周看一次
df -h,根分区超过 70% 就要留心; - 保留 14 天日志足够排查问题,不必囤几个月;
- 轮转后确认服务还在写新日志(
tail -f看一眼); - 备份文件别堆在系统盘,超过 1G 就该挪到对象存储。
小结
小规格服务器的磁盘管理就三招:logrotate 自动轮转、用量阈值告警、journald 封顶。配好之后,磁盘从“定时炸弹”变成“可预测的资源”,半夜再也不会因为“磁盘满了”被叫醒。
- 点赞
- 收藏
- 关注作者
评论(0)