在fluentd中使用多行json

我是新来的stream利。

我有在Docker容器中运行的应用程序。 它们是以JSON格式login的Java应用程序。 JSON消息通常分成多行。

我想使用Docker fluentd日志驱动程序将这些消息发送到一个中央stream利的服务器。

Docker驱动程序分别发送每行到fluentd,所以我需要能够结合这些多行消息。

我正在寻找一些关于如何实现这一目标的指针。

使用开箱即用的configuration我的日志看起来像这样:

20170501T050820+0000 docker.fa5077070a33 {"log":"{\"timestamp\":\"2017-05-01T05:08:20.168Z\", \"applicationName\":\"my-event-publisher\", \"applicationVersion\":\"0.0.6-SNAPSHOT\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout"} 20170501T050820+0000 docker.fa5077070a33 {"container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":" \"logLevel\":\"INFO\", \"pid\":\"1\", \"threadId\":\"Thread-4\", \"host\":\"fa5077070a33\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e"} 20170501T050820+0000 docker.fa5077070a33 {"source":"stdout","log":" \"logger\":\"org.springframework.context.support.DefaultLifecycleProcessor\",","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"} 20170501T050820+0000 docker.fa5077070a33 {"container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00","source":"stdout","log":" \"message\":\"Stopping beans in phase 2147483647\""} 20170501T050820+0000 docker.fa5077070a33 {"source":"stdout","log":"}","container_id":"fa5077070a330f6a3a6f9400cc0ed04f2cf61c5eb2d66c5693385b67f3b09e2e","container_name":"/ecs-td-dev-my-event-publisher-12-my-event-publisher-dcb1b5f5a383d3852d00"} 

我应该以什么顺序来处理?

我需要:

  1. 提取每行的“日志”部分
  2. 寻找正则expression式/ ^ {“timestamp /来确定消息的开始
  3. 将每个日志语句合并为一个
  4. 将日志stringparsing为实际的JSON

说实话,我真的不关心fluentd的格式 – 添加时间戳和docker。

我宁愿只是有一个文件与我的JSON消息没有额外的领域由fluentd添加。

我已经看到使用“parsing器”的文档,但正如我所说,我只是不太确定的订单,因为我试图结婚多行JSON。