ロジックアプリで Azure Monitor / Log Analytics に自動クエリーする技

# 1. はじめに
ロジックアプリで自動化を検討する際に、何かのトリガーに自動で Log Analytics workspace に Kusto クエリーを送って通知したいニーズがあると思います。おそらく、以下のようなニーズでこの記事を観ている方がいらっしゃるのではないかと思います。

- 監査目的に、定期的に監査クエリーを実行して結果を担当部門に通知する
- Azure リソースの状態遷移時に、Azure アクティビティログに対してクエリーを自動発砲して通知する
- Microsoft Sentinel のインシデントトリガーを用いて、セキュリティインシデント時にエンティティの履歴を検索して抽出する

本記事ではロジックアプリの作り方、通知方針についてご紹介いたします。

# 2. 方法
2023.7 現在、ロジックアプリから Log Analytics に自動クエリーするコネクタとしては以下の二通りになります。

|  コネクタ  | 内容 | 通知先 |
| :--- | :--- | ---- |
| [クエリを実行して結果を一覧表示する V2](https://learn.microsoft.com/ja-jp/connectors/azuremonitorlogs/#%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E7%B5%90%E6%9E%9C%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B-v2-(%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC)) | - KQL を実行し、結果を JSON として取得する<BR> - JSON (Text) として受信するので、後段の通知先へ整形し易い |  Teams<BR>メール<BR>ITSM 基盤など |
| [クエリを実行して結果を視覚化する V2](https://learn.microsoft.com/ja-jp/connectors/azuremonitorlogs/#%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E7%B5%90%E6%9E%9C%E3%82%92%E8%A6%96%E8%A6%9A%E5%8C%96%E3%81%99%E3%82%8B-v2-(%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC)) | - KQL を実行し、結果をイメージ (jpg) として受け取る<BR> - イメージは **base64** 形式<BR> - **サイズが大きくなるため**、Teams コネクタに貼り付けが出来ない | O365 コネクタなど |

# 3. 詳細
## 3.1 「クエリーを実行して結果を一覧表示する V2」を用いる
### 概要
- 汎用的に使える方式です。結果は JSON 形式で応答が返ります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/6de7c1d4-da9f-223b-f570-060985fb1f5a.png)

- Teams へ通知する場合は、JSON アレイを「HTML テーブルの作成」コネクタを用いて HTML 変換しています。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/77d53a73-60eb-195b-d2ed-c8cd51f394cb.png)
### ロジックアプリの構成例
- ロジックアプリのフローとしては、以下のように設定しています。
    - 「クエリーを実行して結果を一覧表示する」
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/ace3620c-dfd6-4af7-3c9e-0cb5d29e6efd.png)
    - 「HTMLテーブルの作成」
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/e5dce1d5-64dd-f74b-f1e8-78317ca5ef64.png)
    - 「チャットまたはチャネルでメッセージを投稿する」
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/841c4520-651c-bd5b-8e27-8323114a2345.png)

### Teams への通知例
 - 以下はコネクタで得られた JSON を HTML 変換して、Teams のへ通知した例です。
 - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/650061c2-ca1b-ec7f-23fe-db6ce7aceaa7.png)

## 3.2 「クエリを実行して結果を視覚化する V2」 を用いる
### 概要
- こちらはクエリー結果をイメージ化 (jpg) するコネクタです。
- base64 エンコードされて値が得られますが、対応する通知先を考慮して用いる必要があります。
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/25922b42-5126-36c6-c528-b4ec415baa8c.png)
    - 2023.7 現在、[Microsoft Team コネクタは 28KB の制約があります。](https://learn.microsoft.com/ja-jp/connectors/teams/#%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%97%A2%E7%9F%A5%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%A8%E5%88%B6%E9%99%90)
        - 画像通知を Teams に送りたいところなのですが、基本的にコネクタ経由は無理のようです。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/31c0fbca-0829-80cf-731e-c4b877bd47ff.png)

### ロジックアプリの構成例
- ロジックアプリのフローとしては、以下のように設定しています。
    - 「クエリーを実行して結果を視覚化する V2」
        - 対象の Log Analytics ワークスペースに KQL を入れる設定を入れておきます。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/56fa5f11-bd94-f589-2469-fee13be68ac6.png)
    - 「メールの送信 V2」
        - O365 コネクタを用いて、前段のコネクタで得られた base64 エンコードの jpg ファイルを添付ファイルとして送るようにします。
        - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/48afca35-a26a-1e03-19f4-835addf3fbc4.png)

### メール通知例
 - 以下はロジックアプリで実行したイメージ例です。
 - メール例
     - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/5c8d2187-3934-5313-e67c-4e08c056c032.png)

 - 添付ファイル例（コネクタによってイメージ化された KQL クエリー結果）
     - KQL に ``render`` 宣言をしない場合、自動的に pie chart になるようです。
     - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653790/0e405553-8fbb-c3cb-0484-f5c8f8b837c6.png)

# 4. まとめ
以上、ロジックアプリでクエリー発砲する方法をまとめてみました。
イメージ化は見栄えが良いので Teams 投稿などに用いたいところですが、現在のコネクタ制約が残念なところですね。将来の改善を期待したいところです。監視トリガーの際に自動クエリー発砲することで、運用監視の一次作業が終わるような活用を皆様ご検討いただければと思います。

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。