Écrire et afficher les journaux

La journalisation est un outil important pour le débogage et la surveillance du code. Cloud Functions vous offre la possibilité d'utiliser son SDK d'enregistreur, Google Cloud Logging personnalisé ou la norme d'objet de console pour le développement pour le Web.

Journal d'écriture

Bien que le SDK Cloud Functions logger soit recommandé dans la plupart des situations, vous pouvez choisir l'une des autres options pour les raisons suivantes :

  • Vous avez une base de code existante et préférez ne pas refactoriser à partir de console.log .
  • Vous connaissez Cloud Logging (anciennement StackDriver logging) et préférez l'utiliser pour la journalisation personnalisée.

Utiliser le SDK de l'enregistreur Cloud Functions

Le SDK Cloud Functions Logger fournit une interface standard qui possède une API similaire aux instructions console.log et prend en charge d'autres niveaux de journalisation. Vous pouvez utiliser ce SDK pour enregistrer des événements avec des données structurées , ce qui facilite l'analyse et la surveillance.

Le SDK de l'enregistreur prend en charge les entrées de journal dans le cadre d'une importation de caractères génériques. Par exemple:

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

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

Alternativement, vous pouvez utiliser des exportations individuelles. Cet exemple illustre des données structurées attachées au journal comme dernier argument :

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'
});
  • Les commandes logger.log() ont le niveau de journalisation INFO .
  • Les commandes logger.info() ont le niveau de journalisation INFO .
  • Les commandes logger.warn() ont le niveau de journalisation ERROR .
  • Les commandes logger.error() ont le niveau de journalisation ERROR .
  • Les messages système internes ont le niveau de journalisation DEBUG .

Avec logger.write() , vous pouvez écrire des entrées de journal en plus des niveaux de gravité du journal CRITICAL , ALERT et EMERGENCY . Voir LogSeverity .

Journaux Cloud Logging personnalisés

Les journaux Cloud Functions avec le SDK logger sont sauvegardés par Cloud Logging . Vous pouvez utiliser la bibliothèque Cloud Logging pour Node.js pour consigner des événements avec des données structurées, ce qui facilite l'analyse et la surveillance.

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

Utilisation console.log

La solution recommandée pour la journalisation à partir d'une fonction consiste à utiliser le SDK logger . Vous pouvez à la place utiliser des appels de journalisation JavaScript standard tels que console.log et console.error , mais vous devez d'abord exiger un module spécial pour corriger les méthodes standard afin qu'elles fonctionnent correctement :

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

Une fois que vous avez requis le module de compatibilité de l'enregistreur, vous pouvez utiliser les méthodes console.log() comme d'habitude dans votre code :

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • Les commandes console.log() ont le niveau de journalisation INFO .
  • Les commandes console.info() ont le niveau de journalisation INFO .
  • Les commandes console.warn() ont le niveau de journalisation ERROR .
  • Les commandes console.error() ont le niveau de journalisation ERROR .
  • Les messages système internes ont le niveau de journalisation DEBUG .

Affichage des journaux

Les journaux de Cloud Functions sont consultables dans Google Cloud Console , l'interface utilisateur Cloud Logging ou via l'outil de ligne de commande firebase .

Utilisation de la CLI Firebase

Pour afficher les journaux avec l'outil firebase , utilisez la commande functions:log :

firebase functions:log

Pour afficher les journaux d'une fonction spécifique, indiquez le nom de la fonction en tant qu'argument :

firebase functions:log --only <FUNCTION_NAME>

Pour la gamme complète d'options d'affichage du journal, consultez l'aide de functions:log :

firebase help functions:log

Utilisation de Google Cloud Console

Vous pouvez afficher les journaux des fonctions dans Google Cloud Console .

Utiliser l'interface utilisateur Cloud Logging

Vous pouvez afficher les journaux de Cloud Functions dans l'interface utilisateur de Cloud Logging.

Analyse des journaux

Cloud Logging propose une suite puissante d'outils d'analyse de journaux que vous pouvez utiliser pour surveiller vos fonctions Cloud. Ces outils sont particulièrement puissants lorsqu'ils sont associés à une journalisation personnalisée .

Métriques basées sur les journaux

Dans l'interface utilisateur de Cloud Logging, utilisez le champ de filtre avancé pour limiter la portée du journal à la fonction que vous souhaitez analyser, puis cliquez sur Soumettre le filtre pour filtrer les journaux. Par exemple, vous pouvez analyser uniquement les journaux d'une seule fonction :

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

Si vous avez consigné des événements avec des charges utiles JSON personnalisées, vous pouvez filtrer à l'aide des clés et des valeurs que vous avez fournies :

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

Une fois que vous avez filtré les journaux, vous pouvez les analyser à l'aide de métriques basées sur les journaux . Cliquez sur le bouton Créer une métrique pour ouvrir l'éditeur de métriques et sélectionnez un type de métrique :

  • Métriques de compteur : comptez le nombre d'entrées de journal qui correspondent à un filtre. Par exemple, vous pouvez compter le nombre de fois qu'un certain événement se produit.
  • Métriques de distribution : accumulez des données numériques à partir des entrées de journal qui correspondent à un filtre. Par exemple, vous pouvez suivre les latences de certaines opérations au sein de vos fonctions.

Pour les journaux textuels, tels que ceux résultant de console.log() dans vos fonctions, vous pouvez extraire des valeurs et des étiquettes du champ textPayload à l'aide d'expressions régulières. Pour les journaux personnalisés avec des données structurées, vous pouvez accéder directement aux données dans le champ jsonPayload .

Graphiques et alertes

Une fois que vous avez créé des métriques basées sur les journaux pour surveiller vos fonctions, vous pouvez créer des graphiques et des alertes basés sur ces métriques. Par exemple, vous pouvez créer un graphique pour visualiser la latence dans le temps ou créer une alerte pour vous informer si une certaine erreur se produit trop souvent.

Reportez-vous à Création de graphiques et d'alertes pour obtenir des informations détaillées sur l'utilisation des métriques basées sur les journaux dans les graphiques et les règles d'alerte.