当前位置: 首页 > ops >正文

Ubuntu系统rsyslog日志突然占用磁盘空间超大怎么办?

环境:

Ubuntu20.04

问题描述:

Ubuntu系统rsyslog日志突然占用磁盘空间超大怎么办?最高200G
在这里插入图片描述

解决方案:

方案1:

1.检查是什么产生的

 sudo tail -n 1000 /var/log/syslog

在这里插入图片描述

2.先手动清空日志释放空间

sudo truncate -s 0 /var/log/syslog

3.查看cat /etc/logrotate.d/rsyslog配置

(base) root@VM-0-2-ubuntu:/mnt/program/elk/docker-elk# cat /etc/logrotate.d/rsyslog
/var/log/syslog
{rotate 7dailymissingoknotifemptydelaycompresscompresspostrotate/usr/lib/rsyslog/rsyslog-rotateendscript
}/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{rotate 4weeklymissingoknotifemptycompressdelaycompresssharedscriptspostrotate/usr/lib/rsyslog/rsyslog-rotateendscript
}

4.设置策略

您想实现的是:让系统的日志文件(如 /var/log/syslog)总大小控制在固定阈值(例如 10G)以内,超过后自动清理或循环覆盖旧日志,避免日志无限增长占满磁盘空间。

Linux 下常用的日志管理手段是 logrotate 配合日志轮转,但 logrotate 本身不支持按照总大小限制删除旧日志,它是基于日期轮转(daily/weekly)和备份份数(rotate X)来控制日志量。


方案2:利用 logrotate,实现基于文件个数和单个文件大小的限制

  • logrotate 可以配置单个日志文件轮转的最大大小(maxsizesize),当日志超过该大小时执行轮转
  • 结合 rotate 参数限制保留的旧日志个数,间接控制总日志大小

示例 /etc/logrotate.d/syslog 配置:

/var/log/syslog {size 100M               # 当日志文件大于100MB时,轮转日志rotate 100              # 保留最大100个轮转文件missingoknotifemptycompressdelaycompresscopytruncate
}
  • 100个文件 × 100MB = 10GB 左右的总日志大小
  • copytruncate 适用于不能重启日志写入进程的情况(如 rsyslog)
  • 缺点:不能严格保证总大小恰好10G,日志大小会有波动

方案3:使用 maxsize 配合 dailyrotate 控制

/var/log/syslog {dailymaxsize 100M           # 当日志超过100MB时轮转rotate 100             # 保留100个轮转文件missingoknotifemptycompressdelaycompresscopytruncate
}
  • 轮转时间触发和大小触发二者任一满足即可轮转
  • 仍是间接控制总文件大小

方案4:使用专门的日志管理工具 — logrotate 结合 systemd-journald

如果您的系统用的是 systemd ,推荐使用 journald 管理日志,支持直接配置最大磁盘使用量

查看 journald 配置文件 /etc/systemd/journald.conf

  • 关键参数:
SystemMaxUse=10G   # 日志最大占用磁盘空间,超过自动清理旧日志
RuntimeMaxUse=10G  # 运行时日志最大占用空间
MaxRetentionSec=2week  # 日志最长保留时间

修改后重启 systemd-journald

sudo systemctl restart systemd-journald

这样journald 会自动控制日志文件大小,删除旧记录,避免占用超过10G。


方案5:对 Docker 容器日志限制大小

如果是 Docker 容器产生的大量日志,也要限制容器日志大小:

Docker Compose 配置示例(限制单个日志文件最大10M,最多3个轮转文件):

logging:driver: "json-file"options:max-size: "10m"max-file: "3"

方案总结

方案编号方案名称适用场景是否严格控制总大小配置复杂度
1logrotate size + rotate传统日志文件管理间接控制简单
2logrotate maxsize + daily传统日志文件管理间接控制简单
3systemd-journald 配置systemd 系统日志管理严格控制简单
4Docker 容器日志限制Docker 容器日志管理严格控制简单

操作示例

修改 /etc/logrotate.d/rsyslog,添加 size 和 rotate

/var/log/syslog
{size 100Mrotate 100missingoknotifemptycompressdelaycompresscopytruncatepostrotate/usr/lib/rsyslog/rsyslog-rotateendscript
}

执行强制轮转测试:

sudo logrotate -f /etc/logrotate.d/rsyslog

修改 /etc/systemd/journald.conf(本案例选这个)

编辑配置:

sudo nano /etc/systemd/journald.conf

找到并设置:

SystemMaxUse=10G
RuntimeMaxUse=10G
MaxRetentionSec=2week

在这里插入图片描述

保存后重启服务:

sudo systemctl restart systemd-journald

备注

  • copytruncate 用于避免日志写入程序重启,适合 rsyslog
  • 如果您使用的是 journald 作为主要日志管理工具,建议以 journald 配置为主
  • 对于 Docker 产生的日志,请务必设置日志最大大小和轮转,避免单个日志文件无限制膨胀

http://www.xdnf.cn/news/9483.html

相关文章:

  • 如何使用服务器搭建邮局系统?
  • MySQL 数据库备份与恢复利器:Percona XtraBackup 详解
  • MySQL强化关键_017_索引
  • 进程的控制和调度上
  • 2tensorf
  • ElectronBot复刻-电路测试篇
  • 数据分析与应用-----使用scikit-learn构建模型
  • 跑步机的控制面板英文的意思
  • 财政票据查验接口功能解析-接口实践-医疗票据管理
  • SSM 框架深度整合实战:从零构建企业级 Java 应用
  • 华为OD最新机试真题-反转每对括号间的子串-OD统一考试(B卷)
  • Vue 3 的 <script setup> 语法糖(持续更新)
  • 尚硅谷redis7 58-62 主从复制之一主二仆
  • 【前端】JS引擎 v.s. 正则表达式引擎
  • 创建型设计模式之Singleton(单例)设计模式
  • 力扣热题100(附刷题表版)
  • 【西方哲学-0】西哲思维导图mermaid格式
  • 离线场景下扫描与修复系统缺失补丁解决方案
  • 【计算机网络】第1章:概述—协议层次及服务模型
  • 网络安全之XSS漏洞
  • Unity屏幕适配——适配信息计算和安全区域适配
  • 触控精灵 ADB运行模式填写电脑端IP教程
  • 九、【前后端联调篇】Vue3 + Axios 异步通信实战
  • ​​知识图谱:重构认知的智能革命​
  • 安世亚太:信息化和数字化的底层逻辑
  • Ansible模块——Ansible配置文件!
  • 3D建模的全景图谱:从55个工具到元宇宙的数字革命
  • C++中,`friend`关键字的使用
  • 【数据分析】Matplotlib+Pandas+Seaborn绘图
  • 玻纤效应的时序偏差