Azure Monitorのアラート処理ルールをPowerShell使って作成、無効化、削除
Azure,Monitor,PowerShell/Azure CLI
Azure Monitorにアラート処理ルールという機能があります。
特定のリソースやサブスクリプションに対してのアラート通知抑制やアクションルールの適用をすることが出来ます。
アラート処理ルール(公式サイト)
このアラート処理ルールをPowerShellを使って設定する事が出来ます。
例えば特定のリソース切り替え処理を実施する場合にアラートを発生させたくない場合とかもあるかと思います。
アラート処理ルール設定した後に切り替えをするとアラート発生させる事無く一連の流れをPowerShellで出来たりします。
今回はアラート処理ルールの作成、有効無効の切り替え、削除までをPowerShell使ってやってみました。
併せてAutomationアカウントでの実行環境準備をやってみました。
こちらでアラート処理ルール自体の作成や説明をしています。併せて見て頂けると有難いです。
アラート処理ルールをPowerShell使って作成確認
アラート処理ルールに関するコマンド
アラート処理ルールに関するPowerShellコマンドは4つです。作成、取得、更新、削除になります。
アラート処理ルールを作成する
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等でも使えるので他の処理と併せて無駄なアラート通知が減らす事が出来そうでした。運用時には非常に役立ちそうだと思いました。