noxi雑記

.NET、Angularまわりの小ネタブログ

ApplicationInsightsのアラートをTeamsに送信する(シンプルなWebhook)

ApplicationInsights には特定のログや Metrics を検知するとメールや SMS 、Webhook で通知するアラートの機能があります。Webhook 送信時の Body はカスタマイズ可能なので、 Teams のシンプルな方の Webhook に対してアラートを送信してみます。



アラートルールを定義する

ApplicationInsightsでクエリを作成する

Azure Portal でアラートルールを定義する ApplicationInsights を開きます。続いて画面左のタブにある「ログ(Analytics)」をクリックしてクエリ入力画面を開きます。

f:id:noxi515:20191104183102p:plain
ログ(Analytics)を開く

続いてこの画面でアラートルールの条件とするクエリを入力します。今回はサーバー上で発生した例外に対してアラートルールを作成してみたいと思いますので、 exceptions | where client_Type == "PC" と入力します。クエリの文法や関数は こちら を参照してください。

f:id:noxi515:20191104183553p:plain
クエリの入力とアラートルールの作成

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

アラートルールの作成画面ではまずクエリの実行条件を指定します。画面上の「条件」の下に表示されている文字をクリックしてアラート発砲の閾値と単位時間を設定します。

f:id:noxi515:20191104183930p:plain
アラートルール作成画面

f:id:noxi515:20191104184113p:plain
クエリ実行条件の指定

今回は実験目的のため閾値として 0回以上5分毎5分間隔 を指定しました。

続いてアラートルールの通知先を指定します。
通知先はアクショングループとして管理され、このアラートルールに指定したアクショングループに含まれる通知先全てにアラートが送信されます。

f:id:noxi515:20191104185022p:plain
アクショングループの作成

Teams に Webhook を送信するには予め Teams 上で Incoming Webhookネクターを作成し URL を取得します。作成方法はこちらを参考にして下さい。

noxi515.hateblo.jp

アクショングループの作成画面ではアクションの種類として「Webhook」を選択して、 URL に Teams の Incoming Webhook の URL を設定することで、アラートを Teams に送信することができます。

f:id:noxi515:20191104185618p:plain
Webhookアクショングループの設定

Teams が受け取り可能なアラート本文の作成

最後にアクションのカスタマイズにある「webhook用のカスタムJsonペイロードを含む」にチェックを入れて、Webhook に対して標準のアラート JSON ではなく独自の JSON を送信するようにします。

f:id:noxi515:20191104190123p:plain
アクションのカスタマイズ

Teams の Webhook が受け取ることが出来るフォーマットは2種類あり、そのうちシンプルな方は JSON の プロパティとして text プロパティを1つだけ定義します。ですので、カスタム JSON ペイロードtext プロパティ1つだけとして、そのテキストに通知したい情報を設定します。

{
  "text": "#alertrulename が検知されました。  #linktosearchresults"
}

この設定を行うと、サーバー上で何らかの Exception が検知されると Teams に対してアラートが送信されるようになります。

f:id:noxi515:20191104220005p:plain
Webhookを受け取ったTeamsの表示