使用 Azure Resource Graph 识别因服务停用而受影响的资源

本文介绍当工作流由 Service Health 停用事件触发时,应如何将该信号关联到受影响的资源。 如果已通过 API、工作簿或建议窗格使用Azure 顾问停用建议,请直接使用这些通道获取受影响的资源详细信息(如果可用)。

概念模型:信号→操作

Azure服务 责任
信号 Azure 服务运行状况 宣布服务停用(跟踪 ID、时间线)
加入 Azure Resource Graph 将信号与修正数据相关联
Action Azure 顾问 标识受影响的资源和指南

Azure Resource Graph充当服务生命周期感知和执行之间支持的集成点。

何时使用 ARG 与 Advisor API

  • 当工作流从服务运行状况停用跟踪 ID 开始,且你需要将该信号关联到跨订阅的受影响资源时,请使用 ARG
  • 当您已在使用弃用建议,并且需要受影响资源的详细信息时,请使用 顾问 API/工作簿/建议 窗格。

Prerequisites

  • 对目标 Azure 订阅的访问权限
  • 访问 Azure Resource Graph Explorer
  • 熟悉基本的 *Kusto 查询语言(KQL)
  • Azure 公有云适用范围(如果适用于与当前公开指南相同的渠道支持)
  • 跟踪 ID 源 (工作流中的来源)
  • 报道注意事项 (受影响的资源可用性不全面)
  • 对目标订阅的读取者访问权限
  • ARG 资源管理器 或等效的 ARG 执行路径

注释

此模式取决于 Azure Resource Graph 中是否已提供受支持的弃用元数据。

使用的数据源

ARG 表 说明
ServiceHealthResources 服务退役生命周期事件
AdvisorResources 服务退役建议
{
  "id": "/providers/Microsoft.Advisor/metadata/e877d6d4-e952-4f8a-a4c4-5f90e5ac1da9",
  "name": "e877d6d4-e952-4f8a-a4c4-5f90e5ac1da9",
  "type": "microsoft.advisor/metadata",
  "properties": {
    "recommendationTypeId": "e877d6d4-e952-4f8a-a4c4-5f90e5ac1da9",
    "recommendationSubCategory": "ServiceUpgradeAndRetirement",
    "resourceMetadata": {
      "action": {
        "recommendedActionButtonText": "",
        "actionApplicabilityScope": "",
        "isRecommendedAction": false,
        "description": null,
        "actionType": "Blade",
        "extensionName": "HubsExtension",
        "actionId": "051cfb90-f2d9-4efa-a2ac-fe7a6ead9d4e",
        "caption": null,
        "bladeName": "ResourceMenuBlade",
        "metadata": {
          "id": "{resourceId}"
        }
      },
      "singular": "Availability test",
      "plural": "Availability tests"
    },
    "exposedMetadataProperties": {
      "SupportedSDKLanguages": null,
      "AdditionalColumns": null,
      "CostSavingInfo": null,
      "Tip": null
    },
    "recommendationCategory": "HighAvailability",
    "supportedResourceType": "microsoft.insights/webtests",
    "recommendationImpact": "Medium",
    "detailedDescription": "To ensure you can continue to run single-step availability tests in your application insights resources, transition to standard tests. Ping tests are removed from your resources. ",
    "recommendationScope": "Public",
    "potentialBenefits": "Avoid potential disruptions and use new capabilities",
    "recommendationDataSourceQuery": "resources | where type == 'microsoft.insights/webtests' and properties.Kind == 'ping' | project subscriptionId, id",
    "learnMoreLink": "https://azure.microsoft.com/updates?id=transition-to-using-standard-tests-for-singlestep-availability-testing-in-azure-monitor-application-insights-by-30-september",
    "displayName": "The URL ping test capability of the application insights feature for Azure Monitor is being retired.",
    "priorityScore": 0.94,
    "lastRefreshed": "2026-06-23T10:57:47.3066458Z",
    "language": "en",
    "actions": [
      {
        "recommendedActionButtonText": "",
        "actionApplicabilityScope": "",
        "isRecommendedAction": false,
        "description": "Transition to using standard tests",
        "actionType": "Document",
        "actionId": "654f0880-edd0-4eea-9265-d2153628e197",
        "caption": "Transition to using standard tests",
        "isPostfixRequired": false,
        "documentLink": "/azure-monitor/app/availability?tabs=standard"
      }
    ],
    "recommendationIngestionType": "Automated",
    "label": "The URL ping test capability of the application insights feature for Azure Monitor is being retired.",
    "sourceProperties": {
      "serviceRetirement": {
        "retirementFeatureName": "Single URL Ping Test",
        "retirementDate": "2026-09-30T00:00:00Z",
        "serviceHealth": {
          "trackingIds": [
            "3KYM-7_G"
          ],
          "ashUrls": [
            "https://app.azure.com/h/3KYM-7_G/"
          ]
        }
      }
    }
  }
}

