🍊

【Azure】App Serviceで500エラーが発生したらメールを通知する アラートルール/アクショングループ/アラート処理ルール

2024/04/27に公開

概要

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へのデプロイは、下記の記事をご覧ください。

https://zenn.dev/shimiyu/articles/053eddcd12fa32

https://zenn.dev/shimiyu/articles/8b17cee91cfa02

アラートに関する用語の整理

まずは、アラートルール,アクショングループ,アラート処理ルールについて整理します。

アラートルール

ある条件が満たされたときにアラートを発生させるためのルールです。

アクショングループと紐付けることで、アラート発生時に指定したアクションを実行することができます。例えば、特定のHTTPエラーが発生したときにメール通知するなどです。

条件にはさまざまなメトリクスが使用できます。

アクショングループ

アラートがトリガーされたときに実行するアクションのセットのことを指します。

指定できるアクションは2種類あります。

1つは通知タイプ(メール/SMS/プッシュ通知/音声)で、もう1つはアクションタイプ(Automation Runbook/Azure関数/ITSM/Webhook/イベントハブ/ロジックアプリ)です。

アクショングループは、アラートルールやアラート処理ルールと紐付ける形で使用します。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/action-groups

アラート処理ルール

アラートルールにより発生したアラートに対して、さらに追加条件やアクションを適用するためのルールです。発生したアラートをさらにカスタマイズするためのルールというイメージでしょうか。

例えば、「計画メンテナンス中や夜間ははアラートを通知しない」、「重要度の高いエラーを特定のチームやメンバーに追加で通知する」などを実現できます。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-processing-rules?tabs=portal

アラートルールを作成する

では、実際にアラートルールを作成していきましょう。

前述の通り、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