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

Scrivere e visualizzare i registri

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

La registrazione è uno strumento importante per il debug e il monitoraggio del codice. Cloud Functions ti offre la possibilità di utilizzare l'SDK del suo logger, Google Cloud Logging personalizzato o lo standard dell'oggetto console per lo sviluppo per il Web.

Scrivere registri

Sebbene l'SDK del logger di Cloud Functions sia consigliato per la maggior parte delle situazioni, potresti scegliere una delle altre opzioni per i seguenti motivi:

  • Hai una base di codice esistente e preferisci non eseguire il refactoring da console.log .
  • Hai familiarità con Cloud Logging (precedentemente StackDriver logging) e preferisci usarlo per la registrazione personalizzata.

Utilizzo dell'SDK del logger di Cloud Functions

L'SDK del logger di Cloud Functions fornisce un'interfaccia standard con un'API simile alle istruzioni console.log e supporta altri livelli di log. Puoi utilizzare questo SDK per registrare eventi con dati strutturati , consentendo un'analisi e un monitoraggio più semplici.

L'SDK del logger supporta le voci di registro come parte di un'importazione con caratteri jolly. Per esempio:

  const functions = require("firebase-functions");

  functions.logger.log("Hello from info. Here's an object:", someObj);

In alternativa, puoi utilizzare le singole esportazioni. Questo esempio mostra i dati strutturati allegati al log come ultimo argomento:

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'
});
  • I comandi logger.log() hanno il livello di registro INFO .
  • I comandi logger.info() hanno il livello di registro INFO .
  • I comandi logger.warn() hanno il livello di log WARNING .
  • I comandi logger.error() hanno il livello di log ERROR .
  • I messaggi di sistema interni hanno il livello di registro DEBUG .

Con logger.write() , puoi scrivere voci di registro oltre ai livelli di gravità del registro di CRITICAL , ALERT ed EMERGENCY . Vedere LogSeverity .

Registri personalizzati di Cloud Logging

I log di Cloud Functions con l'SDK del logger sono supportati da Cloud Logging . Puoi utilizzare la libreria Cloud Logging per Node.js per registrare eventi con dati strutturati, consentendo un'analisi e un monitoraggio più semplici.

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);

Utilizzando console.log

La soluzione consigliata per la registrazione da una funzione consiste nell'usare l' SDK del logger . Puoi invece utilizzare chiamate di registrazione JavaScript standard come console.log e console.error , ma devi prima richiedere un modulo speciale per correggere i metodi standard affinché funzionino correttamente:

require("firebase-functions/logger/compat");

Dopo aver richiesto il modulo di compatibilità del logger, puoi utilizzare i metodi console.log() come di consueto nel tuo codice:

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • I comandi console.log() hanno il livello di registro INFO .
  • I comandi console.info() hanno il livello di registro INFO .
  • I comandi console.warn() hanno il livello di log ERROR .
  • I comandi console.error() hanno il livello di log ERROR .
  • I messaggi di sistema interni hanno il livello di registro DEBUG .

Visualizzazione dei log

I log per Cloud Functions sono visualizzabili in Google Cloud Console , nell'interfaccia utente di Cloud Logging o tramite lo strumento a riga di comando firebase .

Utilizzo dell'interfaccia a riga di comando di Firebase

Per visualizzare i registri con lo strumento firebase , utilizzare il comando functions:log :

firebase functions:log

Per visualizzare i log per una funzione specifica, fornisci il nome della funzione come argomento:

firebase functions:log --only <FUNCTION_NAME>

Per l'intera gamma di opzioni di visualizzazione del registro, visualizzare la guida per functions:log :

firebase help functions:log

Utilizzando Google Cloud Console

Puoi visualizzare i log per le funzioni in Google Cloud Console .

Utilizzo dell'interfaccia utente di Cloud Logging

Puoi visualizzare i log per Cloud Functions nell'interfaccia utente di Cloud Logging.

Analisi dei log

Cloud Logging offre una potente suite di strumenti di analisi dei log che puoi utilizzare per monitorare le tue Cloud Functions. Questi strumenti sono particolarmente potenti se combinati con la registrazione personalizzata .

Metriche basate su log

Nell'interfaccia utente di Cloud Logging, utilizza il campo del filtro avanzato per restringere l'ambito del log alla funzione che desideri analizzare, quindi fai clic su Invia filtro per filtrare i log. Ad esempio, puoi analizzare solo i log di una singola funzione:

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

Se hai registrato eventi con payload JSON personalizzati, puoi filtrare utilizzando le chiavi e i valori che hai fornito:

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

Dopo aver filtrato i log, puoi analizzarli utilizzando le metriche basate sui log . Fare clic sul pulsante Crea metrica per aprire l'editor delle metriche e selezionare un tipo di metrica:

  • Metriche del contatore: conta il numero di voci di log che corrispondono a un filtro. Ad esempio potresti contare il numero di volte in cui si verifica un determinato evento.
  • Metriche di distribuzione: accumulano dati numerici dalle voci di log che corrispondono a un filtro. Ad esempio potresti tenere traccia delle latenze di determinate operazioni all'interno delle tue funzioni.

Per i log basati su testo, come quelli risultanti da console.log() nelle tue funzioni, puoi estrarre valori ed etichette dal campo textPayload utilizzando espressioni regolari. Per i log personalizzati con dati strutturati puoi accedere direttamente ai dati nel campo jsonPayload .

Grafici e avvisi

Dopo aver creato metriche basate su log per monitorare le tue funzioni, puoi creare grafici e avvisi basati su queste metriche. Ad esempio, puoi creare un grafico per visualizzare la latenza nel tempo o creare un avviso per farti sapere se un determinato errore si verifica troppo spesso.

Vedere Creazione di grafici e avvisi per informazioni dettagliate su come utilizzare le metriche basate sui registri nei grafici e nei criteri di avviso.