如何利用MongoDB存储码头工人日志详解

  

  

日志是系统很重要的一个组成部分,通过日志可以及时发现系统中存在的问题,也可以为修复问题提供线索.Docker提供了多种插件方式管理日志,本文就对使用MongoDB存储码头工人日志的过程做个记录。

  


  

  

如何利用MongoDB存储码头工人日志详解“> <br/>
  </p>
  <p>码头工人产生的日期发送到FluentD,然后FluentD在转存到MongoDB。</p>
  <p> <br/>
  </p>
  <p>前提:操作系统是CentOS7,已安装MongoDB3.4 </p>
  <p> <强> 1。安装Fluentd </强> <br/>
  </p>
  <p> CentOS 7的软件库并没有包含Fluentd的安装包,所以需要手动安装。在CentOS使用的软件td-agent。</p>
  
  <pre类=   # curl https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh - l      

上面命令会在/etct/yum.repo。d/目录中,创建一个td-agent的安装库td.repo,然后自动安装td-agent。安装完毕后设为自动启动。

        # systemctl开始td-agent   # systemctl启用td-agent      

如果在启动过程中出现问题,可以查看位于/var/log/td-agent/下日志文件td-agent.log

  

<强> 2。配置将码头工人日志转存到MongoDB
  

  

转存到MongoDB需要插件支持,但是默认情况下td-agent是没有安装该插件的,需要安装。

        #安装td-agent-gemt yum - y   # td-agent-gem安装fluent-plugin-mongo      

编辑/etc/td-agent/td-agent.conf,增加

        # #匹配标签=码头工人。*和转储到mongodb   # #在码头工人启动容器时,日志的标签要符合码头工人。*的形式   & lt;匹配码头工人。*比;   @type mongo   #数据库地址   主机127.0.0.1   #数据库端口   端口22017   #存储日志的数据库和数据集名称   数据库码头工人   收集日志   & lt;/match>      

重启td-agent。

  


  

  

启动容器的命令改为:

        码头工人——山类型=绑定运行,美元源=/home/演示/应用程序,目标=/app——log-driver=fluentd log-opt标签="码头工人。最新日志“python3: python3/app/test.py      

运行完毕后,可以到MongoDB中查看日志。

  

  

但是在实际的使用过程中,却发现码头工人生成的日志并不会立即写入到MongoDB中,有大概1分钟左右的延迟。

  

查阅Fluentd的文档得知,有一个刷新参数可以控制日志的写入频率,默认的是60年代。更改flush_interval参数就可以提高写入频率,具体更改如下:

        # #匹配标签=码头工人。*和转储控制台& lt;匹配码头工人。*比;@type mongo主机127.0.0.1端口22017数据库码头工人收集日志& lt; buffer>flush_mode间隔flush_interval 1 s & lt;/buffer>& lt;/match>      

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

        # #匹配标签=码头工人。*和转储控制台& lt;匹配码头工人。*比;@type mongo主机127.0.0.1端口22017数据库码头工人收集日志flush_mode间隔flush_interval 1 s & lt;/match>      

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

  
  

2018-01-19 14:33:32 + 0800[警告]:参数“* * flush_mode * *”& lt;匹配码头工人。*比;@type mongo主机“1270.0.0.1”端口22017数据库“码头工人”收集“日志”flush_mode间隔flush_interval 1 s buffer_chunk_limit 8 m time_key时间& lt; inject>time_key时间time_format Y % - % - % d % H: % m: % S。% L & lt;/inject>& lt;/match>是不习惯。
  

     

上面说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   

如何利用MongoDB存储码头工人日志详解