如何利用MongoDB存储Docker日志详解

  • A+
所属分类:MongoDB

前言

日记是体系很紧张的一个构成部门,经由过程日记可以实时发现体系中存在的问题,也可认为修复问题提供线索。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实现授权拜访的办法

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: