Log Analyticsのログ検索からCSV形式でストレージアカウントに保管までをLogic Appsでワークフロー化

Azure,Log Analytics,Logic Apps

Log Analyticsでログ検索(KQLクエリ)を定期的に実行して結果を保管出来ないかなぁと言う事で試してみました。

Azure Logic Apps(ロジックアプリ)を使うと定期的にLog Analytisでクエリ実行させることが出来ます。

こちらの記事ではクエリ実行結果をメール送信していますが、ストレージアカウントにファイルとして保管する事も出来ます。
今回はLogic Apps(ロジックアプリ)のAzure BLOB Storageコネクタを使いクエリ実行結果をストレージアカウントに保管してみました。

    • 実施内容
      • ワークフローはスケジュール実行する
      • VM Insights(分析情報)を利用する
      • Azure VM(仮想マシン)のCPU使用率(24時間での最大値)をクエリで取得する
      • クエリ実行結果のCSVファイルとして保管する
      • 保管先はストレージアカウントのBLOBコンテナーとする
      • ファイル名には日付を付与する 

スポンサーリンク

Azureリソースを作成

Azure Logic Apps(ロジックアプリ)とストレージアカウントのリソースを作成します。
検索対象にはVM Insights(分析情報)を利用します。

VM Insights(分析情報)設定

今回はAzure VM(仮想マシン)で設定したVM Insights(分析情報)のリソース情報を利用します。
24時間で最大のCPU使用率をAzure VM(仮想マシン)単位でクエリでリスト化します。
VM Insightsの設定やLog Analyticsでのクエリ実行についてはこちらを参照願います。

Logic Apps(ロジックアプリ)作成

ワークフローを実行する為にLogic Apps(ロジックアプリ)を作成します。

Logic Apps(ロジックアプリ)作成

Logic Apps(ロジックアプリ)のメニューで追加を選択します。

Azure Logic Apps(リソースデプロイ)

Logic Apps(ロジックアプリ)の作成画面で以下の項目を設定します。

  • リソースグループ名
  • ロジックアプリ名
  • リージョン
  • ログ分析
  • プランの種類
  • ゾーン冗長

プランの種類は消費を選択しています。
ロジックアプリ名は”log-storage-workflow-test”としています。

”確認および作成”を選択します。

 

確認画面で内容を確認し問題が無ければ作成します。

マネージドID設定

今回はストレージアカウント(BLOBコンテナー)コネクタ認証にはシステム割り当てマネージドIDを利用します。

※接続認証にはAccess Key(アクセスキー)、Azure AD Integrated(Azure AD認証)も利用可能です。

システム割り当てマネージドID設定
マネージドIDを有効化します。
Logic Apps(ロジックアプリ)のリソースメニューでIDを選択します。
状態をオンにし保存します。
ロールを割り当てます。
Azureロールの割り当てを選択します。
ロールの割り当ての追加を選択します。
スコープはストレージを選択します。
リソースには保管先のストレージアカウントを選択します。
役割はストレージBLOBデータ共同作成者を選択します。
ストレージアカウントに対してロールの割り当て設定されている事が確認出来ます。

ストレージアカウント作成

ファイル保管先となるストレージアカウントを作成します。
検証目的の設定としています。環境にあわせて設定します。

ストレージアカウント作成
ストレージアカウントのメニューで追加を選択します。
検証目的ですので、パフォーマンスはStandard、冗長性はローカル冗長ストレージ(LRS)を選択しています。
ネットワークアクセスは、”選択した仮想ネットワークとアドレスからのパブリックアクセスを有効にする”を選択します。
検証目的なので論理的な削除はすべて無効にしています。(通常利用時は有効にします。)

これでストレージアカウントの作成は完了です。

ストレージアカウントでネットワーク設定

ストレージアカウントでLogic Apps(ロジックアプリ)からのアクセス許可設定します。
認証にはシステムマネージドIDを利用します。リソースインスタンスを設定します。
確認時にストレージ ブラウザーを利用しますので自身のIPアドレスからのアクセスを許可します。

ネットワーク設定

ファイアウォールでクライアントIPアドレス許可にチェックを入れてます。

リソースインスタンスで今回利用するLogic Apps(ロジックアプリ)のインスタンスを指定します。

BLOBコンテナー作成

ファイル保管先となるBLOBコンテナーを作成します。

BLOBコンテナー作成
ストレージ ブラウザーでコンテナーを追加します。
今回は”logstorage”と言う名前で作成でしています。
コンテナーが追加されている事が確認出来ます。

これでワークフロー作成前の事前設定は終わりになります。

クエリ実行をスケジュール化、結果をBLOBコンテナーに保管

Log Analyticsでのクエリ実行をスケジュール化します。
クエリ実行結果をストレージアカウントのBLOBコンテナーに保管します。

ワークフローのスケジュール実行設定からJSONの解析まで

スケジュール実行設定からクエリ実行、値抽出までのワークフローを作成します。

    • トリガー
      • 繰り返し
        • 日本時間朝9時にスケジュール実行
    • アクション
      • クエリを実行して結果を一覧表示する
        • VM Insightsのログから最大CPU使用率をAzure VM(仮想マシン)単位でリスト化
      • JSONの解析
        • クエリ実行結果から値を抽出
        • サンプルペイロードは”クエリを実行して結果を一覧表示する”アクションの出力結果を利用

詳細の説明についてはこちらも併せて参照願います。

ワークフロー作成

