Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

Azureでのアラート

概要

一般に以下の3種類のアラートを使用する。

  • ログアラート
  • アクティビティログアラート
  • メトリック アラート

ログアラート

LogAnalyticsワークスペースのテーブルに保管されたログに対して、クエリを実行し、該当する文字列を含んだログや、閾値を超える値の数値が存在する場合にはアラートする。

例えば、WindowsのCPU使用率を監視する際には、次のようなクエリでログが存在するかどうか調べ、存在する場合にはアラートするということができる。

以下の例は、CPU使用率が80%以上となっているログを探すクエリで、PerfというLogAnalyticsワークスペースのテーブルに対してクエリを実行している。

同様の方法で文字列を含んだログを検索してアラートするといったこともできる。

Perf | where ObjectName == "Processor Information" and CounterName == "% Processor Time" and CounterValue > 80

アクティビティログアラート

アクティビティログアラートでは、ストレージアカウントを削除といった操作(アクション)に対してアラートを設定できる。

ストレージアカウントの削除の場合は、アクション名は次の通り。

Microsoft.Storage/storageAccounts/delete 既存のストレージ アカウントを削除します。

下記はアクションの一覧。

Azure リソース プロバイダーの操作 | Microsoft Learn

アクティビティログアラートはサブスクリプションあたり最大100個までしか作成できないので、上限に達するようであれば、アクティビティログアラートではなく、ログアラートでのアラートルールを実装する。

メトリックアラート

前述の通り、ログアラートでもCPU使用率などのメトリクスに対してアラートを設定できる。

ログアラートとメトリックアラートの一番の違いは、ログアラートがステートレスなのに対して、メトリックアラートがステートフルな点である。

ステートフルな警告は、条件が満たされたときに発生します。 次の表に示すように、条件が解決されるまで、もう一度発生したり、それ以上のアクションがトリガーされたりすることはありません。

Azure Monitor の警告の概要 - Azure Monitor | Microsoft Learn

メトリックアラートでは最大値や平均などの集計ができる点もログアラートと大きく異なる。

メトリックアラートでは、アラート設定対象となるメトリックが少なく、メトリックアラートで対応していない場合はログアラートで対応する、的な記述をどこかでみかけたが、VMのゲストメトリックにも対応しているので概ねカバーしているように思う。

Terraformでメトリックアラートを設定する場合には、メトリックの名前空間に注意が必要。

VMのホストメトリックに対するメトリックアラートを設定する場合は、名前空間が"Microsoft.Compute/virtualMachines"だが、ゲストメトリックの場合は"Azure.VM.Windows.GuestMetrics"である。

自分はこれで結構ハマった。ゲストメトリックに対してはアラート設定できないのかとすら思ったが、Azureポータルでは設定できたので、色々調べた結果、メトリックの名前空間の指定が間違っていた。

アラート上限数

サブスクリプションあたりで設定できるアラートの個数には制限がある。

前述の通り、アクティビティログアラートはサブスクリプションあたり100個のみしか作成できないので注意が必要。

上限に達するようであれば、アクティビティログアラートではなく、ログアラートでのアラートルールを実装する。

Azure Monitor サービスの制限 - Azure Monitor | Microsoft Learn