0

我有从不同容器进入logstash的日志。每个 logentry 都包含一个 fieldContainerID和一个 field Message。任何与ContainerID我假设相同的消息都已正确排序。

我想将多个日志的消息内容与相同的 containerId 合并,如下所示:

  1. 前缀 | 字符串1
  2. 字符串2
  3. 字符串3
  4. 前缀 | 字符串 4

所以我最终得到了日志:

  1. 前缀 | 字符串1 \n 字符串2 \n 字符串3
  2. 前缀 | 字符串 4

这可以通过logstash 聚合过滤器插件来完成吗?

具体来说,如果在上面的 1.、2.、3.和 4. 之间接收到具有不同 containerID 的消息,是否会出现问题?


背景:

我有多个 docker 容器生成日志条目,这些条目使用来自多个 docker 守护进程(在一个 swarm 中)的 docker gelf 日志驱动程序发送到 logstash。

所有这些都有效,logstash 接收并过滤日志。

Docker 将每一行视为一个单独的日志条目,并将其转发到 logstash。在多行日志的情况下,这是一个问题。我想将许多对应于一条多行消息的日志“合并”为一个。我知道“逻辑”日志条目何时结束,因为下一个条目将以 PREFIX 开头,这就是我建议上述解决方案的原因。

4

1 回答 1

1

我建议为此使用 Filebeat。它具有多行支持,并且在最新版本中,您可以使用 Docker 的自动发现功能。

我建议阅读以下讨论:https ://github.com/elastic/beats/issues/918

于 2018-01-12T07:40:33.300 回答