如何将多行泊坞日志结合到一个流畅的事件中

时间:2016-06-15 07:27:32

标签: docker fluentd

希望有人可以帮助我,因为这个问题困扰了我好几天......

我使用流利的语言来集中码头集装箱的日志。所以我设置了docker run选项:

log-driver=fluentd
log-opt=fluentd-address=fluentd.marathon.mesos:24224
log-opt=tag=server
log-opt=fluentd-async-connect=true

并收到像

这样的json对象
{container_id:xxx, container_name:xxx, log:xxx, ...}

例如,java异常堆栈跟踪将如下所示:

{log:exampleException:error, ...}
{log:\tat java.xxx, ...}
{log:\tat java.xxx, ...}

现在我的问题是:如何将它们组合在一起?像logstash中的multline一样。

我期待的正确答案是:

{log:exampleException:error\n\tat java.xxx\n\tat java.xxx, ...}

我流利的输入是in_forward而不是in_tail,所以从文档我不能使用流畅的核心内置的多线插件。

然后我找到了这个插件https://github.com/quick-sort/fluent-plugin-multiline-parser

但是因为我从docker收到的日志中没有包含' \ n'在每一行的末尾,这个插件将我的所有日​​志组合成一行!

e.g。我使用" Exception"标记第一行,但我得到的答案是:

{log:Exception:error\tat java.xxx\tat java.xxx, ...}

它将我的泊坞窗日志视为一行,并按字和#34分开;异常"

我试图添加' / n'通过过滤器record_transformer对每个日志进行了过滤,但过滤器更改了我的' \ n'进入' \\ n'自动,所以它也失败

我还找到了一个插件https://github.com/okkez/fluent-plugin-concat,但在安装此插件时遇到问题

最近我找不到任何方法

1 个答案:

答案 0 :(得分:1)

我的答案是安装multiline-parser插件并启用ruby来添加'\ n'

<filter server.**>
  type record_transformer
  enable_ruby
  <record>
    log ${record["log"]+"\n"}
  </record>
</filter>