温馨提示×

CentOS日志存储空间不足怎么办

小樊
37
2025-12-27 09:51:26
栏目: 云计算

CentOS日志存储空间不足的排查与处置

一、快速定位占用来源

  • 查看整体磁盘使用:执行df -h,确认哪个分区(常见为**//var**)已满。
  • 定位大日志目录与文件:执行du -sh /var/log/* | sort -hr | head,找出占用最大的日志目录与文件。
  • 检查 systemd 日志体积:执行journalctl --disk-usage,确认 journal 是否占用异常。
    以上命令能迅速判断是传统文本日志(/var/log/*.log)还是 journal 日志导致空间紧张。

二、立即释放空间的应急操作

  • 清理 systemd journal(优先):
    • 先做一次日志轮转:sudo journalctl --rotate
    • 按大小保留:sudo journalctl --vacuum-size=500M
    • 按时间保留:sudo journalctl --vacuum-time=7d
  • 安全清空正在写入的日志文件(不删文件,避免破坏正在写入的进程):
    • 示例:sudo truncate -s 0 /var/log/messagesecho -n > /var/log/messages
  • 清理旧文本日志(谨慎带条件删除):
    • 示例:find /var/log -type f -name “*.log” -mtime +30 -exec rm -f {} ;(删除30天前)
  • 清理 rsyslog 轮转的旧文件(已被 logrotate 管理的 .gz 等):
    • 示例:find /var/log -type f -name “*.gz” -mtime +7 -delete
  • 如磁盘已接近耗尽,可临时将大文件挪走并释放空间,再处理根因。
    以上方法可快速回收空间,优先处理 journal 与轮转后归档日志。

三、配置长期自动治理

  • 配置 logrotate(系统日志通用示例):编辑**/etc/logrotate.d/rsyslog**或新建规则,示例:
    /var/log/messages {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    postrotate
    /usr/bin/systemctl reload rsyslog >/dev/null 2>&1 || true
    endscript
    }
    • 调试与强制执行:sudo logrotate -d /etc/logrotate.conf(调试),sudo logrotate -f /etc/logrotate.conf(强制)。
  • 限制 journal 日志大小与保留期:编辑**/etc/systemd/journald.conf**,示例:
    SystemMaxUse=1G
    MaxRetentionSec=1week
    修改后重启:sudo systemctl restart systemd-journald
  • 调整 rsyslog 日志级别(减少日志量):在**/etc/rsyslog.conf/etc/rsyslog.d/50-default.conf**中,将
    *.info; mail.none; authpriv.none; cron.none /var/log/messages
    调整为
    *.warning; mail.none; authpriv.none; cron.none /var/log/messages(仅记录 warning 及以上)。
  • 更改日志存储路径(/var 分区紧张时):在 rsyslog 配置中将路径改为有足够空间的分区,例如:
    . /data/log/messages,然后sudo systemctl restart rsyslog
  • 集中日志到远程服务器(减轻本地压力):在 rsyslog 中添加
    *. @192.168.1.100:514*(UDP),或***.* @@192.168.1.100:514**(TCP),并重启 rsyslog。
    以上策略覆盖“轮转压缩、级别优化、路径迁移、远程汇聚”的完整闭环。

四、高风险操作与注意事项

  • 不要直接删除正在被进程写入的日志文件(可能导致句柄异常或应用异常);如需清理,请使用truncate -s 0或交由 logrotate 处理。
  • 清理或迁移日志前,建议先做备份:例如sudo cp -r /var/log /var/log_backup_$(date +%Y%m%d%H%M%S)
  • 清理服务日志(如 httpd、nginx、mysqld)时,优先通过systemctl restart让其按新配置重新创建日志文件,避免直接 rm 后权限或句柄问题。
  • 修改 rsyslog、journald 配置后务必重启服务使其生效,并观察journalctl -xe是否有报错。
  • 若磁盘长期吃紧,优先扩容**/var**所在分区或挂载更大磁盘,再配合上述策略治理。
    以上做法可显著降低因误操作导致的风险,并确保配置变更稳定生效。

0