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

Azure,Azure Monitor

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

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

このアラート処理ルールをPowerShellを使って設定する事が出来ます。
例えば特定のリソース切り替え処理を実施する場合にアラートを発生させたくない場合とかもあるかと思います。
アラート処理ルール設定した後に切り替えをするとアラート発生させる事無く一連の流れをPowerShellで出来たりします。

今回はアラート処理ルールの作成、有効無効の切り替え、削除までをPowerShell使ってやってみました。
併せてAutomationアカウントでの実行環境準備をやってみました。

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

スポンサーリンク

アラート処理ルールをPowerShell使って作成確認

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

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

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

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

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

アラート処理ルール作成

アラート処理ルールで指定するScopeはリソース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 Portalで作成したアラート処理ルールを確認する

先ほど作成したアラート処理ルールをAzure Portalで確認してみます。

アラート処理ルールの確認
Azure Monitorにあるアラート処理ルールで確認します。作成されている事が確認出来ました。
常時抑制するアラート処理ルールが作成されている事が確認出来ました。

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

フィルターも指定出来ます

Set-AzAlertProcessingRule実行時には一緒にフィルターを指定する事も出来ます。
”アラートルール名に起動と言う文字列が含まれた場合”と言うフィルターの設定を行ってみます。

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

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

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

 

スケジュール設定も出来ます

スケジュール設定する事も出来ます。
特定の時刻(日本時間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ステータスを変更する事で無効化、有効化が出来ます。

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

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

アラート処理ルールのステータスによって有効化無効化させる

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

    • 主な内容
      • Get-AzAlertProcessingRuleでアラート処理ルールの情報を取得して$alertprocessingruleに格納
      • アラート処理ルールのステータスはEnabledに含まれるので$alertprocessingrule.Enabledを$aprstatusに確認尾
      • IF文で$aprstatusの値を判断し処理を実行
      • メッセージにアラート処理ルールのステータスを表示する
アラート処理ルール有効化と無効化を1つの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’)

Automationアカウントを使う場合の注意点

AutomationアカウントのRunbookでも実行させる事が出来ますが1点注意点があります。
Get-AzAlertProcessingRule等のコマンドはAz.AlertsManagementモジュールに含まれるのですが、デフォルトではこのモジュールはAutomationアカウントには存在していません。
追加が必要になります。

Az.AlertsManagementの追加
Automationアカウントでモジュールの追加を選択します。
モジュールの追加でギャラリーを選択します。
ギャラリーでAz.AlertsManagementを選択します。
ランタイムバージョンを指定してモジュールを追加します。

最後に

アラート処理ルールをPowerShell使って作成や無効化等が出来ました。
AutomationアカウントのRunbook等でも使えるので他の処理と併せて無駄なアラート通知が減らす事が出来そうでした。運用時には非常に役立ちそうだと思いました。