To check service health in Azure, read the Service Health events for your subscriptions: service issues, planned maintenance, health advisories and security advisories. Service Health shows only what affects the subscriptions and regions you use, and the sensitive parts of a security advisory need more than the Reader role.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of every Service Health event across your enabled subscriptions, active ones first. |
| Admin centre | Following an incident as it happens, with its updates and the resources it affects. |
| Altivane | Recommended for regular reviews, with each notice's services and regions in a workbook. |
Before you start
Use an account with the Reader role, or higher, on each subscription: that is enough to see Service Health events. The sensitive fields of a security advisory, such as the resources it affects, need Owner, Contributor or a custom role with the Security Advisory permissions, and billing updates need Owner or Contributor.
Know what is left out. Emerging issues aren't tied to a subscription, so Azure Resource Graph doesn't have them, and Microsoft says query results update within about 5 minutes. The examples read and export; they don't create alerts or change anything. The script's finally block disconnects the account and clears its saved Azure contexts.
Option 1
Check service health with PowerShell
Install the modules once. The script queries the ServiceHealthResources table in Resource Graph across the enabled subscriptions, follows every page of results, and saves 1 row for each event in each subscription.
Install-Module -Name Az.Accounts, Az.ResourceGraph -Repository PSGallery -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-AzAccount -ErrorAction Stop
try {
$subscriptionIds = @(
Get-AzSubscription | Where-Object State -eq 'Enabled' | Select-Object -ExpandProperty Id
)
if ($subscriptionIds.Count -eq 0) {
Write-Output 'No enabled subscriptions are available to this account.'
return
}
$query = @(
'ServiceHealthResources'
'| where type =~ "Microsoft.ResourceHealth/events"'
'| project id, subscriptionId,'
'eventType = tostring(properties.EventType), status = tostring(properties.Status),'
'level = tostring(properties.EventLevel), title = tostring(properties.Title),'
'trackingId = tostring(properties.TrackingId),'
'impactStart = todatetime(tolong(properties.ImpactStartTime)),'
'impactMitigation = todatetime(tolong(properties.ImpactMitigationTime)),'
'lastUpdate = coalesce(todatetime(tolong(properties.LastUpdateTime)),'
'todatetime(properties.LastUpdateTime))'
'| order by id asc'
) -join ' '
$rows = [System.Collections.Generic.List[object]]::new()
$skipToken = $null
do {
$arguments = @{ Query = $query; Subscription = $subscriptionIds; First = 1000 }
if ($skipToken) { $arguments.SkipToken = $skipToken }
$page = Search-AzGraph @arguments
foreach ($record in $page.Data) { $rows.Add($record) }
$skipToken = $page.SkipToken
} while ($skipToken)
if ($rows.Count -eq 0) {
Write-Output 'No Service Health events were found for the enabled subscriptions.'
} else {
$active = @($rows | Where-Object status -eq 'Active')
$rows | Sort-Object @{ Expression = { $_.status -eq 'Active' }; Descending = $true },
@{ Expression = 'lastUpdate'; Descending = $true } |
Select-Object eventType, status, level, title, trackingId, impactStart,
impactMitigation, lastUpdate, subscriptionId |
Export-Csv -Path './service-health.csv' -NoTypeInformation -Encoding utf8
Write-Output "$($rows.Count) events saved, $($active.Count) active."
}
} finally {
Disconnect-AzAccount | Out-Null
}The CSV holds each event's type, status, level, title, tracking ID, impact times and last update, for each subscription it touches. The query converts the times with todatetime(tolong()), as Microsoft's sample queries do. eventType is ServiceIssue, PlannedMaintenance, HealthAdvisory or SecurityAdvisory, among others. The same samples count planned maintenance and advisories as current until their mitigation time passes, so read impactMitigation as well as status for those.
Option 2
Check Service Health in the Azure portal
- Sign in to the Azure portal with an account that can read the subscriptions.
- Search for Service Health and open it.
- Select Service issues, Planned maintenance, Health advisories and Security advisories in turn to see what is current for your subscriptions.
- Select an event for its summary and updates, and open Impacted Resources for the resources it affects.
- Select Health history for events that ended in the last 90 days.
Service Health suits following an incident while it is open. Leave alerts alone unless you mean to add one: a Service Health alert is a new rule in the subscription. For a record of every notice across subscriptions, use PowerShell or Altivane.
Option 3 ยท Recommended for regular reviews
Check service health with Altivane
- Open Altivane and choose the tenant.
- Run the Azure Service Health report.
- Open the Excel workbook and find Azure service health: Azure's notices for the subscriptions, active ones first, then the latest update first.
- Read Kind for Service issue, Planned maintenance, Health advisory or Security advisory, and Services for the services and regions each notice touches.
Each row also gives the notice's level and tracking ID, with when its effect starts and ends and its last update in local time. A notice that touches 2 subscriptions has a row for each, with the same tracking ID. The report needs a tenant signed in with a certificate and the Reader role for Altivane on the subscriptions.
Contact usCommon questions
How is Service Health different from the Azure status page?
The Azure status page is a global view of outages with a wide effect. Service Health is tailored to your subscriptions and regions, and also includes planned maintenance and advisories.
Why does a security advisory say access is required?
Its sensitive fields, such as the resources it affects, need Owner, Contributor or a custom role with the Security Advisory permissions. With Reader or Monitoring Reader you see the title, summary and updates only.
Are Service Health events in the activity log too?
Yes, in the activity log's Service Health category, which Azure keeps for 90 days: filter the activity log by event category to see them. An export of administrative operations alone, such as the one in how to export the activity log in Azure, leaves them out.
Microsoft references
Technical references checked on 7 November 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.