如何查找未关联/孤立的Azure警报行动组
获取Azure孤立行动组(未关联警报规则)的方法
PowerShell 方法
- 登录Azure账号:
Connect-AzAccount
- 遍历所有订阅,收集所有行动组信息:
$allActionGroups = @() $subscriptions = Get-AzSubscription foreach ($sub in $subscriptions) { Set-AzContext -Subscription $sub.Id | Out-Null $actionGroups = Get-AzActionGroup foreach ($ag in $actionGroups) { $allActionGroups += [PSCustomObject]@{ SubscriptionId = $sub.Id ActionGroupName = $ag.Name ActionGroupId = $ag.Id } } }
- 收集所有警报规则关联的行动组ID:
$linkedActionGroupIds = @() foreach ($sub in $subscriptions) { Set-AzContext -Subscription $sub.Id | Out-Null # 收集传统警报规则关联的行动组 $alertRules = Get-AzAlertRule foreach ($rule in $alertRules) { if ($rule.Action) { $linkedActionGroupIds += $rule.Action.ActionGroupId } } # 收集日志警报规则关联的行动组 $scheduledRules = Get-AzScheduledQueryRule foreach ($sRule in $scheduledRules) { if ($sRule.Actions) { $linkedActionGroupIds += $sRule.Actions.ActionGroupId } } } # 去重处理 $linkedActionGroupIds = $linkedActionGroupIds | Select-Object -Unique
- 筛选并输出孤立行动组:
$orphanedActionGroups = $allActionGroups | Where-Object { $linkedActionGroupIds -notcontains $_.ActionGroupId } $orphanedActionGroups | Format-Table SubscriptionId, ActionGroupName, ActionGroupId
Azure CLI 方法
- 登录Azure账号:
az login
- 导出所有订阅ID并收集行动组信息:
az account list --query "[].id" -o tsv > subs.txt while read sub; do az monitor action-group list --subscription $sub --query "[].{SubscriptionId:'$sub', Name:name, Id:id}" -o json >> all_action_groups.json done < subs.txt
- 收集所有警报规则关联的行动组ID:
> linked_action_groups.txt while read sub; do # 传统警报规则 az monitor alert rule list --subscription $sub --query "[].actions[].actionGroupId" -o tsv >> linked_action_groups.txt # 日志警报规则 az monitor scheduled-query-rule list --subscription $sub --query "[].actions[].actionGroupId" -o tsv >> linked_action_groups.txt done < subs.txt # 去重 sort linked_action_groups.txt | uniq > unique_linked_groups.txt
- 筛选孤立行动组(需安装jq工具处理JSON):
jq --slurpfile linked unique_linked_groups.txt 'map(select(.Id | IN($linked[] | .) | not))' all_action_groups.json > orphaned_action_groups.json
REST API 方法
- 获取Azure AD访问令牌用于API授权。
- 遍历所有订阅,调用行动组列表API:
- 端点:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/actionGroups?api-version=2021-09-01
- 端点:
- 调用两类警报规则API收集关联行动组ID:
- 传统警报规则:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/alertrules?api-version=2016-03-01 - 日志警报规则:
GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/scheduledQueryRules?api-version=2022-06-01
- 传统警报规则:
- 对比行动组ID集合与关联ID集合,筛选出未被关联的行动组。
注意:Graph Query目前不支持Azure Monitor的行动组和警报规则资源,无法通过Graph获取这类数据。
内容的提问来源于stack exchange,提问作者Jayendran
相关产品推荐
相关产品推荐

