我想让httpd access_log条目由两个不同的logstash过滤器处理。
其中之一是“聚合”过滤器,已知该过滤器只能在单个工作线程中正常工作。但是,应该允许另一个过滤器(我们称其为“ otherfilter”)可以与多个工作线程一起使用,以免造成性能损失。
为此,我想使用logstash的“多个管道”功能。基本上,一个管道应该读取数据(“输入管道”)并将其分发到上述两个过滤器在其上运行的另外两个管道(我们称它们为“集合管道”和“其他过滤器管道”)。
最初的测试表明,如果将输入管道设置为可以使用多个线程,则聚合筛选器的结果将不正确。也就是说,当在60秒的间隔内进行汇总时,事件计数器有时会显示更多或有时更少的实际事件。问题似乎是事件在聚合筛选器中到达“未排序”,因此间隔(其开始和结束是根据时间戳字段确定的)不正确。
所以我问自己,我想实现的“多管道”是否完全可行?
答案 0 :(得分:1)
您可以在多个管道中分解一个管道,但是由于要使用aggregate
过滤器,因此需要确保在事件进入aggregate
过滤器之前发生的所有操作仅在运行时一名工人。
例如,如果将管道分解成输入的管道A,管道B(聚合过滤器)和管道C(其他过滤器)。
这仅在以下情况下有效:
如果您的输入管道与多个工作人员一起运行,则您无法保证事件进入聚合管道时的顺序,因此,基本上您的输入和聚合应位于同一管道中,然后您可以引导事件输出到运行多个工人的另一个过滤器管道。