第一个事件
06:09:17:362 INFO com.x.y.ConnApp - GET请求
<<p>第二个事件/strong>06:09:17:48 INFO com.a.b.Response - Output Status Code: 200
现在我想为每个请求计算这两个事件的持续时间。我研究了splunk和Stack Overflow的解决方案,但仍然没有得到正确的结果。
简单的答案是transaction
命令,尽管它有一些缺点。首先,该命令可能会占用大量资源。另一种可能是"贪婪"。在这种情况下,多个请求可能被视为单个事务。我们将处理maxevents
选项的第二个问题。对于第一种情况,除了避免使用transaction
外,我们无能为力。
index=foo ("Making a GET Request" OR "Output Status Code:")
| transaction maxevents=2 startswith="Making a GET Request" endswith="Output Status Code:"
| table duration
另一个选项使用streamstats
命令来计算相邻事件之间的差异。这应该比transaction
执行得更好。
index=foo ("Making a GET Request" OR "Output Status Code:")
| streamstats window=2 range(_time) as duration
``` Erase the duration field for start events. ```
| eval duration = if(searchmatch("Making a GET Request"),"", duration)
| table _raw duration
两个查询都假定不同请求的开始和结束事件没有混合。
对于当前的日志消息,将由相同来源链接的日志分组将会很棘手(想象多个调用生成连续的生成GET消息)
在这种情况下,我建议在日志消息 中散布一个'关联Id'。那么您可以准确地识别由同一源触发的消息
这涉及到应用程序日志功能的改变(你可以搜索以下库:log4/mcd/sleuth)