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

时间:2016-10-15 07:47:49

标签: elasticsearch logstash multiline filebeat

我已使用以下配置将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}模式,但结果是一样的......

2 个答案:

答案 0 :(得分:0)

如评论中所述,FileBeat不支持grok模式。我写了一个正则表达式而不是grok模式,它运行良好。支持的正则表达式可以在这里找到:https://www.elastic.co/guide/en/beats/filebeat/1.2/regexp-support.html和一些多行示例以及FileBeat的提示可以在这里找到:https://www.elastic.co/guide/en/beats/filebeat/1.2/multiline-examples.html

答案 1 :(得分:0)

显然GROK不会帮助并且必须使用正则表达式。我所做的如下,对我有用,

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

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