如何在Azure日志中使用Kusto查询语言(KQL)创建多自定义指标时间图表并解决散点图无法连线问题
嘿,我来帮你搞定这两个Azure日志KQL可视化的问题——这俩场景我之前实操时也踩过坑,咱们一步步捋清楚:
一、如何创建多自定义指标的时间图表?
要在同一张时间图里展示多个自定义指标,核心是让KQL输出结构化的时间-指标名-指标值格式,这样可视化工具才能识别并生成多系列折线。具体步骤如下:
- 先通过
extend计算你的自定义指标,比如从日志里提取成功/失败操作数、响应时长分位数等; - 用
bin()按时间桶(比如1小时、5分钟)聚合每个指标的数值; - 关键一步:用
unpivot把多列的指标转成“指标名-指标值”的键值对结构,让可视化工具能自动识别多个数据系列。
举个实际的KQL示例(以AzureActivity日志为例):
AzureActivity | where TimeGenerated > ago(7d) // 计算两个自定义指标:成功操作数、失败操作数 | extend SuccessFlag = iff(ActivityStatus == "Success", 1, 0) | extend FailureFlag = iff(ActivityStatus == "Failed", 1, 0) // 按1小时时间桶聚合指标 | summarize TotalSuccess = sum(SuccessFlag), TotalFailure = sum(FailureFlag) by bin(TimeGenerated, 1h) // 转成多系列所需的结构 | unpivot MetricValue for MetricName in (TotalSuccess, TotalFailure)
执行完这个查询后,在Azure Monitor的可视化面板选择「时间图表」,把TimeGenerated设为X轴,MetricValue设为Y轴,MetricName设为数据系列,就能看到两条分别对应成功/失败数的连线了。
二、如何把散点图转成连线式时间图?
散点图的出现大多不是功能限制,而是KQL查询逻辑或可视化配置的问题,常见原因和解决方法:
原因1:时间维度没有连续聚合或排序
如果你的查询没有用bin()做时间桶聚合,而是直接按原始TimeGenerated(精确到秒/毫秒)分组,或者没有按时间排序,可视化工具会把每个离散时间点当成独立的散点,无法连成线。
解决方法:
- 必须用
bin(TimeGenerated, <时间间隔>)做时间桶聚合,确保数据是按固定时间间隔排列的; - 最后加上
| sort by TimeGenerated asc,强制让数据按时间顺序输出。
示例修正后的查询:
// 错误写法(会出散点):没有bin和排序 AzureActivity | where TimeGenerated > ago(1d) | extend Latency = DurationMs | summarize AvgLatency = avg(Latency) by TimeGenerated // 正确写法(会出连线图): AzureActivity | where TimeGenerated > ago(1d) | extend Latency = DurationMs | summarize AvgLatency = avg(Latency) by bin(TimeGenerated, 10m) | sort by TimeGenerated asc
原因2:可视化面板配置错误
有时候查询没问题,但可视化工具默认选了散点模式。你需要:
- 在Azure Monitor的可视化设置里,确认选择的是「时间图表」类型,而非「散点图」;
- 检查X轴是否绑定了
TimeGenerated字段,Y轴绑定指标值; - 如果是多指标场景,确保「数据系列」字段选了你的指标名称列(比如上面的
MetricName)。
额外技巧:用make-series生成连续时间序列
如果某些时间桶没有数据,默认summarize会跳过这些桶,导致连线中断。这时可以用make-series强制生成连续的时间序列,空值补0:
AzureActivity | where TimeGenerated > ago(7d) | extend SuccessFlag = iff(ActivityStatus == "Success", 1, 0) // 生成连续的时间序列,空桶补0 | make-series TotalSuccess = sum(SuccessFlag) default=0 on TimeGenerated from ago(7d) to now() step 1h // 展开数组成单行时间点 | mvexpand TimeGenerated, TotalSuccess | sort by TimeGenerated asc
内容的提问来源于stack exchange,提问作者sam0673
相关产品推荐
相关产品推荐

