如何计算splunk中没有共同元素的两个事件之间的时间间隔



第一个事件

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)

相关内容

  • 没有找到相关文章

最新更新