Stackdriver Logging でできること

Naofumi Yamada

Naofumi Yamada

Data Engineer

この記事は Stackdriver LoggingとBQシンクの差(料金と検索性、保存期間)を知りたい の対応記事です。rhoboro さん、依頼ありがとうございます。

はじめに#

1 ヶ月前にしたことを思い出せますか。思い出せないなら Stackdriver Logging を使いましょう。 1 ヶ月以上前にしたことを思い出せますか。思い出せないなら Stackdriver Logging のログシンクを使いましょう。

そもそも Stackdriver でできること#

「サービス、コンテナ、アプリケーション、インフラストラクチャのモニタリングと管理。 」とあるように、監視系です。 その中でもいくつかのサービスに分かれています。

この記事では、「過去に起きたこと」のログに焦点を当てて、Stackdriver Logging でできることを紹介します。

Stackdriver Logging でできること#

Google Cloud Platform や Amazon Web Services からのログデータやイベントの格納、検索、分析、モニタリング、通知ができます。 書き込むこともできるのですが、今回は読み込みに絞っての紹介です。

ログの表示#

まずは公式ドキュメントを元に、ログを表示して何が吐かれているのか見てみましょう。 除外フィルタを触っていなければ Google Cloud Platform の全てのサービスのログが見られるはずです。 いろんなところをグリグリして、ログフィルタに慣れましょう(ちょっと遅延が大きいサービスですが)。

グリグリしていたら、集計もしてみたくなってきませんか。そうなったらログベースの指標の概要にいきましょう。

ログベースの指標の概要#

ログがグリグリできるようになったら、指標を閲覧、グリグリできるようになりましょう。 指標をいじれるようになると、ログフィルタと合わせて、グラフ化やアラート作成ができます。

監査ログ#

ここまでグリグリやってきたもの誰がいつ吐いたものでしょうか。 答えは、監査ログです。GCP の監査ログはおしゃべりで、ずっとログを吐き続けています(後述しますが、黙らせることもできません)。 stdout や stderr に書いたり、意図的に Logging API を使ったりしていなければ、ほとんど全てが監査ログなはずです。

詳細はリンク先を見ていただきたいですが、重要な表を抜粋します。 この表は、監査ログを持つサービス一覧です(2020 年 1 月 27 日現在)。

監査ログを持つサービス管理 アクティビティ ログデータ アクセス ログ
App EngineGAなし
Application Identity4ベータ版なし
BigQueryGAGA
Cloud AutoMLベータ版ベータ版
Cloud Bigtableベータ版なし
Cloud Billingベータ版なし
Cloud ComposerGAなし
Cloud DataflowGAなし
Cloud DataprocGAGA
Cloud DatastoreGAGA
Cloud Deployment ManagerGAGA
Cloud Data Loss PreventionGAGA
Cloud DNSGAGA
Cloud Functionsベータ版ベータ版
Cloud Genomicsベータ版ベータ版
Cloud Healthcareベータ版ベータ版
Cloud Identity and Access ManagementGAGA
Cloud Identity-Aware ProxyなしGA
Cloud IoT CoreGAGA
Cloud Key Management ServiceGAGA
Cloud Memorystoreベータ版ベータ版
AI Platformベータ版ベータ版
Cloud Pub/SubGAGA
Cloud Runベータ版ベータ版
Cloud Source RepositoriesGAGA
Cloud SpannerGAGA
Cloud SQLGAGA
Cloud Storage5GAGA
Cloud AutoML VisionGAなし
Compute EngineGAGA
Compute Engine シリアルポート アクセスGAなし
Container Analysisベータ版ベータ版
Cloud BuildGAGA
DialogflowGAGA
Google Kubernetes EngineGAGA
Service ManagementGAなし
Resource ManagerGAGA
Stackdriver DebuggerGAGA
Stackdriver Error ReportingGAGA
Stackdriver LoggingGAGA
Stackdriver MonitoringGAGA
Stackdriver TraceなしGA
Stackdriver ProfilerなしGA

