2

我需要找到两个事件之间的持续时间。我查看了和 Stack Overflow 上的解决方案,但仍然无法计算。

两者sentToSaveSaveDoc已经格式化了时间戳,这就是我使用 case 函数的原因。我能够看到字段填充了它们的时间戳,但我无法让该Duration字段填充持续时间 - 它根本不填充。

需要一些关于如何获得的帮助Duration- 任何建议?这是我的搜索:

(index=souce1 dept=qvc event="sentToSave") OR (index=source dept=save area=saveDoc)
| eval saveDocTime=case(area="saveDoc", TimeStamp), sentToSaveTime=case(event="sentToSave", TimeStamp)
| eval Duration=saveDocTime-sentToSaveTime
| stats values(Duration) as Duration earliest(sentToSaveTime) as sentToSaveTime latest(saveDocTime) as saveDocTime  by emailRequest
| where isNotNull(sentToSaveTime) AND isNotNull(saveDocTime)
4

2 回答 2

3

时间戳必须是整数(纪元)形式才能进行比较。使用该strptime函数将它们从字符串转换为整数,然后可以减去它们。

正如@Anant Naugai 所说,如果您提供一些示例事件,那么我们可以更具体。

于 2021-04-01T07:35:49.880 回答
1

我怀疑没有数据的原因DurationsaveDocTimesentToSaveTime字段来自不同的事件。(您的第一行暗示了不同的索引)。

由于eval并行处理每个结果,Duration因此当前计算的结果将始终未定义,因为您总是尝试使用不存在的值执行计算(一个或另一个取决于它尝试的事件类型。

现在,您的stats事件将字段一起拉到每个emailRequest. 因此,如果您将用于计算 Duration 的 eval 移到stats命令之后,您将有一个持续时间。

于 2021-04-05T02:59:19.903 回答