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

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

請求対象ボリュームをクエリする方法

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

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

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

始める前に

  1. ログ分析を使用してクエリを実行し、ログを表示するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールの付与を管理者に依頼します。

    • _Required および _Default のログバケットに対してクエリを実行するには:   ログ閲覧者roles/logging.viewer
    • カスタム ログバケットをクエリするには:   ログ表示アクセサーroles/logging.viewAccessor

    ロールの付与の詳細については、アクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  2. クエリを実行するログビューで、[ログストレージ] ページに移動し、これらのログビューを格納するログバケットが、ログ分析を使用するようにアップグレードされていることを確認します。必要に応じて、ログバケットをアップグレードしてください。

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

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

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

  3. 省略可: BigQuery データセットを使用してログデータをクエリする場合は、リンクされた BigQuery データセットを作成します。

サンプルクエリ

このセクションでは、単一のログビューからデータを分析するクエリの例を示します。 複数のログビューにデータを保存し、それらのビューに保存されているデータの集計値を計算する場合は、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`
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`
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`'

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

+----------+---------------+
| 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 日以降に書き込まれた。