容器日志管理:别让 json-file 吃满磁盘

Docker · 2 分钟阅读· 247 次阅读

docker logs 看着方便,代价是 json-file 默认无限增长。一个报错循环的服务,一天能写几十 G。

日志策略要回答三件事:留多久、放哪里、出事怎么查。

先说结论

全局配 max-size 10m + max-file 3,重要服务再上集中收集。

  • daemon.json 里配 log-opts 全局生效
  • compose 里可单独覆盖
  • 集中收集用 Loki/ELK,避免容器重建丢日志
  • 应用侧控制日志级别与采样

先把问题说清楚

json-file 每行一条记录,体积膨胀快;local 驱动有内置轮转,更适合单机。

集中收集的价值在于容器重建后日志仍在,且能跨服务关联查询。

具体怎么做

按顺序执行,每步都验证完再进下一步:

  • 在 /etc/docker/daemon.json 配置 log-driver 与 log-opts
  • 重启 docker 使配置生效(影响新容器)
  • 对已有容器逐个更新或重建
  • 重要服务接入 Loki/Promtail 或 ELK
  • 加磁盘水位告警,阈值 80%

参数与成本对照

把关键数值摊开,方便判断该选哪条路:

驱动 轮转 适用
json-file 需手动配 开发/单机
local 内置 单机生产
loki/fluentd 外部管理 多机集中
none 无 高频无价值日志

容器日志管理

几个容易踩的坑

下面这些是最常见的错误做法:

  • daemon.json 改完不重启 docker:不生效
  • 只改 compose 不管全局:其他容器照样疯长
  • 日志轮转后仍用 docker logs 查历史:查不到
  • 把日志目录挂到宿主机却忘了清理

最后补两句

日志要能回答「什么时候、哪个服务、发生了什么」。配好这三点,比留一堆无用日志强。

工具是手段,理解机制才是能力。命令记不住没关系,知道「该看什么」就够了。

评论 (3)

阿
阿哲

照着做了一遍,确实少走弯路。第二步最容易漏,建议顺手加个检查清单。

南
南风

比「一键脚本」有用多了,知道为什么比知道怎么做重要。

K
Kevin

补充一句:不同版本行为会变,动手前先确认自己的版本号。

发表评论

验证码

提交后需站长审核,通过后才会显示。