PowerShellを使ったAzure Monitorアラート処理ルールの作成、無効化、削除方法

Azure,Monitor,PowerShell/Azure CLI

PowerShellを使った、アラート処理ルールの作成、有効化・無効化の切り替え、削除方法です。

Azure Monitorにはアラート処理ルールという機能があります。
特定のリソースやサブスクリプションに対してアラート通知の抑制やアクションルールの適用を行うことができます。

アラート処理ルール(公式サイト)

このアラート処理ルールは、PowerShellを使用して設定することが可能です。
たとえば、特定のリソース切り替え処理を実施する際にアラートを発生させたくない場合に役立ちます。
アラート処理ルールを設定してから切り替えを行うことで、アラートを発生させることなく一連の流れをPowerShellで実行することができます。

PowerShellを使った、アラート処理ルールの作成、有効化・無効化の切り替え、削除方法を確認しました。

こちらでアラート処理ルール自体の作成や説明をしています。併せて見て頂けると有難いです。

スポンサーリンク

PowerShellを使ったアラート処理ルールの作成

アラート処理ルールに関するPowerShellコマンドレット

アラート処理ルールに関するPowerShellコマンドは4種類あります。
作成、取得、更新、削除です。

処理 Azure PowerShell
作成 Set-AzAlertProcessingRule
取得 Get-AzAlertProcessingRule
更新 Update-AzAlertProcessingRule
削除 Remove-AzAlertProcessingRule

Set-AzAlertProcessingRuleを使ってアラート処理ルールを作成

アラート処理ルール作成には、Set-AzAlertProcessingRuleコマンドレットを使用します。

TEST-VM-01(リソースグループ名:Test-RG-01)という仮想マシンに対するアラート処理ルールを作成します。
アラート処理ルール名は、TEST-VM-01-AlertStopという名前にしています。

アラート処理ルールを作成

アラート処理ルールで指定するスコープは、リソースIDになります。
今回は、Get-AzVM コマンドを使って仮想マシンのリソースIDを取得しています。

AlertProcessingRuleType はルールの種類を指定する項目です。
抑止の場合は RemoveAllActionGroups を指定します。

Enabledで有効化または無効化を指定します。
Trueを指定すると有効になります。

# リソース指定
$resourcegroup = “Test-RG-01"
$vmname  = “TEST-VM-01"
$processingrulename = “TEST-VM-01-AlertStop"

# サブスクリプション指定

$subscription = “サブスクリプションID"
Set-AzContext -SubscriptionId $subscription

# 変数生成
$vm = get-azvm -resourcegroup $resourcegroup -name $vmname
$scope = $vm.id

# アラート処理ルールを作成
Set-AzAlertProcessingRule -ResourceGroupName $resourcegroup `
 -Name $processingrulename `
 -Scope $scope `
 -Enabled “True" `
 -AlertProcessingRuleType “RemoveAllActionGroups"

作成したアラート処理ルールを確認

作成したアラート処理ルールをAzureポータルで確認します。

アラート処理ルールの確認
アラート処理ルールで確認します。
常時抑制するアラート処理ルールが作成されていることが確認できました。

Get-AzAlertProcessingRuleでアラート処理ルールを確認

Get-AzAlertProcessingRuleコマンドレットで同じアラート処理ルールを確認してみます。
Get-AzAlertProcessingRuleの結果はリスト形式で表示されます。
Format-List(Fl)を使って、コマンドレット実行結果の詳細を確認することができます。

Get-AzAlertProcessingRuleの実行結果

Get-AzAlertProcessingRuleコマンドレットの実行結果

PS C:\> Get-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01"

Name Enabled LastModifiedAt LastModifiedBy Type
—- ——- ————– ————– —-
TEST-VM-01-AlertStop True 2022/04/17 1:17:10 ユーザー名 RemoveAllActionGroups

Get-AzAlertProcessingRuleコマンドレットの実行結果は、Format-Listで詳細表示した場合

