Die Protokollierung ist ein wichtiges Tool zum Debuggen und Überwachen von Code. Cloud Functions bietet Ihnen die Möglichkeit, das Logger-SDK, benutzerdefiniertes Google Cloud Logging oder den console
für die Entwicklung für das Web zu verwenden.
Protokolle schreiben
Während das Cloud Functions Logger SDK für die meisten Situationen empfohlen wird, können Sie aus folgenden Gründen eine der anderen Optionen wählen:
- Sie haben eine vorhandene Codebasis und ziehen es vor, die Datei
console.log
nicht umzugestalten. - Sie sind mit Cloud Logging (ehemals StackDriver-Logging) vertraut und ziehen es vor, es für benutzerdefiniertes Logging zu verwenden.
Mit dem Logger-SDK von Cloud Functions
Das Cloud Functions-Logger-SDK bietet eine Standardschnittstelle, die eine ähnliche API wie console.log
Anweisungen hat und andere Protokollebenen unterstützt. Sie können dieses SDK verwenden, um Ereignisse mit strukturierten Daten zu protokollieren, was eine einfachere Analyse und Überwachung ermöglicht.
Das Logger-SDK unterstützt Protokolleinträge als Teil eines Wildcard-Imports. Zum Beispiel:
const functions = require("firebase-functions");
functions.logger.log("Hello from info. Here's an object:", someObj);
Alternativ können Sie einzelne Exporte verwenden. Dieses Beispiel zeigt strukturierte Daten, die als letztes Argument an das Protokoll angehängt sind:
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()
-Befehle haben die Protokollebene INFO . -
logger.info()
-Befehle haben die Protokollebene INFO . -
logger.warn()
-Befehle haben die Protokollebene WARNING . -
logger.error()
Befehle haben die Protokollebene ERROR . - Interne Systemmeldungen haben den Log-Level DEBUG .
Mit logger.write()
können Sie Protokolleinträge zusätzlich zu den Protokollschweregraden CRITICAL
, ALERT
und EMERGENCY
schreiben. Siehe LogSeverity .
Benutzerdefinierte Cloud Logging-Logs
Cloud Functions-Logs mit dem Logger-SDK werden durch Cloud Logging unterstützt. Sie können die Cloud Logging-Bibliothek für Node.js verwenden, um Ereignisse mit strukturierten Daten zu protokollieren, was eine einfachere Analyse und Überwachung ermöglicht.
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);
Verwenden von console.log
Die empfohlene Lösung für die Protokollierung aus einer Funktion ist die Verwendung des Protokollierungs-SDK . Sie können stattdessen standardmäßige JavaScript-Protokollierungsaufrufe wie console.log
und console.error
verwenden, aber Sie müssen zuerst ein spezielles Modul anfordern, um die Standardmethoden zu patchen, damit sie ordnungsgemäß funktionieren:
require("firebase-functions/logger/compat");
Sobald Sie das Logger-Kompatibilitätsmodul angefordert haben, können Sie die Methoden console.log()
wie gewohnt in Ihrem Code verwenden:
exports.helloError = functions.https.onRequest((request, response) => {
console.log('I am a log entry!');
response.send('Hello World...');
});
-
console.log()
-Befehle haben die Protokollebene INFO . -
console.info()
-Befehle haben die Protokollebene INFO . -
console.warn()
-Befehle haben die Protokollebene ERROR . -
console.error()
Befehle haben die Protokollebene ERROR . - Interne Systemmeldungen haben den Log-Level DEBUG .
Anzeigen von Protokollen
Protokolle für Cloud Functions können entweder in der Google Cloud Console , der Cloud Logging-Benutzeroberfläche oder über das firebase
-Befehlszeilentool angezeigt werden.
Verwenden der Firebase-CLI
Um Protokolle mit dem firebase
Tool anzuzeigen, verwenden Sie den Befehl functions:log
:
firebase functions:log
Um Protokolle für eine bestimmte Funktion anzuzeigen, geben Sie den Funktionsnamen als Argument an:
firebase functions:log --only <FUNCTION_NAME>
Die vollständige Palette der Anzeigeoptionen für Protokolle finden Sie in der Hilfe für functions:log
:
firebase help functions:log
Mit der Google Cloud Console
Sie können Protokolle für Funktionen in der Google Cloud Console anzeigen.
Verwenden der Cloud Logging-UI
Sie können Logs für Cloud Functions in der Cloud Logging-Benutzeroberfläche anzeigen .
Protokolle analysieren
Cloud Logging bietet eine leistungsstarke Suite von Protokollanalysetools, mit denen Sie Ihre Cloud Functions überwachen können. Diese Tools sind besonders leistungsfähig, wenn sie mit benutzerdefinierter Protokollierung kombiniert werden.
Logbasierte Metriken
Verwenden Sie in der Cloud Logging-Benutzeroberfläche das erweiterte Filterfeld, um den Protokollbereich auf die Funktion einzugrenzen, die Sie analysieren möchten, und klicken Sie dann auf Filter senden , um die Protokolle zu filtern. Beispielsweise könnten Sie nur Protokolle einer einzelnen Funktion analysieren:
resource.type="cloud_function"
resource.labels.function_name="myCloudFunction"
resource.labels.region="us-central1"
Wenn Sie Ereignisse mit benutzerdefinierten JSON-Payloads protokolliert haben, können Sie mithilfe der von Ihnen bereitgestellten Schlüssel und Werte filtern:
resource.type="cloud_function"
resource.labels.function_name="CustomMetrics"
jsonPayload.event="my-event"
Nachdem Sie die Protokolle gefiltert haben, können Sie sie mit protokollbasierten Metriken analysieren. Klicken Sie auf die Schaltfläche Metrik erstellen , um den Metrik-Editor zu öffnen und einen Metriktyp auszuwählen:
- Zählermetriken: Zählen Sie die Anzahl der Protokolleinträge, die einem Filter entsprechen. Sie könnten beispielsweise zählen, wie oft ein bestimmtes Ereignis eintritt.
- Verteilungsmetriken: sammeln numerische Daten aus Protokolleinträgen, die einem Filter entsprechen. Beispielsweise könnten Sie die Latenzen bestimmter Vorgänge innerhalb Ihrer Funktionen verfolgen.
Bei textbasierten Protokollen, wie sie beispielsweise aus console.log()
in Ihren Funktionen resultieren, können Sie mithilfe regulärer Ausdrücke Werte und Bezeichnungen aus dem Feld textPayload
extrahieren. Bei benutzerdefinierten Protokollen mit strukturierten Daten können Sie direkt auf die Daten im Feld jsonPayload
zugreifen.
Diagramme und Warnungen
Nachdem Sie protokollbasierte Metriken zur Überwachung Ihrer Funktionen erstellt haben, können Sie Diagramme und Warnungen basierend auf diesen Metriken erstellen. Sie könnten beispielsweise ein Diagramm erstellen, um die Latenz im Zeitverlauf zu visualisieren, oder eine Warnung erstellen, die Sie darüber informiert, wenn ein bestimmter Fehler zu oft auftritt.
Ausführliche Informationen zur Verwendung protokollbasierter Metriken in Diagrammen und Warnrichtlinien finden Sie unter Erstellen von Diagrammen und Warnungen.