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

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 产生的日志,请务必设置日志最大大小和轮转,避免单个日志文件无限制膨胀

相关文章:

  • mybatis-plus实现增删改查(新手理解版)
  • 弱光环境下如何手持相机拍摄静物:摄影曝光之等效曝光认知
  • 【深度学习-pytorch篇】2. Activation, 多层感知机与LLaMA中的MLP实现解析
  • 学习率及相关优化参数详解:驱动模型高效训练
  • DNS解析过程以及使用的协议名称
  • Pytorch中一些重要的经典操作和简单讲解
  • Fastmcp本地搭建 ,查询本地mysql,接入agent-cursor--详细流程
  • P2278 HNOI2003 操作系统
  • 【Python3教程】Python3基础篇之OS文件目录方法
  • 通过阿里云服务发送邮件
  • 【Python-Day 19】函数的回响:深入理解 `return` 语句与返回值
  • [网页五子棋][匹配模块]服务器开发、用户管理器(创建匹配请求/响应对象、处理连接成功、处理下线)
  • 腾讯混元开源语音数字人模型 HunyuanVideo-Avatar:开启数字人 “能说会唱” 新时代
  • 异步上传石墨文件进度条前端展示记录(采用Redis中String数据结构实现)
  • 探寻黄金奶源带,悠纯乳业打造西北乳业新标杆
  • shell编程之sed命令详解
  • 数据安全进阶:102页数据安全评估方案精讲【附全文阅读】
  • SAP学习笔记 - 开发14 - 前端Fiori开发 HelloWorld
  • Python中的跨域资源共享(CORS)处理
  • 电容层析成像TSVD算法
  • 常用的网站开发技术有哪几种/百度seo推广工具
  • 普陀区网站建设前端/宁波seo网络推广定制
  • 网站闭关保护怎么做/嘉兴seo网络推广
  • 哪个网站专门做代购/鸡西网站seo
  • 石排镇仿做网站/网络引流怎么做啊?
  • 合肥有多少做网站的/用广州seo推广获精准访问量