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

如何在Azure资源图谱浏览器中计算所有资源的可用率?

解决方案

一、可在资源图谱浏览器实现的KQL脚本修改方案

你可以通过KQL的窗口函数关联状态变更的前后记录,计算单资源的停机时长并汇总,最终得到可用率。以下是完整的修改后脚本:

// 自定义监控时间范围,示例为过去7天
let start_time = ago(7d);
let end_time = now();
healthresourcechanges
| where id contains "/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
// 过滤指定时间段内的变更记录,同时转换时间戳为datetime类型
| where todatetime(properties.changeAttributes.timestamp) between (start_time..end_time)
| project 
    resourceId = tostring(properties.targetResourceId),
    resourceGroup,
    subscriptionId,
    resourceType = type,
    timeStamp = todatetime(properties.changeAttributes.timestamp),
    currentState = properties.changes['properties.availabilityState'].newValue
// 按资源分组,按时间升序排序,获取下一次变更的时间和状态
| partition by resourceId (
    sort by timeStamp asc
    | extend nextChangeTime = next(timeStamp), nextState = next(currentState)
)
// 筛选所有进入不可用状态的记录(停机起始点)
| where currentState == "Unavailable"
// 计算单次停机时长:有恢复记录则用恢复时间减停机开始时间,无恢复记录则用监控结束时间减开始时间
| extend singleDowntime = case(
    nextState == "Available" and isnotempty(nextChangeTime), nextChangeTime - timeStamp,
    end_time - timeStamp
)
// 按资源汇总总停机时长,保留资源基础信息
| summarize 
    totalDowntime = sum(singleDowntime),
    resourceGroup = take_any(resourceGroup),
    subscriptionId = take_any(subscriptionId),
    resourceType = take_any(resourceType)
    by resourceId
// 计算可用率,格式化输出
| extend 
    totalMonitorDuration = end_time - start_time,
    availabilityRate = round(100 * (totalMonitorDuration - totalDowntime) / totalMonitorDuration, 2)
| project 
    subscriptionId,
    resourceGroup,
    resourceId,
    resourceType,
    totalDowntime = format_timespan(totalDowntime),
    totalMonitorDuration = format_timespan(totalMonitorDuration),
    availabilityRate = strcat(availabilityRate, "%")
| order by availabilityRate asc

脚本关键逻辑说明:

  1. 时间范围定义:通过start_time和end_time快速调整监控周期;
  2. 时间类型转换:将字符串格式的时间戳转为datetime,支持时间差计算;
  3. 分组关联后续记录:用partition by resourceId按资源分组,结合next()函数获取每条停机记录的后续恢复时间;
  4. 边界情况处理:针对监控周期内未恢复的资源,用监控结束时间计算停机时长;
  5. 可用率计算:基于总监控时长和总停机时长,计算百分比格式的可用率。

该脚本可直接在Azure资源图谱浏览器中运行,所有用到的KQL函数均属于资源图谱支持的Kusto子集。

二、其他可选工具

如果资源图谱的功能无法满足你的进阶需求,还可以选择以下工具:

  • Azure Monitor Log Analytics:将Resource Health数据导出至Log Analytics工作区后,可运行同款KQL脚本,还能配置告警、创建可用性仪表盘;
  • Power BI:连接Azure资源图谱作为数据源,通过Power Query或DAX函数完成计算,生成可视化的可用性报表;
  • Azure Resource Graph API:通过API批量拉取状态变更数据,用Python、PowerShell等语言自行处理计算,适合自动化集成或定制化需求。

内容的提问来源于stack exchange,提问作者Akip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:38