Logstash - FileBeat 多行设置将太多消息分组

Logstash - FileBeat multiline setting groups too much messages

我已将 FileBeat 配置为使用以下配置发送多行日志:

-
  paths:
    - /opt/wls/domains/filename.log
  input_type: log
  document_type: log_doc
  multiline:
    pattern: ^%{TIMESTAMP_ISO8601}
    negate: true
    match: after

据我所知,它应该将所有行附加到前一行,直到找到以时间戳 (TIMESTAMP_ISO8601) 开头的行。

在我的例子中,使用此设置的 filebeat 将多条日志消息组合成一条。我的日志消息是这样开始的:

2016-10-14 20:31:07,447 INFO [ACTIVE] ExecuteThread: '5' for queue: 'weblogic.kernel.Default (self-tuning)' ...

它应该与 ^%{TIMESTAMP_ISO8601} 匹配,所以问题出在哪里?为什么它们作为一条消息发送?

谢谢。

P.S。我也尝试过 ^%{YYYY}^%{YEAR} 模式,但结果是一样的...

正如评论中所写,FileBeat 不支持 grok 模式。我写了一个正则表达式而不是 grok 模式,它运行良好。可以在此处找到支持的正则表达式:https://www.elastic.co/guide/en/beats/filebeat/1.2/regexp-support.html and some multiline examples and tips in case of FileBeat can be found here: https://www.elastic.co/guide/en/beats/filebeat/1.2/multiline-examples.html

显然 GROK 无济于事,必须使用 Regex。我所做的如下,对我有用,

filebeat.prospectors:

    - type: log

      enabled: true

      paths:
          - /xxx/server.log*

      multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
      multiline.negate: true
      multiline.match: after

这里我只是在寻找行首的时间戳。