Logic Appsを使ったLog Analyticsログ検索の自動化とメール送信手順

2021-02-11Azure,Log Analytics,Logic Apps,Monitor,SendGrid

Azure Logic Apps(ロジックアプリ)を使って、Log Analyticsワークスペースに保管されたログをクエリ検索し、メールで送信する方法です。

Logic AppsにはAzure Monitor Logsのコネクタが用意されています。
これを利用してワークフローからLog AnalyticsやApplication Insightsへ接続し、クエリ検索が可能です。

Azure Logic Apps 内のワークフローから Log Analytics または Application Insights に接続する

ワークフロー内で取得したクエリ結果は、メールで送信したり、ストレージアカウントに保存したりできます。
ワークフローを利用することでクエリ検索をスケジュール化することも可能です。

仮想マシンのHeartbeatログを例として、Logic AppsのワークフローでLog AnalyticsのログをKQLクエリで検索する手順を確認しています。
クエリ実行はスケジュール化し、結果をメール送信しています。

※本記事内では、Azure Logic Apps(ロジックアプリ)をLogic Appsと記載しています。
※本記事内では、Log AnalyticsワークスペースをLog Analyticsと記載しています。
※メール送信には、SendGridを利用しています。

スポンサーリンク

Logic Appsのリソースを作成と権限割り当て

Logic Appsのリソース作成

Logic Appsのリソースを作成します。
リソース名はlogic-log-01としています。

Logic Appsのリソース作成手順については、こちらで紹介しています。
今回は従量課金(消費)(マルチテナント)プランで作成しています。
トリガーやアクションの概要についても、こちらで紹介しています。

システム割り当てマネージドIDを設定

Logic Appsでシステム割り当てマネージドIDの設定を行います。
Logic AppsのワークフローからLog Analyticsでログ検索を行うための権限を付与します。
マネージドIDの有効化と、必要なロールの割り当てを行います。

システム割り当てマネージドIDの設定

左側のメニューから設定にあるIDを選択します。
マネージドIDを有効化します。
状態をオンにして保存します。
Azureロールの割り当てを選択します。

Logic Appsでシステム割り当てマネージドIDを有効化

ロールの割り当ての追加を選択します。
今回は、リソースグループに対してLog Analytics 閲覧者の権限を割り当てます。

  • スコープ:ロールの割り当てを適用する範囲
  • リソースグループ:ロールを割り当てる対象のリソースグループ
  • 役割:割り当てるロール (Log Analytics 閲覧者)

保存すると、割り当てたロールの内容が表示されます。

※Log Analyticsワークスペースが含まれるリソースグループに対して割り当てを追加します。

Logic Appsでシステム割り当てマネージドIDにLog Analytics閲覧者のロールを付与
システム割り当てマネージドIDに割り当てたロールを表示

※ユーザー割り当てマネージドIDを利用しても同じことが可能です。同様に、対象リソースへのアクセス権限を割り当てます。

Logic Appsでクエリ実行結果をメール送信するワークフローを作成

クエリをスケジュール実行し、結果をメール送信します。
ワークフロー作成にあたっては、こちらの記事を参考に進めます。

Logic Apps および Power Automate の Azure Monitor Logs コネクタ

ワークフローの作成にはロジックアプリデザイナーを使用しています。
今回は2つの方法で確認します。

    • クエリを実行して結果を一覧表示
      • JSON形式で出力したクエリ実行結果をHTML化
    • クエリを実行して結果を視覚化
      • クエリ実行結果をHTML Tableとして出力

ワークフローの実行スケジュールをトリガーで設定

スケジュール設定にはScheduleコネクタのRecurrenceトリガーを利用します。
朝9時30分(日本時間)に実行されるように設定します。

トリガーを作成

左側のメニューからロジックアプリデザイナーを選択します。
トリガーの追加を選択します。
ScheduleコネクタのRecurrenceトリガーを選択します。

“Interval"に1、"Frequency"に日を選択することで、毎日実行されるように設定します。
“Time Zone"、"At The Hours(時間)"、"At The Minutes(分)"は、希望する実行時間に合わせて設定します。

ScheduleコネクタでRecurrenceのトリガーを選択(Logic Appsのワークフロー)
毎朝9時30分に実行するスケジュール設定例(Logic Appsのワークフロー)

Azure Monitor ログコネクタのクエリを実行して結果を一覧表示するアクションを設定

“Azure Monitor ログ"コネクタには、以下の2つのアクションがあります。

“クエリを実行して結果を一覧表示する"アクションを利用します。
仮想マシンのHeartbeatログの最終取得時間をKQLクエリ実行サンプルとしています。
Log Analyticsワークスペースには、事前に準備したlog-test-01を利用しています。

    • “クエリを実行して結果を一覧表示する"アクションの設定内容
      • サブスクリプション: Log Analyticsワークスペースのサブスクリプションを選択
      • リソースグループ:Log Analyticsワークスペースのリソースグループを指定
      • リソースの種類:Log Analytics Workspace
      • クエリ:実行するKQLクエリ
      • 時間範囲の種類:時間範囲の設定方法
      • Time Range(もしくはFrom To):ログ検索の対象時間範囲

