はじめに
土居です。
本記事はエーピーコミュニケーションズ Advent Calender 2021の14日目です。
先月のIgnite2021にてLogAnalyticsのデータエクスポート機能がAzure Portalで利用可能になったのでそちらを試してみました。
LogAnalyticsのデータエクスポートとは
LogAnalyticsは、Azureの各リソースから収集されたログやメトリックなどのデータを収集し保存する分析サービスです。ユーザーはLogAnalytics上でクエリを実行し、結果を対話形式で分析することが可能です。
LogAnalyticsのデータエクスポートは、LogAnalytics上に収集されるデータをAzure Blob StorageまたはEvent Hubsへも並列で出力する機能です。
ユースケースから考えるデータエクスポート
既にLogAnalyticsにデータが収集されているため、わざわざ別のリソースにまでデータを格納する必要はないと思われる方もいるかもしれません。
しかし、LogAnalyticsは以下のような制約があります。
- LogAnalyticsのデータ格納先であるワークスペースは、30日~730日しかデータを保持できない
- LogAnalyticsのデータ保持のコストが高い(Azure Blob Storageと比較するとGB当たり8倍の価格)
データプラットフォームでは、「ホットパス」、「ウォームパス」、「コールドパス」とデータの利用用途・即時性・保存期間に応じてデータフローや格納先を分ける考え方があります。
- ホットパス:リアルタイム監視やアラート通知など即時性が最も求められる
- ウォームパス:問題発生後の原因究明や傾向分析などに利用(即時性は不要)
- コールドパス:監査などの目的で長期保存に利用
LogAnalyticsは上記でいうウォームパスにあたります。高度なクエリ操作によりデータ分析基盤向いていますが、長期間保持や即時アラートは向いていません。
一方でAzure Blob Storageはコールドパスにあたりアクセス層やライフサイクル管理ポリシーを設定することができ、データの長期保存(アーカイブ)に最適です。Event Hubsも3rd partyのアーカイブソリューションに格納するために主に利用します。
前置きが長くなりましたが、LogAnalyticsのデータエクスポート機能を利用すればウォームパスで分析に必要なデータをコールドパスとしても利用できるようになります。 PoCや開発環境などでは不要ですが、本番環境ではシステム監査やインシデント対応のためデータを過去数年分保存しておくみたいな要件は結構あると思います。
データエクスポート以外の手法
LogAnalyticsのデータエクスポートを利用する以外に、コールドパスにデータを格納する方法として以下2つがあります。
- 診断設定でストレージアカウントへのアーカイブを利用する
- Logic Appsを利用してLogAnalyticsのデータをAzureストレージにアーカイブする
Logic Appsを利用する方法はAzure Monitor Logコネクタを利用しますが、LogAnalyticsのテーブルを1つしか指定できません。複数テーブルをまとめてアーカイブしたい場合はLogic Appsも複数作成する必要があり面倒です。
また、コネクタの制限も考慮する必要があります。
個人的には、LogAnalyticsのデータエクスポートを利用するか、診断設定で直接Azureストレージにアーカイブするかのいずれかを利用するのがよいと思います。
実際にやってみた
今回はApp Serviceを使ってLogAnalyticsとApplication InsightsのデータをAzure Blob Storageにエクスポートしてみます。
まずは、LogAnalyticsとApplication InsightsをPortalからささっと作成してしまいます。
LogAnalyticsとApplication Insightsの作成が完了したら、今度はApp Serviceを作成します。 App Serviceでは作成時にApplication Insights統合をPortalから選択できるようになっているのでそれを利用します。
次に、App Serviceの診断設定でLogAnalyticsにApp Serviceのログをエクスポートするように設定します。 ここではテストなのでエクスポートするログの種別は全て選択しメトリックも対象としました。
診断設定が完了すると、LogAnalyticsにApp Serviceのログが出力されます。 Application Insightsも有効化しているため、LogAnalyticsのログにはApplication Insightsのログもテーブルとして表示され確認ができます。
ここからLogAnalyticsでデータエクスポートの設定を行います。 ますはLogAnalyticsのPortalでデータエクスポートを選択し、新しいエクスポートルールの追加を行います。
ルール名を適当に入力します。
次にLogAnalyticsからエクスポートするソースのテーブルを指定します。 複数テーブルを選択できるのは、前述したLogic Appsと比べて非常に便利ですね。 また、Application Insightsのログもまとめて出力できます。Application Insightsのデータをストレージにエクスポートするには連続エクスポートまたは診断設定を利用する必要があったので 楽でよいですね。
あとは、Azure Blob Storageのアカウントを指定すれば完了です。 Storageアカウントも事前に作成していたものを利用しました。
データエクスポートの設定が完了すると、データエクスポートルールが作成されます。
データエクスポートに関する注意点はこちらを参照してください。
個人的に気になった点をいくつか。
- サポート対象のテーブルは、サポート対象のテーブルセクションで指定されているものに限られます。
- エクスポート先は、ワークスペース内のすべてのエクスポート ルールごとに一意である必要があります。
- エクスポート先は、Log Analytics ワークスペースと同じリージョンに配置されている必要があります。
同じリージョン配置は意外と盲点で、上記でApplication InsightsをLogAnalytics、ストレージアカウントと別リージョンにしていたためいつまでたってもApplication Insightsのデータがエクスポートされませんでした。 是非テストされる際は注意お願いします。
さて、データエクスポートの設定が完了したらBlobの中身を覗いてみます。 おー、Jsonファイルができていますね。 フォルダー階層は出力されるJsonの中身は診断設定でストレージにアーカイブした場合と一緒でした。
さいごに
LogAnalyticsのデータエクスポート機能は現在プレビュー中ではありますが、GAされたら積極的に利用したいほど便利ですね。 このあとさらに、Data Explorerを使ってアーカイブ先のBlob Storageを外部テーブルとして読み取ってKQLを使って分析みたいな事も可能ですが、 それはまた次の機会で紹介したいと思います。