https://docs.fluentd.org/v1.0/articles/install-by-rpm
日志是系统很重要的一个组成部分,通过日志可以及时发现系统中存在的问题,也可以为修复问题提供线索。Docker提供了多种插件方式管理日志,本文就对使用MongoDB存储Docker日志的过程做个记录。
数据流

Docker产生的日期 发送到 FluentD,然后FluentD在转存到MongoDB。
配置Fluentd
前提:操作系统是CentOS7,已安装MongoDB3.4
1.安装Fluentd
CentOS 7的软件库并没有包含Fluentd的安装包,所以需要手动安装。在CentOS使用的软件td-agent。
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
上面命令会在/etct/yum.repo.d/目录中,创建一个td-agent的安装库 td.repo,然后自动安装td-agent。安装完毕后设为自动启动。
/etc/init.d/td-agent start
查看状态,停止,重启等命令如下
/etc/init.d/td-agent start
/etc/init.d/td-agent stop
/etc/init.d/td-agent restart
/etc/init.d/td-agent status
有问题去 vim /var/log/td-agent/td-agent.log 查看日志信息
如果在启动过程中出现问题,可以查看位于/var/log/td-agent/下日志文件td-agent.log
2. 配置将docker日志转存到MongoDB
转存到MongoDB需要插件支持,但是默认情况下td-agent是没有安装该插件的,需要安装。
yum -y install td-agent-gemt
td-agent-gem install fluent-plugin-mongo
vi /etc/td-agent/td-agent.conf # 增加
<match mongo.**> # plugin type
@type mongo # 引入插件为mongo,使用这个必须要安装fluentd-mongo的插件
# mongodb db + collection
database docker # mongodb的数据库
collection logs # 放在哪个集合中
# mongodb host + port
host 24.cndo.org #数据库host
port 27017 # 数据库端口
# interval
<buffer>
flush_mode interval
flush_interval 1s #10秒钟刷新读取一次
</buffer>
# make sure to include the time key
<inject>
time_key time
</inject>
</match>

重启td-agent。
3.启动容器
启动容器的命令改为:

运行完毕后,可以到MongoDB中查看日志。
解决写入延迟
上面我们完成了Docker + Fluentd + MongoDB的基本配置。但是在实际的使用过程中,却发现Docker生成的日志并不会立即写入到MongoDB中,有大概1分钟左右的延迟。
查阅Fluentd的文档得知,有一个flush参数可以控制日志的写入频率,默认的是60s。更改flush_interval参数就可以提高写入频率,具体更改如下:

刚开始对文档理解不太透彻,增加了flush_interval参数后,并没有发挥作用,第一次更改时,并没有将flush_mode和flush_interval放在buffer结构中。也就是:

从日志中也可以看出上面的配置,并没有发挥作用:

上面说flush_mode并没有起作用。
好了,操作步骤以及实际案例就介绍到这里,希望今天的内容对你所帮助!