Scrivere e visualizzare i registri

La registrazione è uno strumento importante per il debug e il monitoraggio del codice. Cloud Functions ti offre la possibilità di utilizzare il suo SDK logger, il Google Cloud Logging personalizzato o lo standard degli oggetti 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 questi 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 logger di Cloud Functions fornisce un'interfaccia standard che ha 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 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 singole esportazioni. Questo esempio mostra i dati strutturati allegati al log come ultimo argomento:

const { warn } = require("firebase-functions/lib/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 log INFO .
  • I comandi logger.info() hanno il livello di log INFO .
  • I comandi logger.warn() hanno il livello di registro ERRORE .
  • I comandi logger.error() hanno il livello di registro ERRORE .
  • 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 di registrazione cloud personalizzati

I log di Cloud Functions con l'SDK logger sono supportati da Cloud Logging . Puoi utilizzare la libreria Cloud Logging per Node.js per registrare eventi con dati strutturati, consentendo analisi e 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'utilizzare l' SDK 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 per funzionare correttamente:

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

Dopo aver richiesto il modulo di compatibilità del logger, puoi utilizzare i metodi console.log() normalmente 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 log INFO .
  • I comandi console.info() hanno il livello di log INFO .
  • I comandi console.warn() hanno il livello di log ERRORE .
  • I comandi console.error() hanno il livello di registro ERRORE .
  • I messaggi di sistema interni hanno il livello di registro DEBUG .

Visualizzazione dei registri

I log per le funzioni cloud sono visualizzabili nella console Firebase, nell'interfaccia utente di Cloud Logging o tramite lo strumento della riga di comando di 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 registri per una funzione specifica, fornire il nome della funzione come argomento:

firebase functions:log --only <FUNCTION_NAME>

Per la gamma completa delle opzioni di visualizzazione del registro, vedere la guida per functions:log :

firebase help functions:log

Utilizzo della console Firebase

Puoi visualizzare i registri per le funzioni cloud dalla console Firebase.

Utilizzo dell'interfaccia utente di registrazione cloud

È possibile visualizzare i registri per le funzioni cloud nell'interfaccia utente di registrazione cloud.

Analisi dei log

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

Metriche basate sui log

Nell'interfaccia utente di Cloud Logging, utilizza il campo del filtro avanzato per restringere l'ambito del registro alla funzione che desideri analizzare, quindi fai clic su Invia filtro per filtrare i registri. Ad esempio, puoi analizzare solo i registri da 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 metriche basate sui log . Fare clic sul pulsante Crea metrica per aprire l'editor di metriche e selezionare un tipo di metrica:

  • Metriche contatore: conta il numero di voci di registro che corrispondono a un filtro. Ad esempio, puoi contare il numero di volte in cui si verifica un determinato evento.
  • Metriche di distribuzione: accumula dati numerici dalle voci di registro 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 usando espressioni regolari. Per i log personalizzati con dati strutturati puoi accedere direttamente ai dati nel campo jsonPayload .

Grafici e avvisi

Dopo aver creato le metriche basate sui 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 log nei grafici e nei criteri di avviso.