リソースが存在しないAzure Monitorのアラートルールを探す
Azureで仮想マシン等のリソースを削除した場合、一緒にAzure Monitorのアラートルールは削除されません。
そのままにしておくとリソースが存在しないアラートルールがゴミとして残ってしまいます。
そこで今回はリソースが存在しないアラートルールをPowerShellを使って抽出するサンプルを作成してみました。
- 1. リソースが存在しないアラートルールを探すPowerShellを作成
- 1.1. Azure Portalでリソースが存在ないアラートルールを確認するとエラーメッセージが表示される
- 1.2. アラートルールに関するPowerShellコマンドレット
- 1.3. Get-AzMetricAlertRuleV2でアラートルールの情報を確認
- 1.4. ScopesのリソースIDが存在するかをGet-AzResourceを使って確認
- 1.5. リソースが存在しないアラートルールを探すPowerShellサンプル
- 1.6. ScopesのリソースIDが複数存在する場合はカスタマイズが必要
- 1.7. アラートルールのスコープがリソースグループやサブスクリプションになる場合はカスタマイズが必要
- 2. リソースが存在しないアラートルールを探すPowerShellを試す
- 3. 最後に
リソースが存在しないアラートルールを探すPowerShellを作成
Azure Portalでリソースが存在ないアラートルールを確認するとエラーメッセージが表示される
Azure Portalでリソースが存在しないアラートルールを参照した場合にはこのようなエラーメッセージが表示されます。
【メッセージ例】
リソース”リソース名” は移動または削除されました。このアラート ルールの実行を継続するには、スコープを変更してください。
【画面表示例】
アラートルールに関するPowerShellコマンドレット
アラートルールに関してはシグナルの種類に応じて複数のコマンドレットが用意されています。
- リソース情報取得の場合
- Get-AzActivityLogAlert:シグナルの種類がアクテビティログの場合
- Get-AzMetricAlertRuleV2:シグナルの種類がメトリックの場合
- Get-AzScheduledQueryRule:シグナルの種類がログ検索の場合
今回はメトリックアラートを対象に実施しています。
Get-AzMetricAlertRuleV2でアラートルールの情報を確認
Get-AzMetricAlertRuleV2を実行してアラートルールの情報を取得してみます。
特定の仮想マシンをターゲットにCPU使用率のアラートを発生させるルールになります。
実行結果を見るとScopesにターゲットとなる仮想マシンのリソースID、IdにアラートルールのリソースIDが表示されている確認出来ます。
Get-AzMetricAlertRuleV2実行結果 | |
|
ScopesのリソースIDが存在するかをGet-AzResourceを使って確認
Get-AzMetricAlertRuleV2でアラートの詳細は表示されますがScopesのリソースIDが存在しているかどうかは確認出来ません。
Get-AzResourceを使うとAzureリソースの情報を取得する事が出来ます。
逆の言い方をするとエラーになる場合はAzureリソースが存在しないと言えます。
Get-AzResourceを使ってAzure MonitorアラートルールのScopesにあるリソースIDが存在するかどうかを確認する事が出来ます。
リソースが存在しないアラートルールを探すPowerShellサンプル
上記を踏まえてサンプルのPowerShellを作ってみます。Monitor-Test-RGと言うリソースグループを対象に実施しています。
-
- 内容
- Get-AzMetricAlertRuleV2でリソースグループに存在するアラートルールを取得
- Get-AzResourceでリソースが存在するかを確認
- IsNullOrEmptyでリソースの情報が存在しているかどうかを確認
- 内容
Get-AzMetricAlertRuleV2実行結果 | |
|
※パイプで繋ぐなどするともっとシンプルになります。
※サンプルではリソースグループを指定してます。Get-AzMetricAlertRuleV2のみで実行する事でサブスクリプション全体に対して実行する事が出来ます。
ScopesのリソースIDが複数存在する場合はカスタマイズが必要
今回のサンプルでは$alertlist.Scopes[0]として1番目のリソースIDが存在するかどうかのみを確認しています。
複数ある場合に適用する場合には$alertrule.Scopes.countとしてリソースIDの数を取得して確認するようなカスタマイズが必要になります。
アラートルールのスコープがリソースグループやサブスクリプションになる場合はカスタマイズが必要
今回のサンプルではGet-AzResource -ResourceIdでリソースの存在確認を実施しています。
この場合ResourceIdにリソースグループやサブスクリプションを指定するとGet-AzResource: Invalid format of the resource identifier. (Parameter 'idFromServer’)と言うエラーになります。
スコープにリソースグループやサブスクリプションを指定しているかどうかを識別した上でチェックするなどのカスタマイズが必要になります。
リソースが存在しないアラートルールを探すPowerShellを試す
今回のテスト環境
仮想マシン2台のうち1台削除して確認してみます。アラートルールは合計で4個作成しています。
-
- テスト環境
- リソースグループ(Monitor-Test-RG)に2台の仮想マシン(Monitor-TEST-VM-01、02)を作成
- それぞれの仮想マシンにCPU使用率とメモリ使用率のアラートルールを2つを設定
- アラートルール作成後に仮想マシン(Monitor-TEST-VM-02)を削除
- テスト環境
【アラートルール設定画面】
作成したPowerShellを実行してみる
先ほどのサンプルPowerShellをAlertRuleにリソースは存在するのか.ps1として保存し実行してみました。
リソースの存在確認が出来ている事が確認出来ました。
PowerShell実行結果 | |
|
最後に
非常にシンプルなサンプルですが、Azure Monitorアラートルールのリソースが存在するかどうかの確認をする事が出来ました。
定期実行させる事で不必要なリソースの洗い出しをする事が出来そうです。
今回はサンプルと言う事で非常に簡単に作っていますが、引き続き使い勝手が良くなるよう改善していきたいと思います。