Cloud Run 関数ログの表示と書き込み
ランタイムログの書き込み
Cloud Run functions には、デフォルトで簡単なランタイムのロギング機能が含まれています。stdout
または stderr
に書き込まれたログは、Google Cloud コンソールに自動的に表示されます。より詳細なロギングを行うには、Cloud Logging クライアント ライブラリを使用します。
デフォルトでは、ログのペイロードは次のスニペットのように単純なテキスト文字列です。この文字列は、ログエントリの textPayload
フィールドに格納されます。
Node.js
ほとんどのログエントリにはログレベルが関連付けられていません。たとえば、次のようなものです。console.log()
、console.info()
、console.warn()
、またはconsole.error()
を使用して出力されたログstdout
またはstderr
に直接書き込まれたログ
内部システム メッセージのログレベルは DEBUG
です。
Python
- 標準出力または標準エラーに出力されるログにはログレベルが関連付けられていません。
- 内部システム メッセージのログレベルは
DEBUG
です。
Go
stdout
またはstderr
に出力されるログにはログレベルが関連付けられていません。- 内部システム メッセージのログレベルは
DEBUG
です。
Java
stdout
またはstderr
に出力されるログにはログレベルが関連付けられていません。- 内部システム メッセージのログレベルは
DEBUG
です。
C#
stdout
(Console.WriteLine
など)やstderr
(Console.Error.WriteLine
など)に書き込まれたテキストにログレベルはありません。- ASP.NET Core のログレベルは、次のように Cloud Logging レベルにマッピングされます。
LogLevel.Trace
とLogLevel.Debug map
は Cloud LoggingDEBUG
にマッピングされます。LogLevel.Information
は Cloud LoggingINFO
にマッピングされます。LogLevel.Warning
は Cloud LoggingWARNING
にマッピングされます。LogLevel.Error
は Cloud LoggingERROR
にマッピングされます。LogLevel.Critical
は Cloud LoggingCRITICAL
にマッピングされます。
Ruby
ログエントリには、関連付けられたログレベルはありません。
PHP
構造化ログへの書き込み
上記のデフォルトのテキストログには、関連するログレベルがありません。ログレベルなどの特定のフィールドをログエントリに含めるには、シリアル化された JSON 形式の 1 行でログを stdout
または stderr
に書き込むことができます。この行は Cloud Run functions によって取得され、解析された後、textPayload
ではなく jsonPayload
フィールドに配置されます。以下のスニペットは、このような構造化ログを書き込む方法を示しています。
Node.js
Python
構造化ロギングは、Python 3.8 以降でサポートされています。
Go
各ログエントリの構造は、Entry
タイプによって指定されます。
Entry 構造体がログに記録されると、String
メソッドが呼び出され、Cloud Logging で想定されている JSON 形式にマーシャリングされます。
Java
logback.xml
の構成で Logstash JSON Encoder を有効にして、Logback と SLF4J での JSON ロギングを有効にします。
メッセージ内の特別な JSON フィールドの処理
特殊フィールドのドキュメントで説明されているように、構造化されたデータを JSON 辞書として提供すると、いくつかの特殊フィールドが jsonPayload
から削除され、生成された LogEntry
の対応フィールドに書き込まれます。
たとえば、JSON に severity
プロパティが含まれている場合、jsonPayload
から削除され、代わりにログエントリの severity
として表示されます。message
プロパティが存在する場合は、ログエントリのメイン表示テキストとして使用されます。
クライアント ライブラリを使用したログの書き込み
Cloud Logging クライアント ライブラリを使用すると、別の方法でログを書き込むことができます。これらのライブラリを使用すると、プログラミング言語の標準ロギング メカニズムを使用して、サポートされているさまざまなロギング フレームワークと統合できます。また、クライアント ライブラリでは、一部の情報を自動的に取得し、フィールドに入力するためのインターフェースが提供されるため、特別な JSON フィールドを簡単に入力できます。
クライアント ライブラリを使用すると、Cloud Logging API によって同期または非同期でログを書き込むことができます。一部のクライアント ライブラリでは、構造化ログを stdout
または stderr
に直接書き込むことができます。ログを非同期で書き込むと、関数が予期せず終了し、ログエントリが失われる可能性があります。また、Logging API を使用した同期ロギングでは、API 呼び出しの完了を待つ必要があるため、関数の実行時間が長くなります。
ランタイムログの表示
コマンドライン ツールの使用
Cloud Run functions のログは、Cloud Logging UI または Google Cloud CLI で表示できます。
gcloud CLI でログを表示するには、gcloud functions logs read
コマンドを使用します。
gcloud functions logs read --gen2
特定関数のログを表示するには、引数として関数名を入力します。
gcloud functions logs read FUNCTION_NAME --gen2
他の言語の関数の場合、x-cloud-trace-context
リクエスト ヘッダーを使用して、同じ関数の実行からログを関連付けることができます。
すべてのログ表示オプションについては、gcloud functions logs read
のドキュメントをご覧ください。
Logging ダッシュボードの使用
Google Cloud コンソールから Cloud Run functions のランタイムログを表示することもできます。
Logging API の使用
Cloud Logging API でもランタイムログの書き込みや取得を行うことができます。Cloud Logging クライアント ライブラリには、Logging API 用のインターフェースが用意されています。
Node.js
詳細については、Node.js クライアント ライブラリのリファレンスをご覧ください。Python
詳細については、Python クライアント ライブラリのリファレンスをご覧ください。Go
詳細については、Go クライアント ライブラリのリファレンスをご覧ください。Java
詳細については、Java クライアント ライブラリのリファレンスをご覧ください。C#
Ruby
PHP
Java のその他のロギング オプションについては、Java ロギングをご覧ください。
インスタンス スケーリング ログについて
関数に対して新しいインスタンスが起動されると、Cloud Logging は varlog/system
ログ名の下にログエントリを追加し、各インスタンスが作成された理由を示します。ログエントリの形式は次のとおりです。
Starting new instance. Reason: REASON - DESCRIPTION
次の表に、インスタンスの説明の内訳を示します。
理由 | 説明 |
---|---|
CUSTOMER_MIN_INSTANCE |
お客様が構成した、関数の最小インスタンス。 |
SCHEDULED |
構成されたスケーリング要因(CPU 使用率、リクエスト スループットなど)とその目標値によって起動されたインスタンス。 |
OVERFLOW |
現在のトラフィック用の既存の容量が見つからないために起動されたインスタンス。 |
ランタイムログの処理
Cloud Logging のイベントに応答するには、そのログを Cloud Run 関数に転送します。詳細については、Cloud Logging でのセカンド パーティ トリガーページをご覧ください。
ビルドイメージのログの表示
デプロイ プロセスのビルドイメージのステップのログも確認できます。リンクをクリックして詳細をご確認ください。