运行查询查找时差

Running query to find time difference

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

我希望能够 运行 查询以便找到以下内容。 1. 运行查询和搜索AC_Down警报。获取每个主机名并搜索 AC_UP 以获取 AC_Down 警报后的时间。计算 Down 和 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_" 前缀。