リソースメニューでロジックアプリデザイナーを選択します。
繰り返しのトリガーを選択します。

ロジックアプリを実行する頻度に日を選択します。
Add new parameterを選択し、タイムゾーン、設定時刻(時間)、設定時刻(分)を追加します。

実行時間を設定します。
タイムゾーンに日本時間を選択します。
設定時刻(時間)と(分)を9時00分と設定します。

 

Azure Monitor ログのコネクタを利用します。検索欄にAzure Monitor Logと入力します。

”クエリを実行して結果を一覧表示する”を選択します。アクションの詳細は公式サイトを参照願います。

クエリを実行して結果を一覧表示する

 

Azure Monitorログへの接続作成にはAzureへのサインインが必要になります。
サインインをクリックするとAzureへのログイン画面が表示されます。
自身のAzureアカウントでログインします。

Azureへのログインが完了すると設定画面が表示されます。
Log Analyticsワークスペースを指定します。

クエリには以下の通り入力します。
時間範囲はLast 24 hoursを指定しています。

InsightsMetrics
| where Namespace contains “Processor"
| summarize max(Val) by Computer
| sort by Computer asc

JSONの解析アクションを設定します。
データ操作コネクタのJSONの解析を選択します。

コンテンツを指定します。
コンテンツは入力値になります。
クエリの実行結果のvalueを選択します。

スキーマはクエリ出力結果をサンプルペイロードを使用して生成します。

クエリの出力結果を貼り付けて完了を選択します。

※”クエリを実行して結果を一覧表示する”のアクションまで作成した時点でワークフローを実行します。その出力結果をサンプルペイロードとして利用します。

コンテンツとスキーマが設定出来ている事を確認します。 

Log Analyticsのクエリ(KQL)についてはこちらに纏めています。

CSVテーブルの作成

CSVテーブルの作成を利用してJSONの解析結果をCSV形式に変換します。

CSVテーブルの作成
検索欄に”CSVテーブルの作成”と入力します。”CSVテーブルの作成”を選択します。
開始が入力値になります。
JSONの解析の本文を選択します。
開始と列の設定を確認します。
列は自動としています。

日付を変数として設定

ファイル名に指定する日付を設定します。
設定日付は当日日付(UTC)としています。
日付のフォーマットはYY(年)-MM(月)-DD(日)としています。
Logic Apps(ロジックアプリ)での日付の扱いについてはこちらに纏めています。

変数の初期化
変数の初期化のアクションを使います。
変数名は”file-name-date”としえます。
値(式)は”formatDateTime(utcNow(),’yy-MM-dd’)”としています。
設定が出来ている事を確認します。 

Azure BLOB Storageコネクタを利用する

ストレージアカウントのBLOBコンテナーを操作する場合には、Azure BLOB Storageコネクタ利用します。
ファイル保管する場合は”BLOBを作成する”のアクションを利用します。

ファイル保管のアクションを設定
“Azure BLOB Storage"コネクタの”BLOBを作成する”を選択します。

認証になります。
認証の種類はAccess Key、Azure AD Integrated、Logic AppsのマネージドIDから選択します。

※認証エラーになる場合はネットワーク設定などを確認します。

今回はLogic AppsのマネージドIDを選択します。
接続名を入力し作成を選択します。

 

認証が完了すると設定画面が表示されます。
ストレージアカウント名はカスタム値の入力を選択して行います。

フォルダーアイコンをクリックするとBLOBコンテナーのリストが表示されます。保管先のBLOBコンテナーを選択します。

※ネットワーク設定がうまく出来てない場合には、エラーが表示されます。

BLOB名が保管する際のファイル名になります。
変数(file-name-date).csvとしています。
BLOBのコンテンツがファイルに書き込む内容になります。
CSVテーブルの作成の出力を選択します。

これで”BLOBを作成する”アクション設定が終わりです。

ワークフローの保存

設定が終わったらワークフロー保存します。

ワークフローの保存

1つのトリガーと5つのアクションが定義されています。確認後保存します。

※必須項目に未設定項目があると保存時にエラーになります。

BLOBコンテナーをへのファイル保管結果を確認

ワークフローを実行

ワークフローを実行します。
クエリ実行結果がBLOBコンテナーに保管されるか確認します。
”トリガーの実行”を使うとワークフローを実行できます。

トリガーの実行
”トリガーの実行”の”実行”を選択します。
実行完了するとグリーンのチェックマークが表示されます。

ストレージアカウントでファイルを確認します。
“日付.csv"のファイル名で作成されている事が確認出来ます。

作成されたファイルをダウンロードして確認します。
クエリ実行結果がCSV形式で書き込みされている事が確認出来ます。

スケジュール実行結果を確認

翌日にスケジュール実行結果を確認します。

スケジュール実行結果確認
Logic Apps(ロジックアプリ)で確認します。
状態が成功、実行時間が朝9時になっています。

ストレージアカウントでファイルを確認します。
BLOBコンテナー内にファイルが出来ている事が確認出来ます。
BLOBコンテナー(ストレージブラウザ)

最後に

Azure Logic Apps(ロジックアプリ)を使ってLogAnalyticsのクエリ実行結果をストレージアカウント(BLOBコンテナー)にファイル保管出来る事が確認出来ました。
月次で確認したいクエリをスケジュール実行してBLOBコンテナーに保管と言ったことが自動化出来てとても便利かと思いました。
今後も引き続き色々試してみたいと思います。