如何在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
脚本关键逻辑说明:
- 时间范围定义:通过
start_time和end_time快速调整监控周期; - 时间类型转换:将字符串格式的时间戳转为
datetime,支持时间差计算; - 分组关联后续记录:用
partition by resourceId按资源分组,结合next()函数获取每条停机记录的后续恢复时间; - 边界情况处理:针对监控周期内未恢复的资源,用监控结束时间计算停机时长;
- 可用率计算:基于总监控时长和总停机时长,计算百分比格式的可用率。
该脚本可直接在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
相关产品推荐
相关产品推荐

