首页/云/云与容器速查/容器日志暴涨导致磁盘告警

容器日志暴涨导致磁盘告警

json-file 日志默认无上限:应用刷错误日志时磁盘被迅速写满,进而连累宿主与 Docker 守护进程。先止血(truncate),再配置 max-size 根治。

云与容器速查云更新于 2026-10-13

容器日志暴涨是什么

使用默认日志驱动时,容器日志没有大小上限:应用一旦进入错误循环或被打开高频调试日志,文件会迅速增长,磁盘占满后不只是这个容器不可用,Docker 守护进程与同宿主上的其他服务都会一起异常。处置分两步:先用截断的方式止血——直接删除文件并不释放空间,因为文件句柄仍被占用——再配置大小上限从根上解决,应用侧的日志级别与错误循环同样要修。

基本信息

止血手段truncate -s 0 <日志文件>,不要删除仍在被写入的文件
定位大户按文件大小排序查看各容器日志占用
根治配置全局设置日志大小与文件个数上限,或按容器单独设置
应用侧修正日志级别与错误循环,日志暴涨本身往往是故障信号
监控加固把磁盘使用率与日志增长速度纳入告警

典型使用场景

  • 磁盘使用率告警,需要快速定位到底是哪个容器写满了磁盘
  • 应用异常进入重试循环,日志量在几分钟内暴涨
  • 检查是否有人关闭了日志上限配置,导致防护失效
  • 大促或流量高峰前加固日志策略,提前划出安全边界
  • 复盘时确认止血动作是否留下了足够定位根因的现场信息

止血与配置

止血与配置
truncate -s 0 /var/lib/docker/containers/<id>/<id>-json.log   # 截断止血
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail   # 按大小排序定位大户
# /etc/docker/daemon.json
{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"}}
systemctl reload docker   # 重载配置,对新建容器生效

止血与根治对照

动作作用注意
截断日志立即释放磁盘空间文件与句柄保留,日志内容被清空
删除日志文件空间不会释放句柄仍指向原文件,白删还丢现场
配置大小上限从根上限制增长仅对新建容器生效,旧容器需重建
调整应用日志级别减少日志产出治本,但需要业务侧配合改动
磁盘与增速告警提前发现趋势比事后止血更有效
删除正在被写入的日志文件不会释放磁盘空间(文件句柄仍指向原文件):必须先截断,或者先停止容器再处理,否则会出现磁盘持续告警却查不到大户的情况。
截断会同时丢掉现场信息:操作前先把最后一段日志复制到别处留档,否则事后定位根因时缺少关键证据,只能等下次复现。

易错点

  • 删除日志后磁盘使用率没有变化:句柄未释放,白删一遍还丢掉了现场
  • 只清理历史日志却不配置上限,同类事故在下一个迭代重新上演
  • 截断前没有留存最后一段日志,根因线索一并丢失,只能等待再次复现
  • 只治日志不治应用:错误循环还在继续,止血只是把事故推迟了几小时

数据来源与参考

  • Docker Docs:json-file logging driver
  • Docker Docs:daemon.json

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