我想按作业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