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
这里我只是在寻找行首的时间戳。
我已将 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
这里我只是在寻找行首的时间戳。