查询:与服务运行状况事件联接(完整信号 + 操作视图)

// Get Service Retirement metadata mappings: TrackingId -> RecommendationTypeId
advisorresources
| where type == "microsoft.advisor/metadata"
| extend props = parse_json(properties)
| where props.recommendationCategory == "HighAvailability"
| where props.recommendationSubCategory == "ServiceUpgradeAndRetirement"
| where isnotempty(props.sourceProperties.serviceRetirement.serviceHealth.trackingIds)
| mv-expand trackingId = props.sourceProperties.serviceRetirement.serviceHealth.trackingIds
| extend trackingId = tostring(trackingId)
| extend recommendationTypeId = tostring(props.recommendationTypeId)
| distinct trackingId, recommendationTypeId
| join kind=inner (
    // Get active Service Retirement recommendations: RecommendationTypeId -> impacted resources
    advisorresources
    | where type == "microsoft.advisor/recommendations"
    | extend props = parse_json(properties)
    | where props.extendedProperties.recommendationSubCategory == "ServiceUpgradeAndRetirement"
    | where isempty(props.tracked)
    | where tostring(props.platformState) == "New"
    | extend recommendationTypeId = tostring(props.recommendationTypeId)
    | extend resourceId = tolower(tostring(props.resourceMetadata.resourceId))
    | distinct recommendationTypeId, resourceId, subscriptionId
) on recommendationTypeId
| join kind=inner (
    // Get Service Health event details
    servicehealthresources
    | where type =~ "microsoft.resourcehealth/events"
    | extend props = parse_json(properties)
    | where tostring(props.EventType) == "HealthAdvisory"
    | extend trackingId = tostring(props.TrackingId)
    | extend title = tostring(props.Title)
    | extend status = tostring(props.Status)
    | extend retirementDate = todatetime(props.ImpactMitigationTime)
    | distinct trackingId, ['title'], status, retirementDate, subscriptionId
) on trackingId
| distinct resourceId, ['title'], retirementDate, status, trackingId

查询示例载荷

{
  "resourceId": "/subscriptions/f2a74056-fc6e-41fd-ae49-248688b52f01/resourcegroups/rg-loadtesting/providers/microsoft.storage/storageaccounts/rgloadtestinga4ee",
  "title": "Retirement notice: Migrate your legacy Azure general-purpose v1 account to a general-purpose v2 account",
  "retirementDate": "2026-10-13T00:00:00Z",
  "status": "Active",
  "trackingId": "XTKT-BW8"
}

如何运行查询

  1. 使用跟踪 ID 标识事件

    每个Azure 服务运行状况事件都具有唯一的跟踪 ID。

    • 此 ID 连接与该事件相关的所有更新和事件。
    • 使用它快速查找所有相关消息并跟踪进度,直到问题得到解决。
  2. 在 Resource Graph 资源管理器中运行查询

    若要检索有关事件或相关资源的详细信息,请在Azure Resource Graph资源管理器中运行提供的查询。

  3. 查看结果中的关键信息

    运行查询(或检查 API)时,请查找以下重要详细信息

    • 服务运行状况状态
    • 跟踪编号
    • 受影响的资源
    • 停用日期
    • 停用功能
    • 任何其他建议的详细信息
  4. 检查Azure 顾问中受影响的资源

    还可以在Azure门户中查看受影响的资源。

    1. 转到Azure 顾问
    2. 打开“可靠性”部分
    3. 按子类别筛选 = ServiceUpgradeAndRetirement

然后,按照建议的操作措施来解决或消除停用带来的影响。

有什么作用

  • 以编程方式标识受服务停用影响的资源。
  • 退休准备情况仪表板和报告。
  • 使用逻辑应用或 Runbook 实现用于跟踪的自动修复。
  • 无需针对每个团队设置关联逻辑,即可实现统一的客户模式。

总结

  • Azure 服务运行状况告诉你正在改变什么
  • Azure 顾问告诉你该怎么做
  • Azure Resource Graph使用支持的平台功能连接这两个。

此模式还可用于维护、安全公告和重大更改。

详细信息