Filebeat:将一个输入收集到多个 elasticsearch 输出,每个输出都有不同的处理器集
Filebeat: harvest one input to multiple elasticsearch outputs, each with its different set of processors
我想配置 filebeat 以将 stdout.log
收集到多个 elasticsearch 输出,例如,x==A
的行将收集到 elasticsearchA
,x==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 解决方法,因为它更易于扩展和满足未来的需求。
希望能帮到你
编辑:
我修改了我的答案,更多地关注一个输入的多个处理器而不是多个输入。解决方法的想法仍然有效。
我想配置 filebeat 以将 stdout.log
收集到多个 elasticsearch 输出,例如,x==A
的行将收集到 elasticsearchA
,x==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 解决方法,因为它更易于扩展和满足未来的需求。
希望能帮到你
编辑:
我修改了我的答案,更多地关注一个输入的多个处理器而不是多个输入。解决方法的想法仍然有效。