📖

AzureのアラートをAzure DevOpsに反映させる方法

2024/01/25に公開

またまたご無沙汰しております。
Jemiyaです。

以前、AzureのアラートをMicrosoft Teams(今後は)にも通知させる方法をお伝えしましたが、今度はAzure DevOpsに通知させ、チケット起票をさせる方法について、お伝えしたいと思います!
もちろん条件として、しっかりとAzure DevOpsのテナントとそのプロジェクトを用意する必要があります!

手順

まずはAzureにログインし、Logic Appsを作成しますが、以前の記事にその方法を載せてありますので、今回は省略します。
Logic Appsの作成方法がわからない方は下記のURLをご参照ください。

https://zenn.dev/articles/ae65d85127b6e3/

Logic Appsを作成すると、以下の画面が表示されるので、「HTTP要求の受信時」をクリックする。

下記のJSONをコピーしてください。
これは共通アラートスキーマとロジックアプリを統合させるためのJSONです。
※共通アラートスキーマ・・・さまざまな種類のアラート全体に標準化された拡張可能な JSON スキーマで、Webhook、Runbook、およびロジック アプリを通じたプログラムを使用した活用に最適です。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-common-schema-integrations

{
    "properties": {
        "data": {
            "properties": {
                "alertContext": {
                    "properties": {},
                    "type": "object"
                },
                "essentials": {
                    "properties": {
                        "alertContextVersion": {
                            "type": "string"
                        },
                        "alertId": {
                            "type": "string"
                        },
                        "alertRule": {
                            "type": "string"
                        },
                        "alertTargetIDs": {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        },
                        "description": {
                            "type": "string"
                        },
                        "essentialsVersion": {
                            "type": "string"
                        },
                        "firedDateTime": {
                            "type": "string"
                        },
                        "monitorCondition": {
                            "type": "string"
                        },
                        "monitoringService": {
                            "type": "string"
                        },
                        "originAlertId": {
                            "type": "string"
                        },
                        "resolvedDateTime": {
                            "type": "string"
                        },
                        "severity": {
                            "type": "string"
                        },
                        "signalType": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                }
            },
            "type": "object"
        },
        "schemaId": {
            "type": "string"
        }
    },
    "type": "object"
}

JSONをコピーしたら、「要求本文のスキーマ」にペーストする。
ここで「application/jsonに設定されているContent-Typeヘッダーを要求に忘れずに含めてください。」という吹き出しが表示されますが、「わかりました」と「今後表示しない」のどちらをクリックしても問題ありません。

下に「新しいステップ」の表示があるので、それをクリックする。

「ビルドイン」をクリックする。

「条件」をクリックする。

「動的なコンテンツの追加」をクリックする。

「monitorCondition」をクリックする。

下の画像のように表示されたら、右側のカラムを「次の値に等しい」を選択し、「Fired」を入力する。

Trueの「アクションの追加」をクリックする。

「操作を選択してください」からアクションから「Azure DevOps」と検索をかけて、「Azure DevOps」をクリックする。

「作業項目を作成する」をクリックする。

以下の項目を選択・入力する。

組織名:入力欄をクリックすれば、基本的に会社名とかが表示されるのでそれをクリックする。
プロジェクト名:対象のプロジェクト名を選択する。(これもDevOpsで用意する必要があります)
作業項目の種類:User Story (これもクリックすれば、出てきます)
タイトルには下記を入力しました。

【Problem】@{triggerBody()?['data']?['essentials']?['alertRule']}

説明には下記の内容を入力しました。
下記をコピペする。

<p>発生日時    :@{convertFromUtc(string(triggerBody()?['data']?['essentials']?['firedDateTime']), 'Tokyo Standard Time', 'yyyy/MM/dd HH:mm:ss')}<br>\n対象リソース  :@{triggerBody()?['data']?['essentials']?['alertTargetIDs']}<br>\nステータス   :@{triggerBody()?['data']?['essentials']?['monitorCondition']}<br>\n重要度     :@{triggerBody()?['data']?['essentials']?['severity']}<br>\n説明      :@{if(equals(triggerBody()?['data']?['essentials']?['description'], ''), '-', triggerBody()?['data']?['essentials']?['description'])}<br>\n値       :@{if(equals(triggerBody()?['data']?['essentials']?['monitoringService'], 'Platform'), first(triggerBody()?['data']?['alertContext']?['condition']?['allOf'])?['metricValue'], '-')}</p>

発生日時、対象リソース、ステータス、重要度、説明、値を抽出しました。
これを保存すれば、あとはロジックアプリ側で自動的に処理してくれます。
下の画像のように表示されれば、大丈夫です。

「Add new parameter」をクリックする。

「Assigned To」と「New」をクリックする。(一気に2つ選べますが、スクショは別です)

「Assigned To」に割り当てるメールアドレス(アカウント)を入力し、「State」に「New」を入力する。

ここまでの設定が終わったら、「保存」をクリックする。

次にアクショングループにもロジックアプリを結びつける設定をします。
アクショングループを紐づいているリソースを選択する。(VMでもDBでもなんでもいいです)
※アラートルールもアクショングループも設定してない場合は、以下のURLを参照してください。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-create-new-alert-rule?tabs=metric

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

アラートルールをクリックする。

設定してあるアラートルールをクリックする。(これもなんでもいいです)

「編集」をクリックする。

「アクショングループの編集」をクリックする。

対象のアクショングループのチェックボックスをクリックし、「選択」をクリックする。

対象のアクショングループをクリックする。

「アクションの種類」をドロップダウンする。

「ロジックアプリ」をクリックする。

名前を入力し、「編集」(ペンマーク)をクリックする。

サブスクリプション、リソースグループ、ロジックアプリに誤りがないことを確認し、「共通の警告スキーマを有効にします。」に「はい」の設定にする。その後、「OK」をクリックする。

「変更を保存」をクリックする。

わざとエラーを起こして通知を確認するため、400エラーを選択しました。
※400エラー:Webサーバで起きるエラーの種類の一つで、クライアントの要求に何らかの誤りや問題があり処理を完了できなかったことを示すもの。

演算子を「次の値以上」、しきい値を0にしました。

「保存」をクリックする。

その後、通知が飛ぶことが確認できたら、変更したアラートルールの設定を元に戻しましょう。
Azure DevOpsのBoardに起票されていたら、問題ないです!

以上。

ヘッドウォータース

Discussion