本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「ストレージアカウントにアーカイブされた診断ログを検索する #Azure リレー」を再編集したものです。
皆さんLogAnalyticsは使っていますか?
Kusto(KQL)を覚えれば診断ログを縦横無尽に検索できるので便利ですよね。
ちなみにLogAnalyticsはどれくらいお金がかかるか知っていますか?結構高いですよね。
LogAnalyticsはデフォルトだと30日間しかログを保存しないです。
古いデータはストレージアカウントにアーカイブしているケースがあると思います。
ストレージアカウントにアーカイブされたデータはjson形式のBlob群となり、そのままでは参照・検索が困難です。
これを良い感じに検索できるようにする方法を調べたので整理します。
目次
Azure Data Explorerを使用してログを見てみよう
Azure Data Explorer クラスターの用意
Azure Data Explorerクラスターの初期設定
ログ取得用にストレージアカウントのSASを発行
Azure Data Explorerにアーカイブされた診断ログを取り込む
Azure Data Explorerに取り込まれた診断ログの参照
まとめ
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 type | BLOBコンテナーから |
Link to storage | SAS付きのストレージアカウントのコンテナーの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の威力を見せつけられました。いろいろなデータを分析させてみたいですね!
松枝 宏樹/FIXER
名古屋事業所所属。
得意分野はC#、ASP.NET、terraformなど。
最近はdocker、K8s関連を勉強中。