【问题标题】:Logstash Duplicate EventsLogstash 重复事件
【发布时间】:2020-07-21 23:40:27
【问题描述】:

我有两个 Logstash 配置文件:test1.conftest2.conf
他们每个人都有自己的input -> filter -> ouput 流。

它们都具有相同的过滤器和elasticsearch 输出写入相同的索引。

我的问题是 Logstash 正在将重复事件写入 ElasticSearch 索引,无论我选择测试哪个输入(每个事件都变成两个相同的事件而不是一个)。

我该如何解决这个问题?

【问题讨论】:

    标签: elasticsearch logstash logstash-configuration


    【解决方案1】:

    默认情况下,Logstash 有一个名为main 的管道,它会自动检测 conf.d 文件夹中的所有 .conf 文件;此配置设置在pipelines.yml 文件:

    - pipeline.id: main
      path.config: "/etc/logstash/conf.d/*.conf"  
    

    如果您在一个管道下有多个 .conf 文件,Logstash 会将它们合并在一起,导致对所有输入执行所有过滤器和输出,因此在这种情况下,无论哪个输入正在接收事件,它将经过两个过滤器/输出路径,导致重复写入 ElasticSearch(如果两个 .conf 文件的过滤器/输出相同,则事件相同)。


    解决方案

    1.将过滤器/输出移动到单独的文件中

    如果您的过滤器/输出在配置文件中相同,请将过滤器/输出移动到单独的文件中。所以现在你有两个 .conf 文件,一个用于每个输入,第三个 .conf 文件用于过滤器/输出。使用此设置,每个输入将仅通过一个处理路径。

    例如:

    input1.conf

    input {
      # input 1
    } 
    

    input2.conf

    input {
      # input 2
    }
    

    filter_output.conf

    filter {
      # common filter
    }  
    
    output {
      # common output
    }
    

    您可以查看此answer 以了解应选择此解决方案的另一个示例。

    请注意,如果过滤器/输出相同,但您仍希望将它们称为完全不同的处理路径,请继续阅读。


    2。将 .conf 文件拆分到不同的管道

    如果您需要每个 .conf 文件独立,请将 .conf 文件拆分到不同的管道。

    为此,只需编辑pipelines.yml 文件。
    例如:

    pipelines.yml

    - pipeline.id: test1
    path.config: "/etc/logstash/conf.d/test1.conf"
    
    - pipeline.id: test2
    path.config: "/etc/logstash/conf.d/test2.conf"  
    

    阅读更多关于Multiple Pipelines的信息


    3.按类型分隔
    用不同的类型标记每个输入,稍后使用 if 语句在过滤器/输出上检查它。

    您可以在answer 中了解更多相关信息。

    【讨论】:

    • 您是否同时发布了已回答的问题和您的解决方案?出于好奇:那为什么不写一篇博文呢?
    • 嘿@glenacota :) “不仅可以提出和回答您自己的问题,而且明确鼓励这样做”:stackoverflow.blog/2011/07/01/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多