An Azure personalized recommendation engine that helps users follow best practices to optimize Azure deployments.
Hello Ashish Javiya,
Yes, you can get Resource Name + Subscription Name + Resource Type for retirements, but only for retirements where Microsoft publishes Impacted Resources. If the retirement advisory only contains subscription‑level scope (no impacted resources payload), then an Azure Resource Graph (ARG) query can only show SubscriptionId (and not the specific resource IDs/names).
The supported way to see resource‑level mapping is the Impacted Resources view for retirements (and it can be exported to CSV).
- Best source for “which resource is attached to this retirement”
In the Azure portal, the Impacted Resources tab located in the Health advisories panel displays the resources affected by a retirement event. The example here illustrates how the tab highlights a retirement scenario with impacted resources.
They're shown in the Impacted Resources tab.
Service Health provides the following information on resources impacted by a Retirement.
2. Azure Resource Graph KQL: retirement events (subscription-level)
Microsoft publishes sample ARG queries for Service Health retirements using the ServiceHealthResources table (events). This returns retirement events across subscriptions, including title/summary and mitigation time (often used as the “retirement date” in these events).
ServiceHealthResources
| where type =~ 'Microsoft.ResourceHealth/events'
| extend eventType = properties.EventType, eventSubType = properties.EventSubType
| where eventType == "HealthAdvisory" and eventSubType == "Retirement"
| extend status = properties.Status
, retirementTitle = properties.Title
, trackingId = properties.TrackingId
, retirementSummary = properties.Summary
, retirementDate = todatetime(tolong(properties.ImpactMitigationTime))
| where retirementDate > now()
| project trackingId, subscriptionId, status, retirementTitle, retirementSummary, retirementDate
This is why you currently only see subscriptionId, this table is the event, not the impacted resource list.
- Azure Resource Graph KQL: get Impacted Resources (resource-level)
When impacted resource analysis exists, Service Health exposes it via an impacted resources endpoint/table (documented as Service Health Impacted Resources / microsoft.resourcehealth/events/impactedresources).
Query pattern: Events → join → impacted resources → join subscription name
Use this pattern to produce what you asked for:
Resource Name | Subscription Name | Resource Type | Retirement Date | Retirement Description
// 1) Retirement events (one row per retirement advisory per subscription)
let Retirements =
ServiceHealthResources
| where type =~ 'Microsoft.ResourceHealth/events'
| extend eventType = tostring(properties.EventType),
eventSubType = tostring(properties.EventSubType)
| where eventType == "HealthAdvisory" and eventSubType == "Retirement"
| extend trackingId = tostring(properties.TrackingId),
RetirementDescription = tostring(properties.Title),
RetirementSummary = tostring(properties.Summary),
RetirementDate = todatetime(tolong(properties.ImpactMitigationTime))
| project trackingId, subscriptionId, RetirementDate, RetirementDescription, RetirementSummary;
// 2) Subscription name lookup
let Subs =
ResourceContainers
| where type == "microsoft.resources/subscriptions"
| project subscriptionId, SubscriptionName = name;
// 3) Impacted resources (only available when Microsoft publishes the impacted list)
ServiceHealthResources
| where type =~ "microsoft.resourcehealth/events/impactedresources"
| extend trackingId = tostring(properties.TrackingId)
, ResourceName = tostring(properties.ResourceName)
, ResourceType = tostring(properties.ResourceType)
, ResourceGroup = tostring(properties.ResourceGroup)
, Region = tostring(properties.Region)
| project trackingId, subscriptionId, ResourceName, ResourceType, ResourceGroup, Region
| join kind=innerunique Retirements on trackingId, subscriptionId
| join kind=leftouter Subs on subscriptionId
| project ResourceName,
SubscriptionName,
ResourceType,
RetirementDate,
RetirementDescription
| order by RetirementDate asc
Resource Containers join Because subscription name is not guaranteed in every event row — the standard ARG approach is to join with the subscriptions container table.
Reference: https://learn.microsoft.com/en-us/azure/governance/resource-graph/concepts/query-languageIn your case some advisories show “BV retiring” but you can’t map to a resourceTwo common reasons are as below:
- Impacted resource analysis isn’t available for that retirement (so only subscription/service scope is shown). The Service Retirement workbook explicitly notes it contains information for a subset of services and that not every retirement has impacted resource analysis.
- The advisory is service/feature level rather than a specific ARM resource instance (so “resource name” isn’t meaningful).
In those cases, your output will naturally stop at: TrackingId | SubscriptionId | RetirementDate | Title/Summary (and maybe “impacted services”), but not per-resource names.
As an alternative If your goal is an operational report, the Service Retirement workbook is built for that: list/map view of retirements impacting your resources, retirement dates, impacted resources count, and export/share. And when impacted resources exist, you can drill down similarly (and filter by subscription/resource group/location).
- ARG retirement events query shows retirements scoped to subscriptions.
- To know which exact resources are affected, you must use Impacted Resources for retirements (Service Health) or query the impactedresources dataset — only available when that retirement publishes impacted-resource analysis.
In your current query results, do you see a trackingId (properties.TrackingId)? If yes, you can use it to reliably join events ↔ impacted resources as shown above.
Kindly let us know if the solution provided worked for you.
If you need any further assistance, please feel free to reach out.
If you found the comment helpful, please consider clicking "Upvote it".
Thanks,
Suchitra.