DevOps & SRE

Google Cloud Logging Python v3.0.0 スタートガイド

logging.jpg

※この投稿は米国時間 2022 年 2 月 8 日に、Google Cloud blog に投稿されたものの抄訳です。

このたび、Google Cloud Python Logging ライブラリのメジャー アップデートをリリースしましたのでお知らせいたします。

v3.0.0 では、Python のデベロッパーは Google Cloud からさらに簡単にログを送受信でき、アプリケーションの状況をリアルタイムに把握できるようになりました。  Google Cloud を使用している Python デベロッパーの皆さんは、この機会にぜひ Cloud Logging をお試しください。

「google-cloud-logging」ライブラリに馴染みのない方でも、簡単に始められます。まず、pip を使ってライブラリをダウンロードします。

  $ pip install "google-cloud-logging>=3.0.0"

ここで、Python の組み込み「logging」ライブラリと連動するようにクライアント ライブラリを設定します。これにより、すべての標準 Python ログ ステートメントが Google Cloud にデータを送るようになります。

  # Google Cloud Logging python クライアント ライブラリを設定
import google.cloud.logging
client = google.cloud.logging.Client()
client.setup_logging()

# Python' の標準 Logging ライブラリを使用して GCP にログを送信

import logging
logging.warning("Hello World")

上記で示されているように、ログの作成にはPython の標準「logging」インターフェースを使用することをおすすめします。ただし、他の Google Cloud Logging の機能(ログの読み込み、ログシンクの管理など)にアクセスする必要がある場合には、直接「google.cloud.logging」を使用できます。:

  import google.cloud.logging

client = google.cloud.logging.Client()
logger = client.logger(name="log_id")

client.list_entries(max_size=5) # read logs from GCP
logger.log("hello world", resource={"type":"global", "labels":{}}) # write log to GCP

今回のリリースで追加された主な機能をご紹介します。

より多くのクラウド環境をサポート

1.jpg

google-cloud-logging の以前のバージョンでは、 App Engine Kubernetes Engine のみがサポートされていました。Cloud Run や Cloud Functions といったサーバーレス環境では、しばしばライブラリでログがドロップする現象が発生するとの報告がユーザーから寄せられていました。これは、ライブラリがネットワーク上でログを一括で送信していたためでした。サーバーレス環境がスピンダウンすると、未送信のバッチが失われる恐れがあったのです。

v3.0.0 では、サポートされる環境(GKE、Cloud Run、Cloud Functions)で GCP に組み込まれた 構造化 JSON Logging 機能を使って、この問題を修正しています。構造化ログをサポートしている環境でライブラリが実行されていることを検出すると、新しい StructuredLogHandler が自動的に使用されます。この StructuredLogHandler は、標準出力に出力された JSON 文字列としてログを書き込みます。Google Cloud の組み込みエージェントは、ログを生成したコードがスピンダウンした場合でも、ログを解析し、Cloud Logging に配信します。

構造化ロギングはサーバーレス環境での信頼性がさらに高く、v3.0.0 では主要な GCP のコンピューティング環境をすべてサポートしています。従来通りネットワーク上でログを送信したい場合、CloudLoggingHandler インスタンスで手動でライブラリを設定できます。

  from google.cloud.logging.handlers import CloudLoggingHandler
from google.cloud.logging_v2.handlers import setup_logging

# ネットワーク経由でログを送信する CloudLoggingHandler を明示的に設定
handler = CloudLoggingHandler(client)
setup_logging(handler)

import logging
logging.warning(“Hello World”)

メタデータの自動検出

2.jpg

アプリケーションのトラブルシューティングを行う際には、できるだけ多くの環境に関する情報をアプリケーションのログに記録しておくと便利です。「google-cloud-logging」は、環境に関するメタデータを検出して各ログ メッセージに添付することにより、このプロセスの支援を試みます。次のフィールドが現在サポートされています。

ライブラリは、可能な限りこうしたデータの入力を試みますが、これらの項目は、ライブラリを使用するデベロッパーが明示的に設定することもできます。

  logging.info("hello", extra={
    "labels": {"foo": "bar"},
    "http_request": {"requestUrl": "localhost"},
    "trace": "01234"
})

標準ライブラリのインテグレーションにおける JSON サポート

3.jpg

Google Cloud Logging は、 LogEntries の文字列と JSON ペイロードの両方をサポートしていますが、これまで  Python 標準ライブラリのインテグレーションでは文字数のペイロードでしかログを送信できませんでした。

「google-cloud-logging」の v3 では、  JSON データのログの方法には次の 2 つがあります。

1. JSON で解析可能な文字列を記録します。

  import logging
import json

data_dict = {"hello": "world"}
logging.info(json.dumps(data_dict))

2. Python Logging の「extra」引数を使って「json_fields」ディクショナリを渡します。

  import logging

data_dict = {"hello": "world"}
logging.info("message field", extra={"json_fields": data_dict})

次のステップ

v3.0.0 のバージョンでは、Google Cloud Logging Python ライブラリはさらに多くのコンピューティング環境をサポートしています。また、より有用なメタデータを検出し、JSON ログのさらに綿密なサポートも提供します。こうした主要な機能に加え、新しいログメソッドやさらに多くの制約なしの引数解析など、ユーザーエクスペリエンスの向上も実現しました。

今回のリリースについての詳細は、v3.0.0 移行ガイドをご覧ください。変更点などについて詳しく説明しています。ライブラリについて馴染みのない方には、google-cloud-logging ユーザーガイドもご用意しています。一般的な GCP でのオブザーバビリティについて知りたい場合は、Cloud Ops Sandbox を使って、テスト環境をスピンアップできます。

最後に、今回のリリースのご感想や新機能のリクエストなどの投稿をいただける場合は、Google の GitHub リポジトリで issue を開いてください。Google Cloud Logging ライブラリはオープンソース ソフトウェアです。新しい投稿者をお待ちしています。


- デベロッパー プログラム エンジニア、Daniel Sanche