Graylog 2 Collector-Sidecar配置无法正确合并多行消息

时间:2018-08-09 09:31:34

标签: javascript regex multiline filebeat graylog2

我正在将Graylog 2与Collector Sidecar一起使用,以从几台远程计算机上收集日志文件。这些日志文件包含Java Stacktrace,Graylog将其中的每一行作为单独的消息列出。我尝试在收集器配置中使用“启用多行”选项,并为它提供了正确的正则表达式作为合并的开始模式。不幸的是,这似乎不起作用。

提到的Stacktraces看起来像这样:

INFO   | jvm 1    | 2018/08/07 10:23:30 | 2018-08-07 10:23:30,194 WARN  ReportingMessageExtractor - Resource could not be extracted. Setting NO_EXTRACTION String.
INFO   | jvm 1    | 2018/08/07 10:23:30 | java.lang.NullPointerException
INFO   | jvm 1    | 2018/08/07 10:23:30 |       at com.###.###.###.middleware.reporting.ReportingMessageExtractor.extractResource(ReportingMessageExtractor.java:71)
INFO   | jvm 1    | 2018/08/07 10:23:30 |       at com.###.###.###.middleware.reporting.ReportingMessageExtractor.filledReportingMessage(ReportingMessageExtractor.java:47)
INFO   | jvm 1    | 2018/08/07 10:23:30 |       at com.###.###.###.middleware.reporting.ReportingMessageExtractor.extract(ReportingMessageExtractor.java:36)
INFO   | jvm 1    | 2018/08/07 10:23:30 |       at com.###.###.###.middleware.reporting.facade.ReportingMessageFacade.extractReportingMessage(ReportingMessageFacade.java:54)
...

我想用来匹配这些消息的正则表达式是这样的:

.*\|\s*at .*

我使用regex101.com测试了此表达式,它完全匹配原始错误消息下方的所有行,并且我知道此特定表达式可能不是最佳表达式。但是我还尝试了至少十二种其他变体,这些变体在使用regex101进行测试时也可以匹配。

仅此Graylog服务器似乎无法正确使用它,因为所有行仍被列为单独的消息。我们的其他Graylog服务器之一正确合并了Stacktrace。唯一的区别是,在这种情况下,消息以“ INFO | jvm 1 | timestamp”块为前缀,如上所示。

我还将在下面发布生成的filebeat.yml:

filebeat:
  prospectors:
  - encoding: plain
    exclude_files: []
    fields:
      collector_node_id: DHLAPP-A9011.tcb.deutschepost.de
      gl2_source_collector: 892201ae-4d4c-4c01-b994-8adb5999fa5a
      type: log
    ignore_older: 0
    multiline:
      match: after
      negate: false
      pattern: (.*\|\s*at .*)
    paths:
    - /###/###/###/*.log
    scan_frequency: 10s
    tail_files: true
    type: log
output:
  logstash:
    hosts:
    - localhost:5044
path:
  data: /var/cache/graylog/collector-sidecar/filebeat/data
  logs: /var/log/graylog/collector-sidecar
tags:
- exampletag

如果有人能告诉我为什么Multiline在某些情况下不能与预先测试的函数正则表达式一起工作,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试启用输入中的“否定多行样式”,以将匹配的行视为一条消息。

启用后,您的Yaml文件应如下所示

...

multiline:
  match: after
  negate: true
  pattern: (.*\|\s*at .*)

...