※今回はV2のアクションを利用しています。

“クエリを実行して結果を一覧表示する V2″アクションの設定

検索欄にAzure Monitor Logと入力します。
Azure Monitor ログコネクタにある、クエリを実行して結果を一覧表示する V2を選択します。

 

Azure Monitorログのコネクタを選択(Logic Appsのワークフロー)
Azure Monitorログのコネクタでクエリを実行して結果を一覧表示するのアクションを選択(Logic Appsのワークフロー)

Azure Monitorログコネクタを利用する場合、接続の作成が必要です。
Logic AppsのマネージドIDを使用して接続を作成します。

Azure Monitorログのアクションで新規の接続を作成(認証の種類にはマネージドIDを指定)(Logic Appsのワークフロー)

クエリには以下の内容を入力します。
仮想マシンのHeartbeatログの最終取得時間を確認するKQLクエリの実行サンプルです。

Heartbeat
| summarize max(TimeGenerated) by Computer,
| sort by Computer

時間範囲の種類には"Relative"と"Exact"の2種類があります。
適宜選択します。

※クエリ内で時間範囲を指定することも可能です。

 

 

 

クエリを実行して結果を一覧表示するアクションで、KQLクエリ、Log Analyticsワークスペース、時間範囲を設定(Logic Appsのワークフロー)
クエリを実行して結果を一覧表示するアクションの時間範囲の種類の表示例(Exactを指定)
クエリを実行して結果を一覧表示するアクションの時間範囲の種類の表示例(Relativeを指定)

Heartbeatログについてはこちらで紹介しています。
Heartbeatログを利用すると、仮想マシンがLog Analyticsワークスペースに正常に接続されているかどうかの状況を確認、監視することができます。

Logic Appsのワークフローにおける日付関連のアクションについては、こちらで紹介しています。

クエリを実行して結果を一覧表示する V2のアクションの出力結果はJSON形式

クエリを実行して結果を一覧表示する V2のアクションは、出力結果をJSON形式で返します。
出力結果は、クエリを実行して結果を一覧表示する V2アクションまでのワークフローを実行することで確認できます。

クエリを実行して結果を一覧表示する V2アクションの出力結果
ワークフローを実行し、実行結果を確認します。
クエリを実行して結果を一覧表示する V2アクションの実行結果を確認します。
出力結果はJSON形式で表示されます。
クエリを実行して結果を一覧表示するアクションの実行結果例(Logic Appsのワークフロー)
{
 “value": [
  {
   “Computer": “test-vm-02",
   “max_TimeGenerated": “2024-07-07T05:31:30.3183017Z"
  },
 {
  “Computer": “test-vm-01",
  “max_TimeGenerated": “2024-07-07T05:32:24.7197614Z"
  }
 ]
}

Parse Jsonのアクションを使ってJSON形式の出力結果から値を取得

Data operationsコネクタのParse Jsonアクションを利用して、JSON形式の出力結果から値を取得できます。

JSONの解析

Parse Jsonアクションの設定
検索欄にData Operationsを入力します。
Parse Jsonアクションを選択します。
Data OperationsコネクタのParse JSONを選択(Logic Appsのワークフロー)
サンプルのペイロードを使用してスキーマを生成するを選択します。
クエリを実行して結果を一覧表示する V2アクションの実行結果をサンプルのJSONペイロードとして貼り付けます。
完了を選択します。

 

Parse JSONのアクションでサンプルペイロード設定を選択(Logic Appsのワークフロー)
サンプルのJSONペイロードを入力(Logic Appsのワークフロー)

Contentは入力値になります。
valueの値を指定します。

Parse JSONのアクションでContentを設定(Logic Appsのワークフロー)

Parse Jsonアクションの例です。
Schemaが生成されていることが確認できます。

Parse JSONアクションの設定完了画面例(Logic Appsのワークフロー)

Create HTML tableアクションを使ってHTMLテーブルを作成

Data operationsコネクタのCreate HTML tableアクションを利用して、値からHTMLテーブルを作成できます。

HTML テーブルの作成アクション

“Create HTML table"アクションの設定
検索欄にData Operationsを入力します。
Create HTML tableアクションを選択します。
Data OperationsコネクタのCreate HTML tableを選択(Logic Appsのワークフロー)
FromがHTMLテーブル作成の入力値になります。
Parse JSONアクションのBodyを選択します。
Create HTML tableアクションでFromを設定(Logic Appsのワークフロー)
設定値にPharse JSONのBodyを選択(Logic Appsのワークフロー)
詳細パラメーターでColumnsを選択できます。
Columnsを利用して作成するHTMLをカスタマイズできます。
Create HTML tableアクションの詳細パラメーター設定
Create HTML tableでColumnsを選択した場合に表示画面例(Logic Appsのワークフロー)
Create HTML tableアクションの設定例(Logic Appsのワークフロー)

