このドキュメントでは、ログ分析を使用してログエントリの課金対象ボリュームを見積もる方法について説明します。リソースタイプやアプリケーション名などのさまざまなディメンションで課金対象の容量をレポートして集計するクエリを作成して、クエリ結果をグラフに表示できます。
課金対象ボリュームのクエリ方法
ログエントリの課金対象ボリューム(Cloud Billing に報告されるサイズ)は、storage_bytes
フィールドを介して確認できます。
クエリでは、データ型が INTEGER
のスキーマ フィールドと同じように storage_bytes
フィールドを使用できます。
たとえば、SELECT
句、CASE
ステートメント、共通テーブル式に含めることができます。
ログのクエリの詳細については、次のドキュメントをご覧ください。
Cloud Billing では、費用の決定時に課金対象ボリュームが使用されるため、費用のソースの把握に役立つクエリを作成できます。 たとえば、最も多くのログエントリを書き込んでいるアプリケーションを特定するのに役立つクエリを作成できます。課金対象ボリュームを費用に関連付ける方法については、Cloud Logging の料金概要と Cloud Logging の料金をご覧ください。
ログエントリの課金対象ボリュームは、Cloud Logging API に送信された LogEntry
オブジェクトのサイズではありません。課金対象ボリュームには、シリアル化とメタデータに必要なバイトが含まれます。
始める前に
このセクションでは、Log Analytics を使用する前に完了する必要がある手順について説明します。
ログバケットを構成する
ログバケットがログ分析を使用できるようにアップグレードされていることを確認します。
-
Google Cloud コンソールで、[ログストレージ] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] の結果を選択します。
- クエリを実行するログビューを含むログバケットごとに、[ログ分析を使用可能] 列に [開く] が表示されていることを確認します。[アップグレード] が表示されたら、[アップグレード] をクリックしてダイアログを完了します。
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 コマンドライン ツールを使用します。
サンプルクエリを使用するには、次のようにします。
[ログ分析] ページ: TABLE_NAME_OF_LOG_VIEW は、ログビューの名前に置き換えます。形式は
project_ID.region.bucket_ID.view_ID
です。BigQuery データセット: TABLE_NAME_OF_LOG_VIEW は、リンクされたデータセットのテーブルへのパスに置き換えます。
アプリ別のログ ボリュームのクエリ
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 日以降に書き込まれている。