【Azure Monitor】アラートから Logic Apps をトリガーし アラート種別に応じて処理を分岐する【前編】

Azure Monitor アラートから Logic Apps をトリガーし、アラート種別に応じて Logic Apps のワークフローをカスタマイズする方法をまとめました。

本記事では前編として、 Azure Monitor のアラートから Logic Apps をトリガーしてアクションをカスタマイズするために必須の知識である「共通アラートスキーマ」について記載します。

Azure Monitor アラートの基本知識

Azure Monitor *1 を使用すると、Azure リソース等のパフォーマンス、正常性、アクティビティなどを監視することができます。また、アラートルールを設定することで、条件に応じてアラートを発報することも可能です。

Azure Monitor でアラートが発報された際にトリガーするアクションは、アクショングループ *2 を使用して定義することができます。トリガーできるアクションには Logic Apps *3 のワークフローも含まれています。Logic Apps のワークフローをトリガーすることで、アラート通知のカスタマイズや、他の監視サービスへのアラートの連携などが実現できます。

アラートから Logic Apps のワークフローをトリガーする

共通アラートスキーマについて記載する前に、事前知識として Azure Monitor アラートから Logic Apps のワークフローをトリガーする手順を記載します。詳細な手順は下記のドキュメントをご覧ください。

learn.microsoft.com

なお、本記事では Logic Apps の[消費]プランを使用した手順を記載しています。

  1. Logic Apps を作成します
  2. Logic Apps デザイナーからトリガーとして[HTTP 要求の受信時]を選択します

  3. [要求本文の JSON スキーマ]にアラートペイロードのスキーマを入力します
    (スキーマについては後述します)

  4.  後続のステップに任意のアクションを追加します。

  5. Azure Monitor のアクショングループを作成します
    [アクション]タブの[アクション タイプ]には[ロジック アプリ]を選択します。

  6. アラートルールを作成します
    [アクション]タブでは、手順5 で作成したアクショングループを選択します。

以上で、アラートが発報時に Logic Apps がトリガーされるようになります。

共通アラートスキーマとは

共通アラートスキーマとは、Azure Monitor アラートのペイロードの JSON スキーマを標準化したものです。詳細は下記のドキュメントをご覧ください。

learn.microsoft.com

過去にはアクティビティ ログ、メトリック、ログのアラートごとに異なるスキーマが使用されていたようです。

アラートから Logic Apps をトリガーすることを考える場合、アラート種別ごとにペイロードのスキーマが異なると、不都合が起こり得ます。

前章「アラートから Logic Apps のワークフローをトリガーする」の手順 3 に記載した通り、[HTTP 要求の受信時]>[要求本文の JSON スキーマ]にアラートペイロードのスキーマを入力することで、後続のステップでペイロードに含まれるデータを使用することができます。

言い換えると、アラートペイロードのスキーマに含まれるデータのうち、[要求本文の JSON スキーマ]に含まれないものはワークフローに取り込むことができません。

したがって、アラート種別ごとにペイロードのスキーマが異なる場合、アラート種別ごとにトリガーを用意する必要があり、つまりはアラート種別ごとにワークフローを用意しなければならなくなります。

この不都合を解決するために、共通アラートスキーマが役立ちます。

アラートペイロードに共通アラートスキーマを使用することで、アラート種別が異なる場合も同じワークフローをトリガーしてペイロードに含まれるデータを取り込むことが可能になります。

共通アラートスキーマを使用するには、アクショングループ作成時の設定が必要です。[アクション]タブで[アクション タイプ]を選択する際に、[共通アラート スキーマを有効にします。]に[はい]を選択します。

共通アラートスキーマの構造

共通アラートスキーマには以下3つのフィールドがあります。*4

  • essentials
    • 共通アラートスキーマの "共通な" 部分です。
    • アラートID、アラートルール名、発報日時、重大度、アラート種別(監視サービスやシグナルタイプ)、影響を受けるリソースなどが含まれます。
  • alertContext
    • 共通アラートスキーマの "共通ではない" 部分です。
    • アラートルールに関連するデータが含まれており、アラート種別によって含まれるフィールドが異なります。
      • 例えば、メトリック アラートの alertContext には、メトリック名、閾値、発報の条件などが含まれています。
    • こちら *5 のドキュメントに記載されているサンプルから、各監視サービスごとに含まれるフィールドを確認できます。
  • customProperties
    • 任意の情報を含めることができる部分です。

前章では、共通アラートスキーマを使用したアラートペイロードから Logic Apps をトリガーすることで、複数のアラート種別に対してもペイロードに含まれるデータを後続のステップで使用できると説明しました。

確かに、 essentials フィールドはアラート種別が違っても共通のため、1つのトリガーに1つの JSON スキーマを定義するだけでデータを取り込むことができます。

しかし、alertContext フィールドはアラート種別により異なるため、データを取り込むためには工夫が必要になります。選択肢としては以下のようなものがあります。

  1. アラート種別ごとにワークフローを用意する
    • 手数は増えますが、複数のワークフローを用意し、各ワークフローのトリガーにアラート種別ごとの JSON スキーマを定義します。 
  2. すべてのアラート種別の alertContext に含まれるフィールドを1つのトリガーの JSON スキーマに含める
    • トリガーの JSON スキーマに含めるフィールドは、実際のアラートペイロードのフィールドより多くなっても問題ありません。そのため、想定されるすべてのアラート種別の alertContext フィールドをトリガーの JSON スキーマに含めてしまえば、すべてのデータを取り込むことが可能です。
    • ただし、トリガーの JSON スキーマを作り込む必要があり、やや手数が増えます。
  3. essentials フィールドに含まれるデータを基に、後続のステップで alertContext フィールドに含まれるデータを取得する
    • この方法が実現できれば、ワークフローが1つで済み、修正の負担も軽くなるため、最も合理的です(後編でこちらの方法を紹介します)。

おわりに

以下が本記事のまとめです。

  • 異なるアラート種別のアラートペイロードを使用して Logic Apps をトリガーする場合、共通アラートスキーマが役に立ちます
  • ペイロードに含まれる alertContext フィールドのデータをワークフローに取り込むには、一工夫必要になります

次回は後編として、essentials フィールドに含まれるデータを基に Logic Apps の処理を分岐し、さらに分岐先で alertContext フィールドに含まれるデータを取得する方法について記載したいと思います。

執筆担当者プロフィール
森野 祥平

森野 祥平(日本ビジネスシステムズ株式会社)

主にAzureに携わっています。好きなアーティストはB'zです。

担当記事一覧