0

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

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

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

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

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

4

1 回答 1

1

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

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

这仅在以下情况下有效:

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

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

于 2020-10-20T10:51:10.230 回答