ロギングは、コードをデバッグおよび監視するための重要なツールです。 Cloud Functions には、そのロガー SDK、カスタムの Google Cloud Logging、または Web 用に開発するためのconsole
オブジェクト標準を使用するオプションが用意されています。
ログの書き込み
Cloud FunctionsロガーSDK はほとんどの状況で推奨されますが、次の理由で他のオプションのいずれかを選択する場合があります。
- 既存のコード ベースがあり、
console.log
からリファクタリングしたくない場合。 - あなたは Cloud Logging(以前の StackDriver Logging)に精通しており、カスタム ロギングに使用したいと考えています。
Cloud Functions ロガー SDK の使用
Cloud Functions ロガー SDK は、 console.log
ステートメントと同様の API を持ち、他のログ レベルをサポートする標準インターフェースを提供します。この SDK を使用すると、構造化データを使用してイベントをログに記録できるため、分析と監視が容易になります。
ロガー SDK は、ワイルドカード インポートの一部としてログ エントリをサポートします。例えば:
const functions = require("firebase-functions");
functions.logger.log("Hello from info. Here's an object:", someObj);
または、個別のエクスポートを使用できます。この例は、最後の引数としてログに添付された構造化データを示しています。
const { warn } = require("firebase-functions/logger");
// Attach structured data to the log as the last argument.
warn("This is a 'WARNING' severity message with some metadata.", {
key1: 'val1',
key2: 'val2'
});
-
logger.log()
コマンドのログ レベルはINFOです。 -
logger.info()
コマンドのログ レベルはINFOです。 -
logger.warn()
コマンドのログ レベルはERRORです。 -
logger.error()
コマンドのログ レベルはERRORです。 - 内部システム メッセージのログ レベルはDEBUGです。
logger.write()
を使用すると、ログ エントリに加えて、ログ重大度レベルCRITICAL
、 ALERT
、およびEMERGENCY
を書き込むことができます。 LogSeverityを参照してください。
カスタム Cloud Logging ログ
ロガー SDK を使用した Cloud Functions のログは、 Cloud Loggingによってサポートされています。 Node.js 用の Cloud Logging ライブラリを使用して、構造化データでイベントをログに記録し、分析とモニタリングを容易にすることができます。
const { Logging } = require('@google-cloud/logging');
// ...
// Instantiate the 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);
console.log
使用
関数からログを記録するための推奨される解決策は、ロガー SDKを使用することです。代わりに、 console.log
やconsole.error
などの標準の JavaScript ロギング呼び出しを使用できますが、最初に、標準メソッドが正しく機能するようにパッチを当てる特別なモジュールを要求する必要があります。
require("firebase-functions/logger/compat");
ロガー互換モジュールを要求したら、コードで通常どおりconsole.log()
メソッドを使用できます。
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です。
ログの表示
Cloud Functions のログは、 Google Cloud Console 、Cloud Logging UI、またはfirebase
コマンドライン ツールを介して表示できます。
Firebase CLI の使用
firebase
ツールでログを表示するには、 functions:log
コマンドを使用します。
firebase functions:log
特定の関数のログを表示するには、関数名を引数として指定します。
firebase functions:log --only <FUNCTION_NAME>
すべてのログ表示オプションについては、 functions:log
のヘルプを参照してください。
firebase help functions:log
Google クラウド コンソールの使用
Google Cloud Consoleで関数のログを表示できます。
Cloud Logging UI の使用
Cloud Logging UIで Cloud Functions のログを表示できます。
ログの分析
Cloud Logging は、Cloud Functions のモニタリングに使用できる強力なログ分析ツールのスイートを提供します。これらのツールは、カスタム ロギングと組み合わせると特に強力になります。
ログベースの指標
Cloud Logging UI で、高度なフィルタ フィールドを使用してログの範囲を分析する関数に絞り込み、[フィルタを送信] をクリックしてログをフィルタリングします。たとえば、1 つの関数からのログのみを分析できます。
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
フィールドのデータに直接アクセスできます。
チャートとアラート
関数を監視するためのログベースのメトリクスを作成したら、これらのメトリクスに基づいてグラフとアラートを作成できます。たとえば、時間の経過に伴うレイテンシを視覚化するグラフを作成したり、特定のエラーが頻繁に発生した場合に通知するアラートを作成したりできます。
グラフとアラート ポリシーでログベースのメトリックを使用する方法の詳細については、グラフとアラートの作成を参照してください。