ストレージアカウントにアーカイブされた診断ログを検索する #Azure リレー

皆さんLogAnalyticsは使っていますか?
Kustoを覚えれば診断ログを縦横無尽に検索できるので便利ですよね。

ちなみにLogAnalyticsはどれくらいお金がかかるか知っていますか?結構高いですよね。
LogAnalyticsはデフォルトだと30日間しかログを保存しないです。
古いデータはストレージアカウントにアーカイブしているケースがあると思います。

ストレージアカウントにアーカイブされたデータはjson形式のBlob群となり、そのままでは参照・検索が困難です。
これを良い感じに検索できるようにする方法を調べたので整理します。

Azure Data Explorerを使用してログを見てみよう

Azure Data Explorerを使用すると、診断ログのアーカイブとして保存されたjsonファイルを簡単に参照することができます。
Azure Data Explorerがjsonファイルを自動的にparseしてテーブルの形に変換し、Azure Data Explorer内のデータベースに取り込んでくれます。
最新データの参照、という意味ではちょっとマズいですが、過去データの参照用途には十分ですね!早速試してみましょう。

Azure Data Explorer クラスターの用意

Azure Data Explorerは、正確にはAzure Data Explorerクラスターと呼ぶようです。
Azureのサブスクリプションをお持ちの場合、下記のリンクでAzure Data Explorerの一覧につながると思います。

https://portal.azure.com/#blade/HubsExtension/BrowseResource/resourceType/Microsoft.Kusto%2Fclusters

左上の「+追加」から作成してみましょう。
設定値は下記を想定します(未記載分はデフォルト値)。

設定項目設定値備考
リージョン東日本診断ログが格納されたストレージアカウントと同じリージョンの方が良さそう
ワークロード開発/テスト運用のための構築ではないため、開発/テスト用途で問題ないはず
コンピューティングの仕様Dev(No SLA)_Standard_E2a_v4最安設定でもリソースをフルで使用しなかったため、最低限で良いと思われる

Azure Data Explorerクラスターの初期設定

作成したAzure Data ExplorerリソースをAzureポータルから開き、「データベースの作成」を選択してください。
設定項目が出ますがデフォルト値で良いと思います。
データベース名は任意に決めてください。

ログ取得用にストレージアカウントのSASを発行

診断ログを保管しているストレージアカウントをAzureポータルから開き、「Shared Access Signature」の画面を開いて、適切な権限のSASを作成してください。
設定例を下記に示します。

設定項目設定値
使用できるサービスBLOB
使用できるリソースの種類サービス、コンテナー、オブジェクト
与えられているアクセス許可読み取り、リスト
BLOBバージョン管理のアクセス許可無効

Azure Data Explorerにアーカイブされた診断ログを取り込む

ストレージアカウントのBlob群を取り込み、Azure Data Explorer上に診断ログのテーブルを作成します。
テーブルなので、スキーマが共通なものだけ1つのテーブルに格納可能です。例えばFront DoorのアクセスログとFront Doorのメトリック情報は別々のテーブルに保存する必要があります。
よって、ログの種類ごとに下記の手順の実施が必要です。

作成したAzure Data ExplorerリソースをAzureポータルから開き、「新しいデータの取り込み」を選択します。

別ウィンドウが開き、Azure Data Explorerの操作画面が表示されます。
自動的に「Ingest new data」の画面が開いているため、設定値を入力しましょう。

・ Source

設定項目設定値
Database(Azure Data Explorerクラスターの初期設定で作成したデータベース)
Table(任意だが、ログの種類を表す名称が好ましい)
Source typeBLOBコンテナーから
Link to storageSAS付きのストレージアカウントのコンテナーのURL
参考:
https://docs.microsoft.com/ja-jp/azure/data-explorer/kusto/api/connection-strings/storage

※ 取り込み可能なBLOBの数はデフォルトだと最大1,000件となります

・ Schema

(デフォルト設定でOKですが、必要に応じてNested levelsの値を2などに設定すると使用しやすいテーブル定義になります)

入力後、「Start ingestion」を選択するとデータの取り込みが開始します。ワクワクですね。

Azure Data Explorerに取り込まれた診断ログの参照

クエリの画面からLogAnalytics同様kustoで検索可能になりました。

テーブル名は取り込み時に指定したテーブル名となります。

まとめ

ストレージアカウントにアーカイブされた診断ログの一部を確認するのは簡単なことが分かりました。
しかし、一度に取り込み可能なBLOBの数は最大で1,000件(設定を変えても2,000件)なので、長期間運用した環境では工夫が必要です。

とはいえ、Azure Data Explorerの威力を見せつけられました。いろいろなデータを分析させてみたいですね!