ログ分析を使用してログのボリュームを分析する

このドキュメントでは、ログ分析を使用してログエントリの課金対象ボリュームを見積もる方法について説明します。リソースタイプやアプリケーション名などのさまざまなディメンションで課金対象の容量をレポートして集計するクエリを作成して、クエリ結果をグラフに表示できます。

課金対象ボリュームのクエリ方法

ログエントリの課金対象ボリューム(Cloud Billing に報告されるサイズ)は、storage_bytes フィールドを介して確認できます。 クエリでは、データ型が INTEGER のスキーマ フィールドと同じように storage_bytes フィールドを使用できます。 たとえば、SELECT 句、CASE ステートメント、共通テーブル式に含めることができます。 ログのクエリの詳細については、次のドキュメントをご覧ください。

Cloud Billing では、費用の決定時に課金対象ボリュームが使用されるため、費用のソースの把握に役立つクエリを作成できます。 たとえば、最も多くのログエントリを書き込んでいるアプリケーションを特定するのに役立つクエリを作成できます。課金対象ボリュームを費用に関連付ける方法については、Cloud Logging の料金概要Cloud Logging の料金をご覧ください。

ログエントリの課金対象ボリュームは、Cloud Logging API に送信された LogEntry オブジェクトのサイズではありません。課金対象ボリュームには、シリアル化とメタデータに必要なバイトが含まれます。

始める前に

このセクションでは、Log Analytics を使用する前に完了する必要がある手順について説明します。

ログバケットを構成する

ログバケットがログ分析を使用できるようにアップグレードされていることを確認します。

  1. Google Cloud コンソールで、[ログストレージ] ページに移動します。

    [ログストレージ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。

  2. クエリを実行するログビューを含むログバケットごとに、[ログ分析を使用可能] 列に [開く] が表示されていることを確認します。[アップグレード] が表示されたら、[アップグレード] をクリックしてダイアログを完了します。

IAM のロールと権限を構成する

このセクションでは、Log Analytics の使用に必要な IAM ロールまたは権限について説明します。

  • Log Analytics の使用とログビューのクエリに必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼してください。

    • _Required および _Default のログバケットに対してクエリを実行するには:   ログ閲覧者roles/logging.viewer
    • プロジェクト内のすべてのログビューをクエリするには: ログビューアクセサー roles/logging.viewAccessor

    プリンシパルを特定のログビューに制限するには、プロジェクト レベルで行われたログビュー アクセサー ロールの付与に IAM 条件を追加するか、ログビューのポリシー ファイルに IAM バインディングを追加します。詳細については、ログビューへのアクセスを制御するをご覧ください。

    これらの権限は、[ログ エクスプローラ] ページでログエントリを表示するために必要な権限と同じです。ユーザー定義バケットに対するビューのクエリ実行、または _Default ログバケットの _AllLogs ビューのクエリ実行のために必要な追加のロールについて詳しくは、Cloud Logging のロールをご覧ください。

  • 分析ビューに対してクエリを実行するために必要な権限を取得するには、プロジェクトに対する オブザーバビリティ分析ユーザー roles/observability.analyticsUser)IAM ロールを付与するよう管理者に依頼してください。

サンプルクエリ

このセクションでは、単一のログビューからデータを分析するクエリの例を示します。 複数のログビューにデータを保存し、それらのビューに保存されているデータの集計値を計算する場合は、UNION ステートメントを使用する必要があります。

ログエントリをクエリするには、[ログ分析] ページを使用するか、BigQuery データセットをクエリできる場所([BigQuery Studio] ページ、[Looker Studio] ページを含む)、およびbq コマンドライン ツールを使用します。

サンプルクエリを使用するには、次のようにします。

アプリ別のログ ボリュームのクエリ

Google Kubernetes Engine リソースに対して書き込まれ、JSON ペイロードを含むログエントリの 1 日あたりの合計バイト数をアプリごとに計算するには、次のクエリを使用します。

SELECT
  timestamp_trunc(timestamp,DAY) as day,
  JSON_VALUE(labels["k8s-pod/app"]) as app_id,
  SUM(storage_bytes) as total_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"
GROUP BY ALL

データを可視化するには、グラフを作成できます。

次の例では、データが積み上げ棒グラフとして表示されます。グラフの各バーには、保存されている合計バイト数がアプリ別に整理されて表示されます。この例では、frontend アプリがログデータを最も多く生成しています。

アプリごとのログ ボリュームをクエリした結果を示すグラフの例。

ログ名でログのボリュームをクエリする

Google Kubernetes Engine リソースに対して書き込まれた、JSON ペイロードを持つ各ログエントリの保存されているバイト数とログ名を一覧表示するには、次のクエリを使用します。

SELECT
  log_id AS log_name,
  storage_bytes
FROM
  `TABLE_NAME_OF_LOG_VIEW`
WHERE
  json_payload IS NOT NULL
  AND resource.type="k8s_container"

前のクエリでは結果が集計されません。代わりに、ログエントリごとに 1 つの行があり、その行にはログ名と保存されたバイト数が含まれます。このデータをグラフにすると、さまざまなログに書き込まれたログデータの部分を可視化できます。

ログ名でログのボリュームをクエリした結果を示すグラフの例。

上のグラフは、ほとんどのログデータが stdout という名前のログに書き込まれていることを示しています。

bq コマンドライン ツールを使用してログ名でログのボリュームをクエリする

[BigQuery Studio] ページを介して、または bq コマンドライン ツールを使用して、実行するクエリに storage_bytes フィールドを含めることができます。

次のクエリは、各ログエントリのログ名と保存されているバイト数を報告します。

bq query --use_legacy_sql=false  'SELECT log_id as log_name,
  storage_bytes FROM `TABLE_NAME_OF_LOG_VIEW`'

このクエリの結果は次のようになります。

+----------+---------------+
| log_name | storage_bytes |
+----------+---------------+
| stdout   |           716 |
| stdout   |           699 |
| stdout   |           917 |
| stdout   |           704 |

各行は 1 つのログエントリに対応します。storage_bytes 列の値は、そのログエントリの課金対象ボリュームです。

制限事項

storage_bytes フィールドは、次の条件を満たしている場合にのみ使用できます。

  • ログバケットが、ログ分析を使用するようにアップグレードされている。
  • クエリが、[ログ分析] ページ、または BigQuery データセットをクエリできる場所([BigQuery Studio] ページ、[Looker Studio] ページを含む)、およびbq コマンドライン ツールで実行されている。

  • ログエントリが 2024 年 1 月 1 日以降に書き込まれている。