You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找未关联/孤立的Azure警报行动组

获取Azure孤立行动组(未关联警报规则)的方法

PowerShell 方法

  1. 登录Azure账号:
Connect-AzAccount
  1. 遍历所有订阅,收集所有行动组信息:
$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
        }
    }
}
  1. 收集所有警报规则关联的行动组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
  1. 筛选并输出孤立行动组:
$orphanedActionGroups = $allActionGroups | Where-Object { $linkedActionGroupIds -notcontains $_.ActionGroupId }
$orphanedActionGroups | Format-Table SubscriptionId, ActionGroupName, ActionGroupId

Azure CLI 方法

  1. 登录Azure账号:
az login
  1. 导出所有订阅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
  1. 收集所有警报规则关联的行动组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
  1. 筛选孤立行动组(需安装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 方法

  1. 获取Azure AD访问令牌用于API授权。
  2. 遍历所有订阅,调用行动组列表API:
    • 端点:GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Insights/actionGroups?api-version=2021-09-01
  3. 调用两类警报规则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
  4. 对比行动组ID集合与关联ID集合,筛选出未被关联的行动组。

注意:Graph Query目前不支持Azure Monitor的行动组和警报规则资源,无法通过Graph获取这类数据。

内容的提问来源于stack exchange,提问作者Jayendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:47:12