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

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

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

Logic AppsにはAzure Monitor Logsのコネクタが用意されています。
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を有効化します。
状態を"オン"にして保存を選択します。

“Azureロールの割り当て"を選択します。

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

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

  • スコープ:ロールの割り当ての適用範囲
  • リソースグループ:ロールの割り当てるリソースグループ
  • 役割:ロールの割り当て内容

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

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

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

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

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

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

Logic Apps および Power Automate の Azure Monitor Logs コネクタ(MS社公式)

ワークフローの作成にはロジックアプリデザイナーを使っています。
今回は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
      • クエリ:実行するクエリ
      • 時間範囲の種類:時間範囲の設定方法
      • 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の解析

JSON形式で出力されたKQLクエリ実行結果から値を取得します。

“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のアラート通知を例に手順を紹介しています。

スポンサーリンク