短: 我遇到多线问题。我得到了标签" multiline"在日志上,但它没有把它们放在一起。
说明: 我收到的日志
September 22nd 2016, 13:43:52.738 [0m[[31merror[0m] [0mTotal time: 368 s, completed 2016-09-22 13:43:52[0m
September 22nd 2016, 13:43:51.738 [0m[[0minfo[0m] [0m[36mSuites: completed 29, aborted 0[0m[0m
September 22nd 2016, 13:43:51.738 [0m[[31merror[0m] [0mFailed: Total 100,
Failed 4, Errors 0, Passed 96[0m
September 22nd 2016, 13:43:51.737 [0m[[0minfo[0m] [0m[36mRun completed in 1 minute, 24 seconds.[0m[0m
September 22nd 2016, 13:43:51.737 [0m[[0minfo[0m] [0mScalaTest[0m
" 总时间:%{NUMBER} s "重复多次,我只对这些" 总计,失败,错误"之后的总时间感兴趣线。 在第一行和第二行之间可以是无数或几个日志。
我的配置是:
grok {
#1
match => {"message" => "\[.m\[\u001b\[3.m%{NOTSPACE:level}\u001b\[0m\] \u001b\[0m%{NOTSPACE:Status}: Total %{NUMBER}, Failed %{NUMBER}, Errors %{NUMBER}$
add_tag => [ "test.continue" ]
tag_on_failure => []
}
#2
if "test.continue" in [tags]{
multiline {
pattern => "%{TIMESTAMP_ISO8601}\u001b\[0m$"
what => "next"
negate => true
}
}
#3
#OverallTime
grok {
match => {"message" => "\[.m\[\u001b\[3.m%{NOTSPACE:level}\u001b\[0m\] \u001b\[0mTotal time: %{NUMBER:Seconds:int} s, completed"}
add_tag => [ "test.overalltime" ]
tag_on_failure => []
}
我得到的是:
beats_input_codec_plain_applied, test.continue, multiline [0m[[31merror[0m] [0mFailed: Total 100, Failed 4, Errors 0, Passed 96[0m
第一个日志获取多行标记和test.continue但不像我期望的那样行事。
我理解的逻辑是:
[0m[[31merror[0m] [0mFailed: Total 100, Failed 4, Errors 0, Passed 96[0m
,请输入标签" test.continue",%{TIMESTAMP_ISO8601}\u001b\[0m$
更多解释:
我相信这种行为会发生,但不会发生。
1找到触发器 [0m [[31merror [0m] [0mFailed:总计100, 失败4,错误0,传递96 [0m
2一旦找到它,它将接受并在下一行的开头添加。由于日志的第一部分仍然匹配,它将再次添加标记,然后再次将其发送到多行 [0m [[31merror [0m] [0mFailed:总计100, 失败4,错误0,传递96 [0m [0m [[0minfo [0m] [0m [36mSuites:完成29,中止0 [0m [0m]
3它将有第一个,第二个,......,直到找到带有时间戳的日志并打破多行。下一个日志不会随标签一起添加。
[0m[[31merror[0m] [0mFailed: Total 100, Failed 4, Errors 0, Passed 96[0m [0m[[0minfo[0m] [0m[36mSuites: completed 29, aborted 0[0m[0m [0m[[31merror[0m] [0mTotal time: 368 s, completed 2016-09-22 13:43:52[0m