You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取近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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:40:28