EC2实例磁盘快速占满,删除10GB系统日志后9小时再次耗尽求助
解决EC2实例中syslog快速占满磁盘的问题
先定位日志暴增的根源
- 实时监控syslog输出,快速定位疯狂打日志的服务:
tail -f /var/log/syslog - 统计日志中重复次数最多的条目,精准锁定异常源:
awk '{print $0}' /var/log/syslog | sort | uniq -c | sort -nr | head -20 - 过滤错误/警告日志,缩小排查范围:
grep -E "(error|warning|critical)" /var/log/syslog
临时缓解磁盘占用
- 不要直接删除日志文件:进程可能仍持有文件句柄,删除后磁盘空间不会立刻释放。正确的清空方式:
echo "" > /var/log/syslog # 或用truncate更安全 truncate -s 0 /var/log/syslog - 手动触发日志轮转,将当前日志归档压缩:
# 针对rsyslog配置触发 logrotate -f /etc/logrotate.d/rsyslog # 或全局触发轮转 logrotate -f /etc/logrotate.conf
永久解决日志暴增问题
调低服务日志级别
找到异常服务的配置文件,将日志输出级别从debug(最详细)调整为info或warn,减少冗余日志。比如:- Nginx:修改
nginx.conf里的error_log参数,从debug改为warn - 自定义应用:调整代码中的日志逻辑,关闭非必要的调试日志
- Nginx:修改
优化日志轮转策略
修改syslog的轮转配置(以rsyslog为例,路径为/etc/logrotate.d/rsyslog),设置更严格的规则:/var/log/syslog { rotate 3 # 仅保留最近3天的日志 daily # 每天轮转一次 missingok # 日志文件不存在时跳过 notifempty # 空文件不轮转 compress # 压缩旧日志 delaycompress # 延迟压缩,避免影响当前日志写入 sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }启用日志速率限制
在rsyslog主配置文件/etc/rsyslog.conf中添加速率限制规则,防止短时间内日志暴增:$SystemLogRateLimitInterval 10 # 统计时间窗口(10秒) $SystemLogRateLimitBurst 100 # 窗口内允许的最大日志条数超出限制的日志会被自动丢弃,避免磁盘被快速占满。
排查循环日志问题
用lsof | grep syslog查看哪些进程在写入syslog,检查是否存在服务日志递归写入的情况(比如某个服务把日志输出到被自身监控的路径),导致日志无限增长。
内容的提问来源于stack exchange,提问作者Monad Wizard
相关产品推荐
相关产品推荐

