Azure のリソースで診断設定で Log Analytics ワークスペースにログを格納すると「AzureDiagnostics」テーブルに対してログの取得が行われることがあります。
この AzureDiagnostics テーブルについての理解度が低かったので一度整理してみました。
Contents
AzureDiagnostics テーブルが使用されるか否か
Log Analytics ワークスペースに送信する に記載されていますが、診断設定で Log Analytics ワークスペースにログを取得した場合、データの格納されるテーブルについては次の 2 種類のモードのどちらが使用されるかによって変わってきます。
- Azure 診断モード: AzureDiagnostics テーブルにログを取得
- リソース固有モード: リソース固有 (個別) テーブル
一部のリソース については、どちらのモードで情報を取得するかを選択することができますが、それ以外のリソースについては、自動的に使用されるモードが決められており、リソースがサポートしているモードで自動的に取得が行われています。
コレクション モードを選択する に次のように記載されているように、今後はリソース固有モードでの取得が行われるようになっていくようですので選択可能なリソースの診断設定については、リソース固有モードを使用するようにしたほうが良いのではないでしょうか。
最終的にすべての Azure サービスで、リソース固有モードが使用されます。 この移行の一環として、一部のリソースでは診断設定でモードを選択できます。 リソース固有モードを使用すると、データの管理がしやすくなるため、新しい診断設定にはこのモードを指定してください。 また、後で複雑な移行を回避するのにも役立ちます。
Azure 診断モードで診断設定のログが取得されているリソースについては、AzureDiagnostics テーブルにデータが格納されますのでこのテーブルには複数の異なる種類のリソースの情報が格納されている状態となります。
AzureDiagnostics テーブルにログが取得されるリソース
Azure 診断モードを使用して AzureDiagnostics テーブルにログが取得されるリソースについては Azure Diagnostics モード に記載されています。
ここに記載されているリソースについては、診断設定でログの取得を行うと、AzureDiacnostics テーブルにログが取得されます。
使用している環境で AzureDiagnostics テーブルがどのようなリソースで取得されているかについては、Azure モニターのログ検索をサブスクリプションをスコープに設定して、次のようなクエリを実行することで確認ができます。
AzureDiagnostics | summarize by ResourceProvider | sort by ResourceProvider
確認できたリソースが、現状リソース固有モードがサポートされていないため Azure 診断モードで診断ログが取得されているリソースとなります。
AzureDiagnostics テーブルが使用されている場合のストレージアカウントへのアーカイブ
AzureDiagnostics テーブルが使用されている場合の注意点として、Log Analytics ワークスペースのデータエクスポートを使用できない点があります。
データエクスポートがサポートされるテーブルについては サポート対象のテーブル に記載されていますが、AzureDiagnostics テーブルについては、サポートされておらず、データエクスポートを使用した Azure ストレージへのログアーカイブはサポートされていません。
そのためストレージアカウントに AzureDiagnostics テーブルのデータをアーカイブするためには、診断設定で Log Analytics ワークスペースと ストレージアカウント の両方に出力するように設定します。
これにより次のような出力を行うことができます。
- Log Analytics ワークスペース: AzureDiagnostics テーブル
- ストレージアカウント: insights-logs-<ログカテゴリ名> のコンテナー
- コンテナー名については Azure Storage への送信 に情報が記載されています。
- Log Analytics ワークスペースでは単一のテーブルに複数のリソースのログが記録されますが、ストレージアカウントについてはログカテゴリごとに異なるコンテナーが作成され、ログが記録されます。
現状、AzureDiagnostics テーブルはデータエクスポートに対応していませんので、診断設定側でストレージアカウントのアーカイブについても設定しておく必要があります。
メトリックの取得で使用される AzureMtrics テーブルも Log Analytics ワークスペースのデータエクスポートをサポートしていないため、ストレージアカウントにアーカイブする場合には、テーブルのエクスポートではなく、診断設定でストレージアカウントに取得する必要があります。
ライフサイクル管理の考慮点
ストレージアカウントに保存した診断設定のデータについては、ストレージコストの削減のため、永続的に保存をしておくのではなく、保有期間の設定を検討しておく必要があります。
診断設定でストレージアカウントに出力されているデータ (ファイル) については、ストレージアカウントの ライフサイクル管理 で自動的に削除を行うことができますので、ストレージアカウントに出力した診断ログについてはライフサイクル管理で保有期間を設定することを検討しておきます。
ストレージアカウントに出力された診断設定のデータ (Log Analytics ワークスペースのデータエクスポートで出力したデータも同様) ですが、「追加 BLOB」(Append BLOB) のファイルとして出力が行われています。
ライフサイクル管理では 階層化 により、指定期限経過したファイルをクール層 / アーカイブ層に自動的に移動するということができますが、 既知の問題と制限事項 に記載されているように、階層化はブロック BLOB でのみサポートされており、追加 BLOB ではサポートされていません。
診断ログのような種別のファイルは階層化を使用して、直近で使用する可能性のあるファイルのみホット層とし、解析する頻度 / 可能性の低いファイルについては、クール層 / アーカイブ層とすることでストレージコストを削減したいのですが、残念ながらそのような運用は行うことはできず、保有期間経過後のファイルの削除でのみストレージコストを削減することができます。