コンソールへ移動

ログの書き込みと表示

ロギングは、コードのデバッグとモニタリングに重要なツールです。Cloud Functions には、ウェブ用の開発の際と同じ console オブジェクトがあります。

ログの書き込み

シンプルなログ

関数からログ行を出力するには、console.logconsole.error などの標準の JavaScript のロギング呼び出しを使用します。

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • console.log() コマンドのログレベルは INFO です。
  • console.info() コマンドのログレベルは INFO です。
  • console.warn() コマンドのログレベルは ERROR です。
  • console.error() コマンドのログレベルは ERROR です。
  • 内部システム メッセージのログレベルは DEBUG です。

カスタムの Stackdriver のログ

Cloud Functions のログは Stackdriver Logging に基づいています。Node.js 用の Stackdriver Logging ライブラリを使用すると、イベントのログを構造化データとして記録することができ、分析とモニタリングが容易になります。

const { Logging } = require('@google-cloud/logging');
// ...

// Instantiate the StackDriver Logging SDK. The project ID will
// be automatically inferred from the Cloud Functions environment.
const logging = new Logging();
const log = logging.log('my-custom-log-name');

// This metadata is attached to each log entry. This specifies a fake
// Cloud Function called 'Custom Metrics' in order to make your custom
// log entries appear in the Cloud Functions logs viewer.
const METADATA = {
  resource: {
    type: 'cloud_function',
    labels: {
      function_name: 'CustomMetrics',
      region: 'us-central1'
    }
  }
};
// ...

// Data to write to the log. This can be a JSON object with any properties
// of the event you want to record.
const data = {
  event: 'my-event',
  value: 'foo-bar-baz',

  // Optional 'message' property will show up in the Firebase
  // console and other human-readable logging surfaces
  message: 'my-event: foo-bar-baz'
};

// Write to the log. The log.write() call returns a Promise if you want to
// make sure that the log was written successfully.
const entry = log.entry(METADATA, data);
log.write(entry);

ログの表示

Cloud Functions のログは、Firebase コンソール、Stackdriver Logging UI、または firebase コマンドライン ツールで表示できます。

Firebase CLI の使用

firebase ツールでログを表示するには、functions:log コマンドを使用します。

firebase functions:log

特定の関数のログを表示するには、引数として関数名を入力します。

firebase functions:log --only <FUNCTION_NAME>

すべてのログ表示オプションについては、functions:log のヘルプを参照してください。

firebase help functions:log

Firebase コンソールの使用

Firebase コンソールから Cloud Functions のログを表示できます。

Stackdriver Logging UI の使用

Stackdriver Logging UI で Cloud Functions のログを表示できます。

ログの分析

Stackdriver Logging には強力なログ分析ツールのスイートが備わっており、これを利用して Cloud Functions をモニタリングできます。これらのツールは、カスタム ロギングと組み合わせると特に強力です。

ログベースの指標

Stackdriver Logging UI で、高度なフィルタ フィールドを使用して分析対象の関数にまでログ範囲を絞り込み、[フィルタを送信] をクリックしてログをフィルタリングします。たとえば、単一の関数からのログだけを分析することができます。

resource.type="cloud_function"
resource.labels.function_name="myCloudFunction"
resource.labels.region="us-central1"

カスタム JSON ペイロードが含まれるイベントをログに記録した場合は、指定したキーと値を使用してフィルタリングできます。

resource.type="cloud_function"
resource.labels.function_name="CustomMetrics"
jsonPayload.event="my-event"

ログをフィルタリングしたら、ログベースの指標を使用してそれらを分析できます。[指標を作成] ボタンをクリックして指標エディタを開き、指標のタイプを選択します。

  • カウンタ指標: フィルタに一致するログエントリの数をカウントします。たとえば、特定のイベントが発生した回数をカウントできます。
  • 分布指標: フィルタに一致するログエントリからの数値データを累積します。たとえば、関数内の特定の操作のレイテンシを追跡できます。

テキストベースのログの場合(関数内で console.log() によって出力されたログなど)、正規表現を使用して textPayload フィールドから値とラベルを抽出できます。構造化データを含むカスタムログの場合は、jsonPayload フィールドのデータに直接アクセスできます。

グラフとアラート

自分の関数をモニタリングするためのログベースの指標を作成したら、それらの指標に基づいてグラフやアラートを作成できます。たとえば、経時的なレイテンシを視覚化するグラフを作成したり、特定のエラーが非常に多く発生した場合に知らせるアラートを作成したりできます。

グラフやアラートのポリシーでログベースの指標を使用する方法については、グラフとアラートの作成をご覧ください。