APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Log Analyticsのデータエクスポート(プレビュー)を利用してみた

f:id:tarutaru_pyorne:20211214101549p:plain

はじめに

土居です。
本記事はエーピーコミュニケーションズ Advent Calender 2021の14日目です。

先月のIgnite2021にてLogAnalyticsのデータエクスポート機能がAzure Portalで利用可能になったのでそちらを試してみました。

azure.microsoft.com

LogAnalyticsのデータエクスポートとは

LogAnalyticsは、Azureの各リソースから収集されたログやメトリックなどのデータを収集し保存する分析サービスです。ユーザーはLogAnalytics上でクエリを実行し、結果を対話形式で分析することが可能です。
LogAnalyticsのデータエクスポートは、LogAnalytics上に収集されるデータをAzure Blob StorageまたはEvent Hubsへも並列で出力する機能です。

docs.microsoft.com

ユースケースから考えるデータエクスポート

既にLogAnalyticsにデータが収集されているため、わざわざ別のリソースにまでデータを格納する必要はないと思われる方もいるかもしれません。
しかし、LogAnalyticsは以下のような制約があります。

  • LogAnalyticsのデータ格納先であるワークスペースは、30日~730日しかデータを保持できない

docs.microsoft.com

  • LogAnalyticsのデータ保持のコストが高い(Azure Blob Storageと比較するとGB当たり8倍の価格)

azure.microsoft.com

azure.microsoft.com

データプラットフォームでは、「ホットパス」、「ウォームパス」、「コールドパス」とデータの利用用途・即時性・保存期間に応じてデータフローや格納先を分ける考え方があります。

  • ホットパス:リアルタイム監視やアラート通知など即時性が最も求められる
  • ウォームパス:問題発生後の原因究明や傾向分析などに利用(即時性は不要)
  • コールドパス:監査などの目的で長期保存に利用

LogAnalyticsは上記でいうウォームパスにあたります。高度なクエリ操作によりデータ分析基盤向いていますが、長期間保持や即時アラートは向いていません。
一方でAzure Blob Storageはコールドパスにあたりアクセス層ライフサイクル管理ポリシーを設定することができ、データの長期保存(アーカイブ)に最適です。Event Hubsも3rd partyのアーカイブソリューションに格納するために主に利用します。

前置きが長くなりましたが、LogAnalyticsのデータエクスポート機能を利用すればウォームパスで分析に必要なデータをコールドパスとしても利用できるようになります。 PoCや開発環境などでは不要ですが、本番環境ではシステム監査やインシデント対応のためデータを過去数年分保存しておくみたいな要件は結構あると思います。

データエクスポート以外の手法

LogAnalyticsのデータエクスポートを利用する以外に、コールドパスにデータを格納する方法として以下2つがあります。

  • 診断設定でストレージアカウントへのアーカイブを利用する
  • Logic Appsを利用してLogAnalyticsのデータをAzureストレージにアーカイブする

docs.microsoft.com

Logic Appsを利用する方法はAzure Monitor Logコネクタを利用しますが、LogAnalyticsのテーブルを1つしか指定できません。複数テーブルをまとめてアーカイブしたい場合はLogic Appsも複数作成する必要があり面倒です。
また、コネクタの制限も考慮する必要があります。

個人的には、LogAnalyticsのデータエクスポートを利用するか、診断設定で直接Azureストレージにアーカイブするかのいずれかを利用するのがよいと思います。

実際にやってみた

今回はApp Serviceを使ってLogAnalyticsとApplication InsightsのデータをAzure Blob Storageにエクスポートしてみます。 f:id:tarutaru_pyorne:20211214091658p:plain

まずは、LogAnalyticsとApplication InsightsをPortalからささっと作成してしまいます。 f:id:tarutaru_pyorne:20211214091913p:plain f:id:tarutaru_pyorne:20211214092027p:plain

LogAnalyticsとApplication Insightsの作成が完了したら、今度はApp Serviceを作成します。 App Serviceでは作成時にApplication Insights統合をPortalから選択できるようになっているのでそれを利用します。

f:id:tarutaru_pyorne:20211214092230p:plain f:id:tarutaru_pyorne:20211214092233p:plain

次に、App Serviceの診断設定でLogAnalyticsにApp Serviceのログをエクスポートするように設定します。 ここではテストなのでエクスポートするログの種別は全て選択しメトリックも対象としました。

f:id:tarutaru_pyorne:20211214092456p:plain

診断設定が完了すると、LogAnalyticsにApp Serviceのログが出力されます。 Application Insightsも有効化しているため、LogAnalyticsのログにはApplication Insightsのログもテーブルとして表示され確認ができます。

f:id:tarutaru_pyorne:20211214092814p:plain

ここからLogAnalyticsでデータエクスポートの設定を行います。 ますはLogAnalyticsのPortalでデータエクスポートを選択し、新しいエクスポートルールの追加を行います。

f:id:tarutaru_pyorne:20211214093054p:plain

ルール名を適当に入力します。

f:id:tarutaru_pyorne:20211214093203p:plain

次にLogAnalyticsからエクスポートするソースのテーブルを指定します。 複数テーブルを選択できるのは、前述したLogic Appsと比べて非常に便利ですね。 また、Application Insightsのログもまとめて出力できます。Application Insightsのデータをストレージにエクスポートするには連続エクスポートまたは診断設定を利用する必要があったので 楽でよいですね。

f:id:tarutaru_pyorne:20211214093931p:plain

あとは、Azure Blob Storageのアカウントを指定すれば完了です。 Storageアカウントも事前に作成していたものを利用しました。

f:id:tarutaru_pyorne:20211214094127p:plain

データエクスポートの設定が完了すると、データエクスポートルールが作成されます。

f:id:tarutaru_pyorne:20211214094307p:plain

データエクスポートに関する注意点はこちらを参照してください。
個人的に気になった点をいくつか。

  • サポート対象のテーブルは、サポート対象のテーブルセクションで指定されているものに限られます。
  • エクスポート先は、ワークスペース内のすべてのエクスポート ルールごとに一意である必要があります。
  • エクスポート先は、Log Analytics ワークスペースと同じリージョンに配置されている必要があります。

同じリージョン配置は意外と盲点で、上記でApplication InsightsをLogAnalytics、ストレージアカウントと別リージョンにしていたためいつまでたってもApplication Insightsのデータがエクスポートされませんでした。 是非テストされる際は注意お願いします。

さて、データエクスポートの設定が完了したらBlobの中身を覗いてみます。 おー、Jsonファイルができていますね。 フォルダー階層は出力されるJsonの中身は診断設定でストレージにアーカイブした場合と一緒でした。

f:id:tarutaru_pyorne:20211214095043p:plain

f:id:tarutaru_pyorne:20211214095050p:plain

さいごに

LogAnalyticsのデータエクスポート機能は現在プレビュー中ではありますが、GAされたら積極的に利用したいほど便利ですね。 このあとさらに、Data Explorerを使ってアーカイブ先のBlob Storageを外部テーブルとして読み取ってKQLを使って分析みたいな事も可能ですが、 それはまた次の機会で紹介したいと思います。