概要
一般に以下の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個のみしか作成できないので注意が必要。
上限に達するようであれば、アクティビティログアラートではなく、ログアラートでのアラートルールを実装する。