小服务器磁盘又满了?多半是日志,给它装个自动轮转

举报
yd_230305343 发表于 2026/11/09 11:07:40 2026/11/09
【摘要】 小服务器跑上几个月,磁盘告警常常不是因为你存了太多东西,而是日志在悄悄膨胀:一个应用出了故障疯狂写日志,一夜之间几个 G 就没了;系统日志只进不出,年年有余。处理办法不是每次满了再手忙脚乱地删,而是给日志装上「自动轮转」——到大小或到时间就自动压缩、归档、清理旧的。先确认是不是日志在吃磁盘du -h --max-depth=1 /var/log | sort -hr | head如果最大的几...

小服务器跑上几个月,磁盘告警常常不是因为你存了太多东西,而是日志在悄悄膨胀:一个应用出了故障疯狂写日志,一夜之间几个 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,先去修那个报错本身,轮转只是给你争取时间。

日志管理属于一次配置、长期省心的事情。花十分钟把上限和轮转配好,磁盘半夜爆满的告警能少一大半。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。