Splunk搜索-如何按组重置统计数据,而不是搜索的所有统计数据



我想按作业ID创建一个关于作业执行时间的报告。同一作业ID可以执行多次。日志会捕获作业每次启动的时间,但不会明确记录作业完成的时间。出于本报告的目的,我们将根据为作业捕获的最后一个日志来确定停止时间。为了实现这一点,我需要对捕获开始时间和最新日志时间的结果进行循环,以确定停止时间。

我遇到的问题是,当搜索检测到作业的另一个实例已启动时,我需要重置为作业ID捕获的任何统计信息。我尝试了reset_before/reset_after/reset_on_change来实现所需的结果,但这些操作会触发所有作业ID的统计信息重置,而不是重新执行的作业ID。这是一个原始数据的可视化视图和我试图生成的报告的示例。

输入数据样品

期望的结果样本报告

这是搜索的开始。。。我删除了重置统计的尝试,以避免造成任何混乱。这次搜索收回了数据,但我没有成功地在新作业开始时按作业ID重置统计数据。

index=jobs message="*Started*" OR message="*processing*" 
| rex field=message "@(?<JobID>[^(]+)"
| stats earliest(_time) as start, latest(_time) as stop by JobID
| eval starttime=strftime(start,"%Y-%m-%d %H:%M") 
| eval stoptime=strftime(stop,"%Y-%m-%d %H:%M") 
| eval runtime=round((stop-start)/60/60,2)
| table JobbID, starttime, stoptime, runtime

感谢您的帮助!

看看transaction命令:https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Transaction

另请查看此文档页面:https://docs.splunk.com/Documentation/SplunkCloud/latest/Search/Identifyandgroupeventsintotransactions

我重新创建了您的输入数据:https://i.stack.imgur.com/rbG67.jpg

现在我运行这个事务命令:

yourbasesearch
| sort -_time
| transaction Job_ID startswith=(Message=Started)

每当出现新的"消息=已启动"事件时,这将把您的事件分组为事务(分别针对每个作业ID(。

结果是:https://i.stack.imgur.com/R2RqS.jpg

你可以得到这样的停止时间:

| eval stop_time=_time+duration

最新更新