我已使用以下配置将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}
模式,但结果是一样的......
答案 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
这里我只是在行的开头寻找时间戳。