SendGridを使ってメール送信

今回はSendGridを使ってメール送信します。
Logic AppsにはSendGridのコネクタが用意されています。
SendGridコネクタにはメール送信のアクションが含まれています。

    • メール送信設定
      • 送信元メールアドレス:SendGridで送信元として認証されているメールアドレス
      • 送信先メールアドレス:送信先のメールアドレス
      • 件名:メールの件名
      • 本文:HTMLテーブル作成の出力結果を設定

Logic AppsのワークフローでSendGridを使ってメール送信する手順や、SendGrid API Keyの発行手順についてはこちらで紹介しています。

SendGridを使ってメール送信

検索欄にメールの送信(V4)と入力します。
SendGridコネクタのメールの送信(V4)アクションを選択します。

メール送信の設定では、件名、送信元、宛先を指定します。
メール本文にはCreate HTML tableアクションのOutputを設定します。

※SendGridコネクタを利用する際は、接続の作成が必要です。

SendGridコネクタのメールの送信(V4)を選択(Logic Appsのワークフロー)
メールの送信(V4)のアクション設定例(Logic Appsのワークフロー)
Create HTML tableのOutputを選択例(Logic Appsのワークフロー)

作成したワークフローを保存

作成したワークフローを保存します。

作成したワークフロー

今回作成したワークフローです。
1つのトリガーと4つのアクションが定義されています。

※アイテムやトリガーの必須項目に未設定の項目がある場合、保存できずエラーとなります。

Log AnalyticsのKQLクエリ実行結果をメール送信するLogic Appsのワークフロー

ワークフローを実行してメール受信結果を確認

ワークフローを実行し、メール送信結果を確認します。
確認は実行履歴から行います。
トリガーを実行して結果を確認します。

ワークフローの実行履歴を確認
ワークフローが正常に終了すると、緑色のチェックマークが表示されます。 Logic Appsのワークフローの実行履歴例(Log AnalyticsのKQLクエリ実行結果をメール送信)
受信したメールを確認します。
メール本文にKQLクエリの実行結果が表示されていることを確認できます。
Logic Appsのワークフローを実行してメール送信した結果(Log AnalyticsのKQLクエリ実行結果をメール送信)

—広告—

”クエリを実行して結果を視覚化する V2”アクションを使ってクエリ実行結果をメール送信

ワークフローを作成

クエリを実行して結果を視覚化するアクションを使用すると、検索結果をHTMLテーブルとして出力できます。
Parse JSONやCreate HTML tableのアクションは必要ありません。

※今回はクエリを実行して結果を視覚化する V2を利用しています。

クエリを実行して結果を視覚化する V2のアクションを利用

Azure Monitor ログのコネクタでクエリを実行して結果を視覚化する V2のアクションを選択します。

Azure Monitorログコネクタでクエリ実行して結果を視覚化するV2を選択(Logic Appsのワークフロー)

Log Analyticsワークスペースのリソース、時間範囲、クエリを設定します。

Heartbeat
| summarize max(TimeGenerated) by Computer,
| sort by Computer

グラフの種類はHtml Tableを選択します。

 

 

クエリ実行して結果を視覚化するV2の設定画面例(Html Tableを指定)(Logic Appsのワークフロー)

メールの送信設定を行います。
メール本文には、クエリを実行して結果を視覚化する V2の添付ファイルの内容を選択します。

クエリ実行して結果を視覚化するV2の出力結果をSendGridでメール送信する場合の設定例(Logic Appsのワークフロー)
クエリ実行して結果を視覚化するV2の出力結果の添付ファイルの内容を選択(Logic Appsのワークフロー)

ワークフローを実行してメール受信結果を確認

ワークフローを実行して、メールの受信結果を確認します。

メール受信結果を確認

メール受信結果を確認します。
ログ検索結果がメール本文に記載されていることを確認できます。

Logic Appsのワークフローを実行してメール送信した結果(Log AnalyticsのKQLクエリ実行結果をメール送信)

—広告—

最後に

Logic Appsを使ってLog Analyticsのクエリ実行結果をメール送信することができました。
クエリの実行方法には2種類があり、両方利用できることが分かりました。
今回は実施していませんが、クエリ実行結果を加工することも可能です。

    • Azure Monitor ログ(コネクタ)
      •  クエリを実行して結果を一覧表示する
        • クエリ実行結果はJSON形式
        • HTMLテーブル作成時にクエリ実行結果を加工できる
      • クエリを実行して結果を視覚化する
        • グラフの種類で指定した内容で出力
        • クエリ実行結果をそのまま視覚化できるため設定が簡単

引き続き、いろいろ試してみたいと思います。

Logic Appsのワークフローでストレージアカウントへファイルを保管する方法については、こちらで紹介しています。

Logic AppsのワークフローからKey Vaultのシークレット値を参照する手順については、こちらで紹介しています。

Logic AppsのワークフローでSlackへ連携する方法については、こちらで紹介しています。
Azure Monitorのアラート通知を例に、手順を紹介しています。

スポンサーリンク