- A+
前言
日记是体系很紧张的一个构成部门,经由过程日记可以实时发现体系中存在的问题,也可认为修复问题提供线索。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。安装完毕后设为主动启动。
# systemctl start td-agent # systemctl enable td-agent
假如在启动进程中呈现问题,可以查看位于/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
编纂/etc/td-agent/td-agent.conf,增长
## match tag=docker.* and dump to mongodb ## 在docker启动容器时,日记的tag要相符docker.*的情势 <match docker.*> @type mongo # 数据库地址 host 127.0.0.1 # 数据库端口 port 22017 # 存储日记的数据库和数据集名称 database docker collection log </match>
重启td-agent。
启动容器
启动容器的敕令改为:
$ docker run --mount type=bind,source=/home/demo/app,destination=/app --log-driver=fluentd --log-opt tag="大众docker.log"大众 python3:latest python3 /app/test.py
运行完毕后,可以到MongoDB中查看日记。
后续
然则在现实的使用进程中,却发现Docker天生的日记并不会立刻写入到MongoDB中,有年夜概1分钟左右的延迟。
查阅Fluentd的文档得知,有一个flush参数可以节制日记的写入频率,默认的是60s。变动flush_interval参数就可以进步写入频率,详细变动如下:
## match tag=docker.* and dump to console <match docker.*> @type mongo host 127.0.0.1 port 22017 database docker collection log <buffer> flush_mode interval flush_interval 1s </buffer> </match>
刚开端对文档懂得不太透辟,增长了flush_interval参数后,并没有施展作用,第一次变动时,并没有将flush_mode和flush_interval放在buffer布局中。也便是:
## match tag=docker.* and dump to console <match docker.*> @type mongo host 127.0.0.1 port 22017 database docker collection log flush_mode interval flush_interval 1s </match>
从日记中也可以看出上面的设置装备摆设,并没有施展作用:
2018-01-19 14:33:32 +0800 [warn]: parameter '**flush_mode**' in <match docker.*> @type mongo host "大众1270.0.0.1"大众 port 22017 database "大众docker"大众 collection "大众log"大众 flush_mode interval flush_interval 1s buffer_chunk_limit 8m time_key time <inject> time_key time time_format %Y-%m-%d %H:%M:%S.%L </inject> </match> is not used.
上面说flush_mode并没有起作用。
总结
以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。
参考文档:
https://docs.treasuredata.com/articles/td-agent
https://docs.docker.com/engine/admin/logging/fluentd/
https://docs.fluentd.org/v1.0/articles/out_mongo
您可能感兴致的文章:
Docker构建ELK Docker集群日记网络体系Docker容器 日记中文乱码问题办理方法详解应用ELK搭建Docker容器化利用日记中心Docker容器中运行flume及启动不输出运行日记问题详解Docker守护过程的设置装备摆设及日记滚动 docker 中的 nginx 日记思绪详解docker中使用mongodb数据库详解(在局域网拜访)基于Docker的MongoDB实现授权拜访的办法