我已经连续几个星期了,而且我似乎无法解决这个问题。
我试图让所有这些线条适合与grok的多线匹配,但它只会拾取最后一条线,甚至丢弃线条开头的数字。
11:31:03.936 < : 1> 5: Load times per type (ms):
12: aaaaaa.aaaaaaaaa.aaaaaaa.aaaaaaa
1: bbbb.bbbb.bbbbbbbbbbbbb.bbbbbbbbb
3: cccc.cccccccc.ccccccccccc.cccccc
64: ddd.dddddddddddd.ddddddd.ddddddd
预期结果:
message_processed = Load times per type (ms):
12: aaaaaa.aaaaaaaaa.aaaaaaa.aaaaaaa
1: bbbb.bbbb.bbbbbbbbbbbbb.bbbbbbbbb
3: cccc.cccccccc.ccccccccccc.cccccc
64: ddd.dddddddddddd.ddddddd.ddddddd
实际结果:
message_processed = ddd.dddddddddddd.ddddddd.ddddddd
我使用以下grok模式:
grok {
match => [ "message" , "%{TIME:time}.*%{NUMBER:loglevel}:\s%{GREEDYDATA:message_processed}" ]
}
在Windows服务器上使用filebeat运送到logstash,并在filebeat.yml
中使用以下多行配置:
multiline.pattern: ^[0-9]{2}\:[0-9]{2}\:[0-9]{2}
multiline.negate: true
multiline.match: after
我已尝试使用(?m)标志,但无效,根据官方文档,使用带有filebeat的多行编解码器是不行的。
我做错了什么?
答案 0 :(得分:1)
尝试以下方法:
%{TIME:time}.*%{NUMBER:loglevel}:\s(?<message_processed>(.|\r|\n)*)
正如所指出的那样,here GREEDYDATA
在(?<message>(.|\r|\n)*)
期间不会与换行符匹配。所以上面对我有用。
使用https://grokconstructor.appspot.com/do/match上的多行配置查看示例的结果: