如何获取近7天每小时TriggersStarted触发次数的准确KQL查询
正确获取过去7天每小时TriggersStarted触发次数的KQL查询
原查询的问题在于:
- 使用
datetime_part("Hour", TimeGenerated)仅提取了一天中的小时数(0-23),会将7天内同一小时的数据合并,无法得到每个具体小时的触发次数 - 最后一步
summarize bn = min(count_)进一步聚合了结果,丢失了所有小时维度的信息
基础实现(仅统计有触发记录的小时)
使用bin()函数将时间按小时分箱,确保每个分组对应一个独立的小时时间段:
AzureMetrics | where TimeGenerated between (ago(7d) .. now()) // 覆盖过去7天到当前的所有时间 | where MetricName == "TriggersStarted" | summarize TriggersCount = count() by HourBin = bin(TimeGenerated, 1h) // 按小时分箱并统计次数 | sort by HourBin asc // 按时间升序排列
完整实现(包含无触发的小时,补0)
如果需要确保输出完整的168个小时(即使某小时没有触发也显示0),需要先生成过去7天的所有小时序列,再与统计结果左连接:
// 生成过去7天的所有小时时间序列 let timeRange = range HourBin from ago(7d) to now() step 1h; // 统计每个小时的触发次数 let triggerStats = AzureMetrics | where TimeGenerated between (ago(7d) .. now()) | where MetricName == "TriggersStarted" | summarize TriggersCount = count() by HourBin = bin(TimeGenerated, 1h); // 左连接补全空小时的0值 timeRange | left join triggerStats on HourBin | project HourBin, TriggersCount = coalesce(TriggersCount, 0) // 空值替换为0 | sort by HourBin asc
说明
bin(TimeGenerated, 1h):将时间戳向下取整到最近的小时,确保每个分组对应一个完整的小时区间range函数生成连续的小时序列,保证覆盖过去7天的所有168个小时coalesce(TriggersCount, 0):将没有触发记录的小时的计数替换为0,避免结果中缺失小时数据
内容的提问来源于stack exchange,提问作者Nikhil Babu Battula
相关产品推荐
相关产品推荐