これらのサービスは意識することなく、ログを吐き続けてくれていて、後から自由にログを追うことができます。 しかし、保存期間に制限があります。

監査ログのタイプ保持期間
管理アクティビティ400 日
データアクセス30 日
システム イベント400 日

提供しているサービスによっては、データアクセス 30 日はとても短いことでしょう。 ログエントリをエクスポートすれば、永続化できます(もちろん不要になったら削除もできます)。

ちなみに具体的な監査ログを確認する場合には、Cloud Audit Logging 活用のベスト プラクティス を参考にフィルタリングができます。 記事からの抜粋になりますが、以下のフィルタで SetIamPolicy の利用状況や保持期間などが確認できます。

resource.type="project"
logName="projects/a-project-id-here/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.methodName="SetIamPolicy"

ログの除外#

ログが鬱陶しい場合には、除外もできます。 Stackdriver Logging の料金は $0.5/GiB ですが、気になる場合には除外を行いましょう。

注意点として、この料金には監査ログ(すべての管理アクティビティ ログと BigQuery データアクセス ログ)は含まれません。 監査ログは無料であり、除外することはできないことに留意しましょう。

逆に含まれるログは、意図的に出した物です。 例えば Cloud Functions では、Logging API で意図的に書いたデータ、 stdout や stderr に書かれたデータは通常のログになります(情報元:ログの書き込み)。

ログのエクスポートの概要#

Stackdriver Logging そのままでは、30 日と 400 日の制約があるため、ログの長期保存に向きません。 長期保存や BigQuery で分析したい、他のアプリケーションと連携したいといった場合にはエクスポートしましょう。

設定値#

重要な設定値を 2 つ紹介します。

ログフィルタ#

エクスポートするログエントリを選択します。 高度なログフィルタ をみながら、用途に合わせて設計しましょう。

エクスポート先#

サポートされているエクスポート先は 3 つです。

  • 長期保存するなら Cloud Storage
  • データ分析するなら BigQuery
  • 連携ストリーミングするなら Cloud Pub/Sub

シンクを作成する#

簡単にエクスポートできるので、ビジネスを監視するのに重要な値がある場合には積極的に活用しましょう。

活用例を挙げてみます。

App Engine へのリクエストのログエントリ#

リクエストログをとりあえず、Cloud Storage に保管して、バックアップに使えます。

resource.type=gae_app AND
logName:request_log

BigQuery の実行完了したジョブのログエントリ#

実行クエリを BigQuery でデータ分析して、重いクエリを発見するのに使えます。 Stackdriver Logging を用いて BigQuery テーブルの最終参照日を求める でも利用しています。

resource.type=bigquery_resource AND
proto_payload.method_name=jobservice.jobcompleted

Compute Engine の重大度が ERROR 以上のログエントリ#

ERROR を Cloud Pub/Sub から外部サービス連携して通知に使えます。

resource.type=gce_instance AND
severity>=ERROR

データを使う#

あとは、データが随時溜まっていくので、処理するパイプを作るだけです。 Cloud Storage に保管してあるならバックアップを元に再現できるような仕組みを、 BigQuery に保持するなら定期的な目視ができるデータパイプラインを作りましょう。 Cloud Pub/Sub に転送しているなら Slack 通知などサブスクライブする仕組みまで作り込み、ログを余すとこなく活用しましょう。

おわりに#

Stackdriver Logging でできることを公式ドキュメントをかじりながら一通り眺めました。 Stackdriver Logging も進化し続けているサービスなので、まずは公式ドキュメントを眺めるのが重要です。 応用として、ログフィルタを 3 つ紹介しました。ビジネスに合わせてログを活用できると、 よりデータドリブンな組織運営ができるのではないでしょうか。 ぜひ、Stackdriver Logging を活用しましょう。