Docker Fluentd Logging Driver for multiline

我正在尝试使用fluentd创build一个集中的日志logging系统,用于Docker环境。 目前,我可以使用fluentd docker日志驱动程序将docker日志发送到fluentd,与使用in_tail方法读取docker日志文件相比,这是一个非常干净的解决scheme。 但是,我目前正面临着多线日志问题的问题。

在这里输入图像说明

正如你从上面的图片可以看到的那样,多行日志是无序的,这对用户来说是非常混乱的。 有什么办法可以解决?

谢谢。

CW

我知道这不是“回答”stream利的问题。 但是这个指南解决了logstash的问题: http : //www.labouisse.com/how-to/2015/09/14/elk-and-docker-1-8/

通过添加JSON支持

json { source => "log_message" target => "json" } 

在parsing一个日志行之后到他的filter

我从来没有findfluentd的解决scheme,所以用这个解决scheme来代替

看看他们的文档中的multilineparsing: http : //docs.fluentd.org/articles/parser-plugin-overview#

您基本上必须指定一个匹配新日志消息的开始的正则expression式,这将使fluentd聚合多行日志事件到一个单一的消息。

来自他们的文档的通常的java stacktrace的例子:

format multiline format_firstline /\d{4}-\d{1,2}-\d{1,2}/ format1 /^(?<time>\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}) \[(?<thread>.*)\] (?<level>[^\s]+)(?<message>.*)/

使用stream利的插件concat插件帮助我解决上述问题。

在fluent-conf中添加这些行

  <filter **> @type concat key log stream_identity_key container_id multiline_start_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} multiline_end_regexp /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3} </filter> 

我的正则expression式检查DateTimeStamp在每个行开始的日志和Date和Timestamp(请注意"log":"2017-09-21 15:03:27.289 )下面

 2017-09-21T15:03:27Z tag {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:27.289 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.6"} 2017-09-21T15:03:28Z tag {"container_id":"11b0d89723b9c812be65233adbc51a71507bee04e494134258b7af13f089087f","container_name":"/bel_osc.1.bc1k2z6lke1d7djeq5s28xjyl","source":"stdout","log":"2017-09-21 15:03:28.191 INFO 1 --- [ost-startStop-1] oaccC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext"} 

此外,我不得不在Dockerfile中添加下面的行来安装插件

 RUN ["gem", "install", "fluent-plugin-concat", "--version", "2.1.0"] #Works with Fluentd v0.14-debian 

虽然这个正则expression式在发生exception时效果不好,但仍比以前好很多。 Fluentd链接,供参考 。