Cloud LoggingはGCPで発生した各種のログを集約し、そのログを使った様々な機能を提供します。
単にログを閲覧するだけではなく、ログに対してクエリを実行して特定の条件のログを抽出したり、特定のログが発生した時にアラートを上げたりという使い方ができます。
また、何も設定せずともデフォルトで多くのログがCloud Loggingに集約される点も非常に便利です。
しかし、この便利さが故にCloud Loggingの費用が意図せずに高額になってしまう現象(通称クラウド破産)の危機があります。
Cloud Loggingの費用発生タイミングについて
まず、Cloud Loggingの費用がどのタイミングで発生するのかを説明します。
以下のドキュメントの図によるとCloud Loggingに送信されたデータはCloud Logging API, Log sinkを通過し、最終的にはLog Bucketに到達することが分かります。
そして、費用の発生タイミングはLog Bucketに格納されたタイミングです。 それよりも手前のCloud Logging API, Log sinkまででは費用は発生しません。
Cloud Loggingによるクラウド破産を防ぐためには、この費用発生タイミングについて理解することが大事です。
Log Bucketへの書き込みを止める方法
Log Bucketへの書き込みを止めるためには、Log Routerの設定を変える必要があります。
Cloud LoggingのLogs Router画面で、 _Default
Routerの設定を変更します。
_Required
ルーターによって書き込まれるログは監査ログであり、こちらはルーターの設定変更不可かつ費用がかからないので変更しません。
_Default
ルーター右端からEdit Routerを選択し、Routerの設定を変更するページを開きます。
一番下にExclude Filterの設定があるので、ここに除外したいログの種類を指定します。
この設定を変更すると、Log Bucketへの書き込みが止まり、費用が発生も止まります。
しかし、それと同時にLog base metricsやLog base alertなどのCloud Loggingによって提供されていた便利な機能も停止します。
そのため、Log Bucketへの書き込み停止は無闇に行うべきではなく、費用の問題が発生したログのみに対して行うべきです。
多くのケースではこの設定を変更する必要がありません。
書き込みを止めたログをCloud Logging以外に格納する方法
上記の手順で書き込みを停止したログはCloud Loggingには保存されません。そのため、ログは破棄されてしまい、ログを確認することができなくなります。
Cloud Loggingよりも費用の安い場所にログを格納する方法を紹介します。
Log RouterはLog Bucket以外の場所にログを書き込むことができます。
Cloud Storage, Pub/Sub, BigQueryの3つが書き込み先として設定できます。
費用が問題になって_Defaultへの書き込みを停止するログは大容量のログであることが多いので、BigQueryに書き込みを行ってみます。
以下のterraformファイルをapplyすることでBigQueryへの書き込みを行えます。
resource "google_logging_project_sink" "log_sink_to_bq" {
name = "log_sink_to_bq"
destination = "bigquery.googleapis.com/projects/<プロジェクトID>/datasets/<データセットID>"
filter = <<EOT
_Defaultから除外したログの条件を書く
EOT
unique_writer_identity = true
bigquery_options {
use_partitioned_tables = true
}
}
BigQueryへの書き込みをすると費用が発生しますが、Cloud Loggingの費用と比較するとかなり安いです。
_Defaultバケットへの書き込み & 30日間の保管には1GBあたり0.50USDがかかります。
一方で、BigQueryは、まず取り込みに1GBあたり0.05USDの費用がかかります。
さらに1ヶ月間の保管に1GBあたり0.02USDの費用がかかり、合計で1GBあたり0.07USDです。
このようにログをCloud LoggingではなくBigQueryに転送することでCloud Loggingの費用を大きく抑えられることが分かりました。
大量のログを保存しておきたいが費用が気になる方は試してみると良いでしょう。
繰り返しになりますが、Cloud Loggingに保存しないことで多くの便利機能が使えなくなりますので、費用のみを気にしてこの設定を入れるべきではありません。
ログ量が少ないならCloud Loggingに保存しても費用が問題になることはないです。