Azure,Monitor,PowerShell/Azure CLI
PowerShellを使った、アラート処理ルールの作成、有効化・無効化の切り替え、削除方法です。
Azure Monitorにはアラート処理ルールという機能があります。
特定のリソースやサブスクリプションに対してアラート通知の抑制やアクションルールの適用を行うことができます。
アラート処理ルール(公式サイト)
このアラート処理ルールは、PowerShellを使用して設定することが可能です。
たとえば、特定のリソース切り替え処理を実施する際にアラートを発生させたくない場合に役立ちます。
アラート処理ルールを設定してから切り替えを行うことで、アラートを発生させることなく一連の流れをPowerShellで実行することができます。
PowerShellを使った、アラート処理ルールの作成、有効化・無効化の切り替え、削除方法を確認しました。
こちらでアラート処理ルール自体の作成や説明をしています。併せて見て頂けると有難いです。
PowerShellを使ったアラート処理ルールの作成
アラート処理ルールに関するPowerShellコマンドレット
アラート処理ルールに関するPowerShellコマンドは4種類あります。
作成、取得、更新、削除です。
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などでも利用できるため、他の処理と組み合わせて無駄なアラート通知を減らすことができそうでした。
運用時には非常に役立ちそうだと思いました。
引き続き、いろいろ試してみたいと思います。
直接アクショングループ自体を有効、無効化する手順についてはこちらで紹介しています。