Firebase is back at Google I/O on May 10! Register now

Protokolle schreiben und anzeigen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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.