🐈

App Service でCPU使用率が閾値を超えたら Slack へ通知してみる

2022/12/25に公開

はじめに

App Serviceを使用していて、メトリックがある一定の閾値を超えたらSlackへ通知をしてみたいということで、CPUの使用率が超えたらSlack へ通知してみようと思います。

以下の公式ドキュメントを参考にしながら作成してみます。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-logic-apps?tabs=send-email#create-a-service-health-alert

メトリックアラートの作成に関してはこちらを参照ください。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/tutorial-metric-alert

Slackに通知

リソースグループの作成

az group create -l japaneast -g appservice-cpu-alert

App Serviceの作成

こちらは適当に作成します。以下の記事を参照ください。

https://zenn.dev/4kzknt/articles/7a4495436b6b07

ロジックアプリの作成

以下の内容でロジックアプリを作成します。

logicapp

次に、 ワークフロー を作成します。

workflow

作成したワークフローを選択して、デザイナーを開きます。

desiner

トリガーの追加し、「コネクタとトリガーを検索する」で 要求 と入力して検索して、要求を選択します。
パラメータータブで、「サンプルのペイロードを使用してスキーマを生成する」に以下の JSON 貼り付けて、完了します。
そうすると「要求本文のJSONスキーマ」に値が入ります。

以下のJSONは公式ドキュメントを参照ください。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-metric-near-real-time#payload-schema

{
  "schemaId": "AzureMonitorMetricAlert",
  "data": {
    "version": "2.0",
    "status": "Activated",
    "context": {
      "timestamp": "2018-02-28T10:44:10.1714014Z",
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Contoso/providers/microsoft.insights/metricAlerts/StorageCheck",
      "name": "StorageCheck",
      "description": "",
      "conditionType": "SingleResourceMultipleMetricCriteria",
      "severity":"3",
      "condition": {
        "windowSize": "PT5M",
        "allOf": [
          {
            "metricName": "Transactions",
            "metricNamespace":"microsoft.storage/storageAccounts",
            "dimensions": [
              {
                "name": "AccountResourceId",
                "value": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Contoso/providers/Microsoft.Storage/storageAccounts/diag500"
              },
              {
                "name": "GeoType",
                "value": "Primary"
              }
            ],
            "operator": "GreaterThan",
            "threshold": "0",
            "timeAggregation": "PT5M",
            "metricValue": 1
          }
        ]
      },
      "subscriptionId": "00000000-0000-0000-0000-000000000000",
      "resourceGroupName": "Contoso",
      "resourceName": "diag500",
      "resourceType": "Microsoft.Storage/storageAccounts",
      "resourceId": "/subscriptions/1e3ff1c0-771a-4119-a03b-be82a51e232d/resourceGroups/Contoso/providers/Microsoft.Storage/storageAccounts/diag500",
      "portalLink": "https://portal.azure.com/#resource//subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Contoso/providers/Microsoft.Storage/storageAccounts/diag500"
    },
    "properties": {
      "key1": "value1",
      "key2": "value2"
    }
  }
}

次に、slackへのアラートアクションを追加します。「コネクションとアクションを検索する」でSlack と入力し、 Azureタブで検索する。アクションタブで メッセージの投稿を選択します。

slack Action

選択すると、サインインを求められますので、slack にサインインして、許可をしてください。許可した後、チャンネル名、メッセージテキストを設定できる画面に切り替わりますので、チャンネル名、メッセージを作成していきます。
今回は簡単に作成していきますので以下のようにします。

actionmessage

作成したら保存します。
これで Logic Appsでの設定は終わりです。

アクショングループの作成

次に Azure モニター にてアクショングループを作成します。 モニター -> アラート -> アクショングループを選択し、作成します。

アクショングループ作成をクリックし、

  • 基本タブでは適当に入力をしていただきます。
  • 通知タブでは何も入力作成をしなくて問題ないです。
  • アクションタブで、アクションタイプに「ロジックアプリ」を選択し、名前は適当に入力していただき、選択済みでは先ほど作成したロジックアプリを選択し、共通アラート スキーマを有効にします。を「いいえ」にします。

action group

上記設定後、作成します。
create action group

アラートの作成

App Service Plan -> 監視 -> メトリック で CPU percentage で 平均 を選択し、アラートを作成します。

alert setting

アラートのテスト

作成したアクショングループを選択し、テストタブよりテストを実施します。メトリックアラート(静的)を選択し、テストを実施すると以下のようにSlackに通知が飛びます。

alert setting

CPUに負荷をかけてSlackへ通知する

インスタンスへの負荷をかける方法につきましては、以下の記事を参照ください。

https://zenn.dev/4kzknt/articles/appservice-monitoring

CPUに負荷をかけて、CPU percentageが 80% を超えるとSlack へ以下のように通知されます。

test notificate to slack

さいごに

今回はSlackへの通知でしたが、Teamsへの通知だったり、メールでの通知もできますので、何かのメトリックでの通知に役立てればと思います。

Discussion