运行查询以查找时差



我有一些设备将电源状态发送到 Azure 日志分析工作区。 如果电源打开,它会发送警报AC_UP如果电源断开,则AC_Down更改。 每个日志分析日志都包含时间戳、主机名、网络名称和状态。

我希望能够运行查询,以便可以找到以下内容。 1. 运行查询并搜索AC_Down警报。获取每个主机名,并在AC_Down警报之后的时间内搜索AC_UP。计算向下和向上之间的时间差,结果应显示以下内容。 主机名、时差、网络名称

以下是一些日志。

2019-07-17T12:15:21.493         LocationA   DeviceA AC_UP   2019-07-17T17:45:21.349 powerAlerts_CL      203a6c7d-48b7-415e-b5d3-67e815813aaf    RestAPI         
2019-07-17T12:17:07.294         LocationB   DeviceX AC_UP   2019-07-17T17:47:05.524 powerAlerts_CL      203a6c7d-48b7-415e-b5d3-67e815813aaf    RestAPI         
2019-07-17T12:28:27.321         LocationA   DeviceA AC_Down 2019-07-17T17:58:24.142 powerAlerts_CL      203a6c7d-48b7-415e-b5d3-67e815813aaf    RestAPI

假设每个设备一次只执行一个会话,我们可以尝试将每个开始事件与同一设备的下一个停止事件相匹配。

PowerAlerts_CL
| where Status == "AC_UP"
| project Location , Device ,StartTime = timestamp
| join kind= inner
(PowerAlerts_CL
| where status == "AC_Down"
| project Stoptime = timestamp , Device)
on Device
| extend duration = StopTime-StartTime
| where duration>0
| summarize arg_min(duration,*) by bin(StartTime,1s),Device

arg_min 选择每个组中持续时间最小的行,* 参数遍历所有其他列,尽管它在每个列名前面加上"min_"。

最新更新