PS C:\> Get-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01″ |Fl
Id : /subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.AlertsManagement/actionRules/TEST-VM-01-AlertStop
Name : TEST-VM-01-AlertStop
Description :
Enabled : True
Scopes : [“/subscriptions/サブスクリプションID/resourceGroups/Test-RG-01/providers/Microsoft.Compute/virtualMachines/TEST-VM-01"]
Tags :
Conditions :
Schedule :
CreatedAt : 2022/04/17 1:10:54
CreatedBy : ユーザー名
LastModifiedAt : 2022/04/17 1:17:10
LastModifiedBy : ユーザー名
AlertProcessingType : RemoveAllActionGroups

※コマンドレット例は、アラート処理ルール名が"TEST-VM-01-AlertStop"、リソースグループ名が"TEST-RG-01″の場合です。

アラート処理ルールのフィルターも指定できる

Set-AzAlertProcessingRule実行時には、フィルターを一緒に指定することもできます。
フィルターの指定には、FilterAlertRuleNameのパラメータを利用します。
“アラートルール名に '起動’ という文字列が含まれる場合"というフィルターを設定します。

アラート処理ルールを作成(フィルター指定)

FilterAlertRuleName でアラートルール名のフィルターを作成できます。
{Contains:起動}で、"起動"という文字列を含むという指定ができます。

# リソース指定
$resourcegroup = “Test-RG-01"
$vmname  = “TEST-VM-01"
$processingrulename = “TEST-VM-01-AlertStop"
$FilterAlertRuleName = {Contains:起動}

# サブスクリプション指定

$subscription = “サブスクリプションID"
Set-AzContext -SubscriptionId $subscription

# 変数生成
$vm = get-azvm -resourcegroup $resourcegroup -name $vmname
$scope = $vm.id

# アラート処理ルールを作成
Set-AzAlertProcessingRule -ResourceGroupName $resourcegroup `
 -Name $processingrulename `
 -Scope $scope `
 -Enabled “True" `
 -AlertProcessingRuleType “RemoveAllActionGroups" `
 -FilterAlertRuleName $FilterAlertRuleName

実行結果を見るとアラートルール名のフィルターが作成されている事が確認できました。

 

ルールの適用スケジュールも設定できます

アラート処理ルールを適用する、スケジュールの設定もできます。
スケジュールの指定には、ScheduleTimeZone、ScheduleStartDateTime、ScheduleEndDateTimeのパラメータを利用しています。
特定の期間(日本時間で7月21日6時から9月21日6時まで)で設定します。

アラート処理ルールを作成(スケジュール指定)

ScheduleTimeZoneでTimeZoneの設定を行います。
日本時間の場合はTokyo Standard Timeと指定します。

ScheduleStartDateTimeとScheduleEndDateTimeで開始日時、終了日時を指定します。

# リソース指定
$resourcegroup = “Test-RG-01"
$vmname  = “TEST-VM-01"
$processingrulename = “TEST-VM-01-AlertStop"
$FilterAlertRuleName = {Contains:起動}
$TimeZone = “Tokyo Standard Time"
$StartTime = “2022-07-21 06:00:00"
$EndTime = “2022-09-21 06:00:00"

# サブスクリプション指定

$subscription = “サブスクリプションID"
Set-AzContext -SubscriptionId $subscription

# 変数生成
$vm = get-azvm -resourcegroup $resourcegroup -name $vmname
$scope = $vm.id

# アラート処理ルールを作成
Set-AzAlertProcessingRule -ResourceGroupName $resourcegroup `
 -Name $processingrulename `
 -Scope $scope `
 -Enabled “True" `
 -AlertProcessingRuleType “RemoveAllActionGroups" `
 -FilterAlertRuleName $FilterAlertRuleName `
 -ScheduleTimeZone $TimeZone `
 -ScheduleStartDateTime $StartTime `
 -ScheduleEndDateTime $EndTime

スケジュールで、ルールの適用期間が指定されています。

—広告—

PowerShellを使ったアラート処理ルールの有効化、無効化

Update-AzAlertProcessingRuleを使ってアラート処理ルールの有効/無効化

Update-AzAlertProcessingRule を使って、アラート処理ルールの Enabled ステータスを変更することで、無効化や有効化ができます。
Enabledのパラメーターを利用します。

アラート処理ルールの無効化、有効化

Falseを指定すると無効化、Trueを指定すると有効化

PS C:\> Update-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01" -Enabled “False"

Name Enabled LastModifiedAt LastModifiedBy Type
—- ——- ————– ————– —-
TEST-VM-01-AlertStop False 2022/04/17 1:16:15 ユーザー名 RemoveAllActionGroups

 

PS C:\> Update-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01" -Enabled “True"

Name Enabled LastModifiedAt LastModifiedBy Type
—- ——- ————– ————– —-
TEST-VM-01-AlertStop True 2022/04/17 1:17:10 ユーザー名 RemoveAllActionGroups

※コマンドレット例は、アラート処理ルール名が"TEST-VM-01-AlertStop"、リソースグループ名が"TEST-RG-01″の場合です。

PowerShellを使ってアラート処理ルールのステータスによって有効化無効化を切り替える

アラート処理ルールが有効の場合は無効化、無効の場合は有効化します。

    • 主な内容
      • Get-AzAlertProcessingRuleでアラート処理ルールの情報を取得して$alertprocessingruleに格納
      • アラート処理ルールのステータスはEnabledに含まれるので$alertprocessingrule.Enabledを$aprstatusに確認
      • IF文で$aprstatusの値を判断し処理を実行
      • メッセージにアラート処理ルールのステータスを表示
アラート処理ルール有効化と無効化を切り替えるPowerShell
 リソース指定
# リソース指定
$resourcegroup = “Test-RG-01"
$processingrulename = “TEST-VM-01-AlertStop"

# サブスクリプション指定
$subscription = “サブスクリプションID"
Set-AzContext -SubscriptionId $subscription

#ステータス取得
$alertprocessingrule = Get-AzAlertProcessingRule -Name $processingrulename -ResourceGroupName $resourcegroup
$aprstatus = $alertprocessingrule.Enabled

if ($aprstatus -eq “True")
{
#ステータスが有効の場合に無効化する
    Write-Output “$processingrulename のステータスは $aprstatus です。無効化処理を開始します。"
    Update-AzAlertProcessingRule -Name $processingrulename -ResourceGroupName $resourcegroup -Enabled “False"
} else {
# ステータスが無効の場合に有効化する
    Write-Output “$processingrulename のステータスは $aprstatus です。有効化処理を開始します。"
    Update-AzAlertProcessingRule -Name $processingrulename -ResourceGroupName $resourcegroup -Enabled “True"
}

PowerShellを使ったアラート処理ルールの削除

Remove-AzAlertProcessingRuleを使ってアラート処理ルールを削除できます。
削除後は"Not Found"となっていることを確認できます。

アラート処理ルールの削除
PS C:\> Remove-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01"

PS C:\> Get-AzAlertProcessingRule -Name “TEST-VM-01-AlertStop" -ResourceGroupName “TEST-RG-01"

Get-AzAlertProcessingRule: One or more errors occurred. (Operation returned an invalid status code 'NotFound’)

※コマンドレット例は、アラート処理ルール名が"TEST-VM-01-AlertStop"、リソースグループ名が"TEST-RG-01″の場合です。

—広告—

最後に

PowerShellを使ってアラート処理ルールの作成や有効化、無効化の切り替えなどができました。
AutomationアカウントのRunbookなどでも利用できるため、他の処理と組み合わせて無駄なアラート通知を減らすことができそうでした。
運用時には非常に役立ちそうだと思いました。

引き続き、いろいろ試してみたいと思います。

直接アクショングループ自体を有効、無効化する手順についてはこちらで紹介しています。

スポンサーリンク