日志治理需兼顾空间释放、服务稳定与问题可追溯,核心是先诊断再分层处理:用df/du/find定位大户;优先配置logrotate自动轮转;专项治理journald日志;应急时清空而非删除,并记录操作。

日志过大不是“删完就完事”的问题,而是要兼顾空间释放、服务稳定、问题可追溯三方面。核心思路是:先看清现状,再分层治理——该轮转的轮转,该清理的清理,该收紧的收紧。
一、快速定位哪些日志在吃磁盘
别猜,用命令直接看:
-
整体磁盘使用:运行
df -h,重点关注/var或/var/log所在分区是否超过 85% -
日志目录明细:执行
du -sh /var/log/* | sort -hr | head -10,列出占用最大的前 10 个子项 -
单个超大文件筛查:比如找大于 100MB 的日志:
find /var/log -type f -name "*.log" -size +100M -ls
常见大户包括:/var/log/journal/(systemd 日志)、/var/log/messages、Nginx 的 access.log 和 error.log、以及应用自建日志目录。
二、优先启用 logrotate 实现自动轮转
这是最标准、最安全的日志生命周期管理方式,不依赖脚本,也不需要重启服务(配置得当即可)。
- 确认已安装:
logrotate --version(主流发行版默认自带) - 主配置在
/etc/logrotate.conf,服务/应用专属配置通常放在/etc/logrotate.d/下 - 一个实用示例(保存为
/etc/logrotate.d/myapp):
daily
rotate 14
compress
missingok
notifempty
create 644 myapp myapp
sharedscripts
postrotate
systemctl try-restart myapp.service >/dev/null 2>&1 || true
endscript
}
说明:每天轮转,保留 14 天压缩归档,空文件不处理,轮转后尝试平滑重启服务。
三、systemd-journald 日志专项治理
如果 /var/log/journal/ 占用巨大(常达数 GB),不能靠普通 logrotate 管理,需用 journalctl 控制:
-
按时间清理:只保留最近 7 天日志 →
sudo journalctl --vacuum-time=7d -
按大小清理:限制总占用不超过 500MB →
sudo journalctl --vacuum-size=500M -
永久限制(推荐):编辑
/etc/systemd/journald.conf,取消注释并修改:
SystemMaxFileSize=100M
MaxRetentionSec=1month
改完执行 sudo systemctl restart systemd-journald 生效。
四、临时清空或安全删除的实操建议
应急释放空间时慎用删除,优先考虑清空或精准清理:
-
清空单个活跃日志(不停服务):
sudo truncate -s 0 /var/log/nginx/access.log或sudo > /var/log/syslog -
删除过期日志(带确认更稳):先试运行
find /var/log -name "*.log" -mtime +90 -print,确认无误后再加-delete -
避免误删关键文件:不要对
journal/目录直接rm -rf;不要清空/var/log/wtmp或btmp(影响登录审计)
不复杂但容易忽略:所有清理动作,建议搭配 cron 定期执行,并记录操作日志到独立文件,便于回溯。










