プレビューになったLog Analyticsのstorage_bytesフィールドを使ってみた

プレビューになったLog Analyticsのstorage_bytesフィールドを試してみました。本フィールドを用いると、課金対象のログデータ量をSQLで確認することができます。
2024.06.28

概要

Log Analyticsでstorage_bytesフィールドを使用してログエントリの課金対象量をクエリできるようになりました。
storage_bytesフィールドは、リソースタイプやアプリケーション名などのさまざまなディメンションで課金対象量を集計するクエリに使用できます。 クエリの結果は、グラフで表示したり、他のツールで使用したりもできます。
※2024/6/28時点ではプレビューとなっています

前提条件・使い方

前提条件

  • クエリする対象ログバケットがLog Analyticsを使用するようにアップグレードされている
  • Log Analytics 、BigQuery Studio、Looker Studio、bq コマンドラインツールなど、BigQueryデータセットにアクセスできる環境でのみ利用可能です
  • 対象ログは2024年1月1日以降に書き込まれていること

ログバケットがLog Analyticsを使用するようにアップグレードされているかどうかは、ログストレージの画面から確認することができます。(https://console.cloud.google.com/logs/storage)


LogAnalyticsを使用可能の列で対象バケットがUpgradeと表示されている場合はUpgradeしないと本機能は使用することができません。
Upgradeボタンを押下すると以下のような表示が出ます。アップグレードを押下すると数分程度経過後にアップグレードが完了します(アップグレードするかどうかはよく確認の上実施ください)。 アップグレード完了後は以下の表示となります。

LogAnalyticsでの使い方

storage_bytes列を追加して、SQLを実行すると該当レコードのログのバイト数が出力されます。

SELECT
  timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload, storage_bytes
FROM
  `プロジェクトID.global._Default._AllLogs`
WHERE resource.type = 'workflows.googleapis.com/Workflow'

上記のSQLでは指定したプロジェクトの、デフォルトのログルーターシンクとログバケットに集約されたログデータ全体から指定した列の値を抽出します。
また、resource.typeでWorkflowsのログだけになるように絞っています。結果は以下のようになりました。
storage_bytes列で、各ログのバイト数が出力されていることが確認できました。
せっかくなので、Cloud Run ジョブのジョブごとのログデータ量を可視化してみました。

SELECT
  CAST(JSON_VALUE(resource.labels.job_name) AS STRING) AS extracted_job_name
, SUM(storage_bytes) AS total_bytes
FROM
  `プロジェクトID.global._Default._Default`
WHERE 
  resource.type = 'cloud_run_job'
GROUP BY ALL

ジョブ名ごとにグループ化して、各ジョブの合計ログデータ量を可視化しています。 表形式だとこのような形です。 さらりとSQLで書けてログの量が可視化できる、これはすごい。

まとめ

前提条件さえクリアしてしまえば、列追加することで使えるようになるのでお手軽とも言えます。課金対象のログの量をサクッと確認できるので、検証段階でログの量を確認して、本番運用時にどの程度のログ費用が発生するかより正確に予測することができるようになるのではないかと思います。早くGAになって欲しい機能だなと思います。
また、今回検証できていないのですがBigQueryにシンクしたログに関しても同様にstorage_bytesフィールドが使用できるようになっているようです。
この記事がどなたかのお役に立てば嬉しいです。それではまた。

参考

Analyze log volume with Log Analytics