azure-application-insights - 获取 Kusto / Application Insights 中每个 bin 的并发请求数
问题描述
我想知道在 Azure Application Insights 中任何给定的秒数当前正在执行多少请求。
例如,如果请求 1 从 10:00:00 开始并在 10:00:03 结束(时间戳为 10:00:00,持续时间为 3999ms),则应将其计入 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-expand运算符扩展列表,以便您可以计算并发会话。这是一个例子:
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()函数来确定会话的开始时间
推荐阅读
- python - 创建一个绘图循环
- python - 将图像大小调整为 28x28 以使我的 Tensorflow 模型正常工作
- r - 以 dttm 格式更改时间序列 x 轴的范围
- php - 我的自动回复功能不起作用可能是什么问题?
- pyspark - pyspark 中的 log4j 自定义字段
- excel - 我需要在 SharePoint 上的 2 个工作簿之间建立连接
- amazon-web-services - 存储从 AWS SES 发送的电子邮件
- vba - 如何在exel的选定列中查找特定单词
- sql - 用于计数记录的 SQL 查询,其中 count = 1 且 Value <50
- android - 如何检查用户是否为我的应用阻止了互联网?