Identify impacted resources for service retirements by using Azure Resource Graph

This article explains what to do when your workflow starts from a Service Health retirement event and you need to correlate that signal to impacted resources. If you already consume Azure Advisor retirement recommendations through API, workbook, or the recommendations pane, use those channels directly for impacted-resource details where available.

Conceptual model: Signal → Action

Layer Azure service Responsibility
Signal Azure Service Health Announces service retirement (tracking ID, timeline)
Join Azure Resource Graph Correlates the signal with remediation data
Action Azure Advisor Identifies impacted resources and guidance

Azure Resource Graph serves as the supported integration point between service lifecycle awareness and execution.

When to use ARG vs. Advisor API

  • Use ARG when your workflow starts from a Service Health retirement tracking ID and you need to correlate that signal to impacted resources across subscriptions.
  • Use the Advisor API/workbook/recommendations pane when you already consume retirement recommendations and need impacted-resource details where available.

Prerequisites

  • Access to target Azure subscriptions
  • Access to Azure Resource Graph Explorer
  • Familiarity with basic *Kusto Query Language (KQL)
  • Azure public cloud scope (if applicable to the same channel support as the current public guide)
  • Tracking ID source (where it comes from in the workflow)
  • Coverage caveat (impacted-resource availability isn't comprehensive)
  • Reader access to target subscriptions
  • ARG Explorer or the equivalent ARG execution path

Note

This pattern depends on the supported retirement metadata already being available in Azure Resource Graph.

Data sources used

ARG table Description
ServiceHealthResources Service retirement lifecycle events
AdvisorResources Service retirement recommendations
{
  "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/"
          ]
        }
      }
    }
  }
}

Query: Join with Service Health events (Full Signal + Action View)

// 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

Query sample payload

{
  "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"
}

How to run the query

  1. Use the Tracking ID to identify an incident

    Each Azure Service Health incident has a unique Tracking ID.

    • This ID connects all updates and events related to that incident.
    • Use it to quickly find all relevant messages and track progress until the issue is resolved.
  2. Run the query in Resource Graph Explorer

    To retrieve details about incidents or related resources, run the provided query in Azure Resource Graph Explorer.

  3. Review the key information in the results

    When you run the query (or check APIs), look for these important details:

    • Service Health status
    • Tracking ID
    • Impacted resources
    • Retirement date
    • Retiring feature
    • Any additional recommended details
  4. Check the impacted resources in Azure Advisor

    You can also view affected resources in the Azure portal.

    1. Go to Azure Advisor
    2. Open the Reliability section
    3. Filter by Subcategory = ServiceUpgradeAndRetirement

From there, follow the recommended actions to address or remediate the retirement impact.

What this enables

  • Programmatic identification of resources impacted by a service retirement.
  • Retirement readiness dashboards and reporting.
  • Automated remediation for tracking using Logic Apps or runbooks.
  • Consistent customer patterns without per-team correlation logic.

Summary

  • Azure Service Health tells you what is changing.
  • Azure Advisor tells you what to do.
  • Azure Resource Graph connects the two using supported platform capabilities.

This pattern can also be used for maintenance, security advisories, and breaking changes.

For more information