Cloud RunジョブのログレベルをCloud Loggingへ反映する方法

こんにちは。磯野です。
Cloud RunでPythonプログラムを実行する際、ログレベルをCloud Loggingへ反映させる方法をご紹介します。

はじめに

Cloud Runのログは自動的にCloud Loggingへ反映される

Cloud Runのログは、print文やloggingライブラリを使用して標準出力に文字列を出力すると 自動的に Cloud Logging に記録 されます。

しかし、このままだとすべてログレベルがデフォルトとなってしまいます。(下記画像参照)

↑WARNINGやERRORレベルのログも、デフォルトとして表示されている

このままではエラー調査やフィルタの活用が難しくなってしまう、ということで、本記事ではログレベルの反映方法をご紹介します。

方法1:公式ドキュメントの記載方法を利用

下記を参考に設定します。

Python 用 Cloud Logging の設定  |  Google Cloud

コードの記載方法

ログの設定方法

import google.cloud.logging

client = google.cloud.logging.Client()

# 実行中の環境に基づいて Cloud Logging ハンドラを取得し、 
# このハンドラを Python のログモジュールと統合します。 
# デフォルトでは INFO レベル以上のすべてのログをキャプチャします。
client.setup_logging()

ログの出力

import logging

text = "Hello, world!"

logging.warning(text)

Cloud Loggingへの出力結果

無事にログレベルが反映されました。

ところが…
該当のCloud Runジョブ画面 >ログ という画面遷移であればログが表示されたのですが
該当のCloud Runジョブ画面 > 該当の実行ID > ログという画面遷移だと、ログが表示されませんでした。

labelsに”run.googleapis.com/execution_name”が付与されておらず、ジョブ単位にログをフィルタすることができなかったのが原因のようです。ジョブ単位にログをフィルタする必要がある場合は、方法2を推奨します。

※こちらGoogleの不具合のようで、googleapiのgithub上で本件issueになっていました。
追って解消されるかもしれません。

方法2:StructuredLogHandler()を使用する

コードの記載方法

ログの設定方法

import logging
import google.cloud.logging
from google.cloud.logging_v2.handlers import StructuredLogHandler

logger = logging.getLogger()
handler = StructuredLogHandler()
logger.setLevel(logging.INFO)
logger.addHandler(handler)

 

ログの出力

出力方法は方法1と同じため、割愛します

Cloud Loggingへの出力結果

ログレベルの反映・labelsの付与ができました。

 

まとめ

ログレベルの反映に苦労したので、記事にしました。

参考になれば幸いです。

著者について

データエンジニア。データ分析基盤の開発を主に担当しています。AWS・GCP学習中です!

磯野桃子をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(Google Cloud)は、Google Cloudの多彩なAIや各種サービスを活用したワンストップソリューションを提供します。SCSKのノウハウや体制を有効活用し、業務課題の解決に必要な全体検討と組み合わせで、最適な業務実装まで支援します。

Google Cloud運用・監視
シェアする
タイトルとURLをコピーしました