获取Kusto/Application Insights中每个bin的并发请求数



我想知道在Azure Application Insights中,当前有多少请求在任意一秒执行。

例如,如果请求1在10:00:00开始并在10:00:03结束(时间戳为10:00:00,持续时间为399ms(,则应将其计入10:00:00、10:00:01、10:00:02和10:00:03 的行中

输出应该类似于:

| timestamp               | count_ |
| ----------------------- | ------ |
| 0000-00-00T00:00:00.000 | 254    |
| 0000-00-00T00:00:00.001 | 345    |
| 0000-00-00T00:00:00.002 | 216    |

我想我可能可以对秒表使用join运算符,但我不能使用类似on $right.timestamp >= $left.timestamp and $right.timestamp + duration < $left.timestamp的运算符,kusto用join: Only equality is allowed in this context.回答。

那么,如何通过时间戳bin获取并发请求(或依赖项(呢?

假设您可以告诉每个会话的开始和结束,那么当会话处于活动状态时,您可以使用range((函数根据bin大小生成适用的日期时间值,然后使用mv扩展运算符扩展列表,以便对并发会话进行计数。这里有一个例子:

let sampleEvents = datatable(sessionId:string,eventType:string, timestamp:datetime)
["A", "start", datetime(2020-02-29T10:32:52.1953143Z),
"A", "end", datetime(2020-02-29T10:33:08.1953143Z),
"B", "start", datetime(2020-02-29T10:32:57.1953143Z),
"B", "end", datetime(2020-02-29T10:33:10.1953143Z)];
let startEvents = sampleEvents | where eventType =="start" | project startTime = timestamp, sessionId;
startEvents
| lookup kind=leftouter (sampleEvents | where eventType =="end" | project endTime=timestamp, sessionId) on sessionId
| extend endTime = iif(isempty(endTime), now(), endTime)
| extend sessionActiveTimeInOneSecondInterval = range(startTime, endTime, 1s)
| mv-expand sessionActiveTimeInOneSecondInterval to typeof(datetime)
| summarize count() by bin(sessionActiveTimeInOneSecondInterval, 1s) 

还可以考虑使用row_window_session((函数来确定会话的开始时间

最新更新