【Azure】App Serviceで500エラーが発生したらメールを通知する アラートルール/アクショングループ/アラート処理ルール
概要
AppServiceにデプロイしたWeb APIで、特定のエラーが発生したときにメールを通知するように設定します。
Azure Monitorのアラートには、アラートルール,アクショングループ,アラート処理ルールという3つのコンポーネントがあります。このハンズオンを通して、この3つについても理解を深めていきたいと思います。
前提
簡単なWebAPIが作成済みで、App Serviceにデプロイされていることが前提です。
また、わざと例外を発生させるためのエンドポイントを追加しています。アラートを発生させる際にはこのエンドポイントを叩きます。
// Warn / Error 系のログを出力するテストエンドポイントを追加
[HttpGet("test-exception")]
public IActionResult TestException()
{
try
{
_logger.LogInformation("Information: About to throw an exception for testing purposes.");
throw new InvalidOperationException("テスト例外");
}
catch (Exception ex)
{
_logger.LogWarning("Warning: 例外が発生しました。");
_logger.LogError(ex, "Error: 例外が発生しました。");
_logger.LogCritical("Critical: 例外が発生しました。");
return StatusCode(500, "時間を置いて試してください。");
}
}
App Serviceの作成やApp Serviceへのデプロイは、下記の記事をご覧ください。
アラートに関する用語の整理
まずは、アラートルール,アクショングループ,アラート処理ルールについて整理します。
アラートルール
ある条件が満たされたときにアラートを発生させるためのルールです。
アクショングループと紐付けることで、アラート発生時に指定したアクションを実行することができます。例えば、特定のHTTPエラーが発生したときにメール通知するなどです。
条件にはさまざまなメトリクスが使用できます。

アクショングループ
アラートがトリガーされたときに実行するアクションのセットのことを指します。
指定できるアクションは2種類あります。
1つは通知タイプ(メール/SMS/プッシュ通知/音声)で、もう1つはアクションタイプ(Automation Runbook/Azure関数/ITSM/Webhook/イベントハブ/ロジックアプリ)です。
アクショングループは、アラートルールやアラート処理ルールと紐付ける形で使用します。

アラート処理ルール
アラートルールにより発生したアラートに対して、さらに追加条件やアクションを適用するためのルールです。発生したアラートをさらにカスタマイズするためのルールというイメージでしょうか。
例えば、「計画メンテナンス中や夜間ははアラートを通知しない」、「重要度の高いエラーを特定のチームやメンバーに追加で通知する」などを実現できます。
アラートルールを作成する
では、実際にアラートルールを作成していきましょう。
前述の通り、App ServiceにデプロイしているAPIで500エラーが発生したら、メール通知をするように設定してきます。
Azure Portalのモニター > アラートルール > 作成を選択し、アラートルールを作成します。
まず、スコープタブで、対象のApp Serviceを選択します。

つづいて、条件タブでアラートを発生させる条件を選択します。
| 条件 | ||
|---|---|---|
| シグナル名 | Http Server Errors | |
| しきい値 | Static | |
| 集計の種類 | 合計 | 平均/最大値/最小/合計/カウントのいずれから選択 |
| 演算子 | 次の値より大きい | |
| しきい値 | 1 |
次に、アクショングループを指定します。ここでは新規でメール送信のためのアクショングループを作成します。
既にアクショングループを作成していれば、既存のアクショングループを選択することも可能です。
| アクショングループの作成: 基本 | ||
|---|---|---|
| リージョン | グローバル | |
| アクショングループ名 | email-notification-group | |
| 表示名 | email-noti-g | メールやSMS内で使用されるアクショングループ名 |
| アクショングループの作成: 通知 | |
|---|---|
| 通知タイプ | 電子メール/SMS メッセージ/プッシュ/音声 |
| 電子メール | 任意のメールアドレス |
| 名前 | 任意 |
| アクショングループの作成: アクション | ||
|---|---|---|
| アクションタイプ | Automation Runbook/Azure関数/ITSM/Webhook/イベントハブ/セキュリティで保護されたWebhook/ロジックアプリ から選択 | 通知以外のアクションをトリガーしたい場合はこちらから選択します。 |
| 今回はメール送信のみのため選択しません |
上記の設定でアクショングループを作成します。
今作成したアクショングループが選択された状態となりました。

最後に詳細タブの内容を入力します。
| 詳細 | |
|---|---|
| 重大度 | 1 - エラー |
| アラートルール名 | az104-test-api-server-error-rule |
上記の設定で、アラートルールを作成します。

アラートや通知が発生するかを確認する
実際に、API側で500エラーを起こします。
テスト用に500エラーを発生させるためのエンドポイントがありますので、ブラウザにこのエンドポイントを打ち込みます。

Azure Portalのモニター > アラートを確認すると、先ほど設定したルールによるアラートが出ていることが確認できました。

また、メール通知も来ています。

アラート処理ルールを作成する
続いて、アラート処理ルールを作成し、毎日20時〜翌朝7時の時間帯にメール通知を行わないようにしていきます。
Azure Portalのモニター > アラート処理ルール > 作成を選択し、対象のAppServiceを指定します。

次に、ルールの設定タブで通知を表示しないを選択します。

スケジュールタブで、アラートが発生しても通知をしない時間帯(毎日20時〜翌朝7時)を指定します。

詳細タブでリソースグループやこのアラート処理ルールの名前を指定します。

上記の設定で、アラート処理ルールを作成します。

20時〜7時はメール通知されないことを確認する
今設定したアラート処理ルールにより、20時〜7時の間は通知がされないはずです。
20時〜7時の時間帯に、例外を発生させるエンドポイントをブラウザのアドレスバーに打ち込みます。

しばらく時間を置いて確認しましたが、アラートも発生せず、メール通知もされませんでした。

7時以降に再度例外を発生させてみると、今度はアラートが発生し、通知メールもちゃんと届きました。

以上、Azureにおけるアラート、特にアラートルール、アクショングループ、アラート処理ルールを理解するためのハンズオンでした。
Discussion