Filebeat:将一个输入收集到多个 elasticsearch 输出,每个输出都有不同的处理器集

Filebeat: harvest one input to multiple elasticsearch outputs, each with its different set of processors

我想配置 filebeat 以将 stdout.log 收集到多个 elasticsearch 输出,例如,x==A 的行将收集到 elasticsearchAx==B 的行将收集被收获到 elasticsearchB,他们每个人都有一组不同的处理器。

可能吗?谢谢。

不,不幸的是,这是不可能的。是的,您可以为同一输入定义多个处理器,每个处理器都有自己的条件,如您所述(请参阅 https://www.elastic.co/guide/en/beats/filebeat/current/defining-processors.html)。

问题是 filebeat.yml 中 elasticsearch 主机的配置。每个事件,不管特定的处理器,都将分发到所有 elasticsearch 主机,因为您无法在日志中定义特定的 elasticsearch 主机 inputs/processors 自己。

我想到了两个解决方法来满足您的要求:

  • 安装多个 filebeat instances/services,每个都有一个专用输入 处理器。在特定的 filebeat.yml 中,您然后仅指定数据应发送到的相关主机。

  • 设置 Logstash 作为 filebeat 和 elasticsearch 之间的中间组件。然后,您的 filebeat 会将事件发送到 logstash 管道。在那里你可以实现一个过滤器来检查事件的某些标准(例如你通过处理器设置的标签)然后将它们分发到正确的 elasticsearch 主机。 (将其视为 if-else 结构)

我建议您使用 logstash 解决方法,因为它更易于扩展和满足未来的需求。

希望能帮到你

编辑:

我修改了我的答案,更多地关注一个输入的多个处理器而不是多个输入。解决方法的想法仍然有效。