1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AzureのNoCodeツールを活用して、Slackへのサービス正常性アラート通知を構築

Last updated at Posted at 2021-07-28

#はじめに

Azure Logic AppsAzure Monitor をうまく活用すると、コードを1行も書かずにSlackへのサービス正常性アラートを構築することが可能です。
サービス正常性アラートはFaaSで構築するのがトレンドですが、Azureはツールが充実しており、NoCodeツールを組み合わせるだけで構築可能です。
本エントリでは構築手順を3ステップで纏めています。

方針

こちらの公式リファレンスを参考に、

・サービス正常性アラート(Service Health Alert)でAzureリソースのヘルスチェックを行う
・アラートを検知した場合、Logic Apps 経由でSlackへ通知する

の方針で構築していきます。

ざっくりですが、下記イメージです。
構成.jpg

Logic Apps を経由するには一つ理由があります。
サービス正常性アラートをそのままSlackへ通知すると、下記の状態となり非常に読みづらいです。
そのため、Logic Apps でアラート確認に必要な情報に絞り込んでからSlackへ通知します。

未加工のAlert.jpg

構築

下記3ステップで構築していきます。

Logic Apps構築
・サービス正常性アラートを作成
・アラートへLogic Apps定義を組み込む

1. Logic Apps 構築

の手順通り実施。
※2021年7月20日時点の記述にて

手順 7 以降は Microsoft Teams への連携手順なのでスキップし、下記手順を実行ください。

ロジックアプリデザイナー上で変更が必要なのは
・JSONの解析
・メッセージの投稿
の2箇所です。

ロジックアプリデザイナー.jpg

JSONの解析を編集

まず、JSONの解析 にて、サービス正常性アラートのJSON加工設定を追加します。

{
    "properties": {
        "data": {
            "properties": {
                "context": {
                    "properties": {
                        "condition": {
                            "properties": {
                                "allOf": {
                                    "items": {
                                        "properties": {
                                            "dimensions": {
                                                "type": "array"
                                            },
                                            "metricName": {
                                                "type": "string"
                                            },
                                            "metricNamespace": {
                                                "type": "string"
                                            },
                                            "metricValue": {
                                                "type": "integer"
                                            },
                                            "operator": {
                                                "type": "string"
                                            },
                                            "threshold": {
                                                "type": "string"
                                            },
                                            "timeAggregation": {
                                                "type": "string"
                                            },
                                            "webTestName": {}
                                        },
                                        "required": [
                                            "metricName",
                                            "metricNamespace",
                                            "operator",
                                            "threshold",
                                            "timeAggregation",
                                            "dimensions",
                                            "metricValue",
                                            "webTestName"
                                        ],
                                        "type": "object"
                                    },
                                    "type": "array"
                                },
                                "windowSize": {
                                    "type": "string"
                                }
                            },
                            "type": "object"
                        },
                        "conditionType": {
                            "type": "string"
                        },
                        "description": {
                            "type": "string"
                        },
                        "id": {
                            "type": "string"
                        },
                        "name": {
                            "type": "string"
                        },
                        "portalLink": {
                            "type": "string"
                        },
                        "resourceGroupName": {
                            "type": "string"
                        },
                        "resourceId": {
                            "type": "string"
                        },
                        "resourceName": {
                            "type": "string"
                        },
                        "resourceType": {
                            "type": "string"
                        },
                        "severity": {
                            "type": "string"
                        },
                        "subscriptionId": {
                            "type": "string"
                        },
                        "timestamp": {
                            "type": "string"
                        }
                    },
                    "type": "object"
                },
                "properties": {},
                "status": {
                    "type": "string"
                },
                "version": {
                    "type": "string"
                }
            },
            "type": "object"
        },
        "schemaId": {
            "type": "string"
        }
    },
    "type": "object"
}

メッセージの投稿を追加・編集

Logic Apps上でSlackへのメッセージ通知定義を作成します。

下記内容で、Logic AppsからSlackへのメッセージ通知設定を構築してください。

メッセージの投稿.jpg

Slackへのメッセージ通知設定.jpg

初回の連携のみ、Logic AppsとSlackの連携設定が必要です。
ダイアログの手順に従って連携を行ってください。
正常に連携できるとSlackBotより下記通知が届きます。
SlackとLogicAppsの連携.png

2. サービス正常性アラートを作成

下記手順でAzure Portal上でサービス正常性アラートを構築していきます。

  • Azure Portalの上部の検索窓からから、サービス正常性 を検索、選択
  • 左のメニューの一番下、 アラート > 正常性アラート を選択
  • サービス正常性アラートの追加 を選択
  • 対象のサブスクリプションとサービス、リージョン、通知対象のイベントを選択
  • アクション > アクション グループの選択 から、先程作成したアクショングループを選択
  • アラートルールの詳細 から、ルール名、説明、リソースグループを選択
  • アラート ルールの作成 をクリック

3.アラートルールへLogic Apps定義を組み込む

最後に、ステップ2で構築したサービス正常性アラートへLogic Appsの定義を組み込んでいきます。

アクショングループへLogic Appsを設定

アラートルールへLogicApp組み込み.jpg

アラートルールの設定例です。
アラートルール.jpg

動作確認

加工されたアラート通知がSlackへ届けばOKです!

動作確認.jpg

#最後に

以上、Azure Logic AppsAzure Monitor を活用して3ステップでSlackへのサービス正常性アラートを構築する手順でした。
NoCodeツールだけでここまでできるのは便利ですよね!

私が所属している株式会社クアンドではエンジニア募集中です。
地域産業のアップデートをミッションに、製造業や建設業など「現場」の課題を解決するためのアプリケーションを開発しています!
私もフルフレックス&フルリモートで働いています。
興味のある方はWantedlyの募集ページをご覧ください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?