日志是系统很重要的一个组成部分, 通过日志可以及时发现系统中存在的问题, 也可以为修复问题提供线索. Docker 提供了多种插件方式管理日志, 本文就对使用 MongoDB 存储 Docker 日志的过程做个记录.
数据流
Docker 产生的日期 发送到 FluentD, 然后 FluentD 在转存到 MongoDB.
配置 Fluentd
前提: 操作系统是 CentOS7, 已安装 MongoDB3.4
1. 安装 Fluentd
CentOS 7 的软件库并没有包含 Fluentd 的安装包, 所以需要手动安装. 在 CentOS 使用的软件 td-agent.
上面命令会在 / etct/yum.repo.d / 目录中, 创建一个 td-agent 的安装库 td.repo, 然后自动安装 td-agent. 安装完毕后设为自动启动.
如果在启动过程中出现问题, 可以查看位于 / var/log/td-agent / 下日志文件 td-agent.log
2. 配置将 docker 日志转存到 MongoDB
转存到 MongoDB 需要插件支持, 但是默认情况下 td-agent 是没有安装该插件的, 需要安装.
编辑 / etc/td-agent/td-agent.conf, 增加
重启 td-agent.
3. 启动容器
启动容器的命令改为:
运行完毕后, 可以到 MongoDB 中查看日志.
解决写入延迟
上面我们完成了 Docker + Fluentd + MongoDB 的基本配置. 但是在实际的使用过程中, 却发现 Docker 生成的日志并不会立即写入到 MongoDB 中, 有大概 1 分钟左右的延迟.
查阅 Fluentd 的文档得知, 有一个 flush 参数可以控制日志的写入频率, 默认的是 60s. 更改 flush_interval 参数就可以提高写入频率, 具体更改如下:
刚开始对文档理解不太透彻, 增加了 flush_interval 参数后, 并没有发挥作用, 第一次更改时, 并没有将 flush_mode 和 flush_interval 放在 buffer 结构中. 也就是:
从日志中也可以看出上面的配置, 并没有发挥作用:
上面说 flush_mode 并没有起作用.
好了, 操作步骤以及实际案例就介绍到这里, 希望今天的内容对你所帮助!
来源: http://stor.51cto.com/art/201809/583486.htm