【问题标题】:aggregate logstash filter with "multiple pipelines"具有“多个管道”的聚合 logstash 过滤器
【发布时间】:2021-02-03 03:15:57
【问题描述】:

我想让 httpd access_log 条目由两个不同的 logstash 过滤器处理。

其中之一是“聚合”过滤器,已知它只能与单个工作线程一起正常工作。但是,应该允许另一个过滤器(我们称之为“otherfilter”)与多个工作线程一起工作,这样就不会损失性能。

为了实现这一点,我想使用 logstash 的“多管道”功能。基本上,一个管道应该读取数据(“输入管道”)并将其分发到其他两个上述过滤器运行的管道(我们称它们为“聚合管道”和“其他过滤器管道”)。

第一次测试表明,如果输入管道设置为与多个线程一起工作,则聚合过滤器的结果不正确。也就是说,当以 60 秒的间隔聚合时,事件计数器有时会显示实际发生的更多事件,有时会显示更少的事件。问题似乎是事件在聚合过滤器中“未排序”到达,因此间隔(其开始和结束是根据时间戳字段确定的)不正确。

所以我问自己,我想要实现的“多管道”是否完全可行?

【问题讨论】:

    标签: logstash aggregate-filter


    【解决方案1】:

    您可以在多个管道中拆分单个管道,但由于您要使用 aggregate 过滤器,您需要确保在事件进入 aggregate 过滤器之前发生的所有事情都仅由一名工作人员运行。

    例如,如果您将管道分解为管道 A(您的输入)、管道 B(您的聚合过滤器)和管道 C(您的另一个过滤器)。

    这仅在以下情况下有效:

    • 管道 A 仅由一名工作人员运行。
    • 管道 B 仅在一名工作人员的情况下运行。
    • 管道 C 在管道 B 之后运行,并且不依赖于事件的顺序。

    如果您的输入管道与多个工作人员一起运行,则您无法保证事件进入聚合管道时的顺序,因此基本上您的输入和聚合应该在同一个管道中,然后您可以指导输出到与多个工作人员一起运行的另一个过滤器管道。

    【讨论】:

    • 没错,在我看来就是这样……看来我不得不忍受只有一个线程来读取输入数据的缺点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2018-12-17
    • 2018-06-16
    • 2022-09-23
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多