小服务器磁盘又满了?多半是日志,给它装个自动轮转
小服务器跑上几个月,磁盘告警常常不是因为你存了太多东西,而是日志在悄悄膨胀:一个应用出了故障疯狂写日志,一夜之间几个 G 就没了;系统日志只进不出,年年有余。处理办法不是每次满了再手忙脚乱地删,而是给日志装上「自动轮转」——到大小或到时间就自动压缩、归档、清理旧的。
先确认是不是日志在吃磁盘
du -h --max-depth=1 /var/log | sort -hr | head
如果最大的几个就是 journal、syslog 或者某个应用的日志文件,方向就找对了。再看单个文件:
ls -lh /var/log/
某个文件几百 MB 甚至几 GB 且更新时间很近,基本就是它。
系统日志:journald 先给个上限
systemd 的日志默认可能不限制体积。给它一个明确的天花板:
# 编辑 /etc/systemd/journal.conf,改这两行
SystemMaxUse=500M
MaxRetentionSec=30day
改完重启服务生效:
systemctl restart systemd-journald
想立刻瘦身,先手动回收一次:
journalctl --vacuum-size=200M
journalctl --vacuum-time=30days
应用日志:用 logrotate 管起来
大多数系统的 logrotate 已经在管系统日志了;自己的应用日志可以在 /etc/logrotate.d/ 下加一个文件,例如:
/var/log/myapp/*.log {
daily
rotate 7
size 100M
compress
missingok
notifempty
copytruncate
}
含义:每天轮转一次、只留 7 份、超过 100M 提前轮转、旧日志压缩。copytruncate 适合那些不会自己重开日志文件的应用(复制走再清空原文件,不用重启服务)。改完别急着等明晚,先试运行验证配置:
logrotate -d /etc/logrotate.d/myapp
-d 是调试模式,只打印会做什么、不会真的执行,确认动作无误再放心。
Nginx / Apache 这类常见服务
发行版自带的包通常已经配好了 logrotate,不用重写;要确认的是有没有生效:看看 /var/log/nginx/ 下有没有 .gz 结尾的归档,有,就是在正常轮转。自己编译安装的则需要手动补上同样的配置。
两个提醒
第一,删日志前先想清楚要不要留证据:正在排查故障时,别把当天的日志一起轮转走,先拷贝一份再清理。第二,轮转治的是「正常增长」,治不了「疯狂刷屏」:如果某个日志一小时涨 1G,先去修那个报错本身,轮转只是给你争取时间。
日志管理属于一次配置、长期省心的事情。花十分钟把上限和轮转配好,磁盘半夜爆满的告警能少一大半。
- 点赞
- 收藏
- 关注作者
评论(0)