Personnalisation de 1.6.x Agent de journalisation pour prendre en charge l'analyse multiligne personnalisée pour les applications Node.js utilisant Winston dans des environnements non orchestrés

Ce tutoriel montre comment configurer la gestion des journaux multilignes de IBM® Cloud Logs Agent de journalisation pour une application Node.js utilisant la bibliothèque de journalisation Winston personnalisée. Cette configuration est destinée aux environnements non orchestrés, par exemple Linux et Windows, et modifie le fichier de configuration. Cette configuration garantit que les traces de pile et les journaux multilignes sont correctement regroupés sur IBM Cloud Logs.

Ce tutoriel nécessite le logiciel IBM Cloud Logs Agent de journalisation 1.6.2 ou une version ultérieure.

Avant de commencer

Avant de commencer à utiliser ce didacticiel, passez en revue les informations suivantes pour comprendre les concepts de Agent de journalisation et de multilignes.

Ce tutoriel suppose également que vous avez :

  • Une instance IBM Cloud Logs provisionnée et configurée.

  • Le site Agent de journalisation a été déployé dans un environnement non orchestré.

Les fichiers de configuration de ce tutoriel se trouvent à l'endroit où les fichiers du paquet ont été téléchargés lors de l'installation de Agent de journalisation.

Exemple de configuration de Winston

Supposons que votre application Node.js utilise Winston et enregistre les données dans la console au format suivant :

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'ddd MMM DD YYYY HH:mm:ss.SSS'
    }),
    winston.format.errors({ stack: true }),
    winston.format.printf(({ timestamp, level, message, stack }) => {
      const levelUpper = level.toUpperCase();
      const baseLog = `[${timestamp}] ${levelUpper} [Main] - ${message}`;
      if (stack) {
        return `${baseLog}\n${stack}`;
      }
      return baseLog;
    })
  ),
  transports: [
    new winston.transports.Console()
  ]
});

Ce format produit des entrées de journal qui commencent par un horodatage et un niveau, et des journaux multilignes, tels que les traces de pile d'erreur, qui suivent sur les lignes suivantes sans horodatage.

Winston enregistre généralement toutes les données de sortie, y compris les traces d'erreur, sous la forme d'une seule chaîne de caractères, de sorte qu'un analyseur multiligne n'est souvent pas nécessaire. Cependant, cet exemple montre ce qu'il faut faire si votre formateur imprime des journaux multilignes, et il permet d'illustrer la manière d'aborder l'analyse multiligne pour n'importe quel format personnalisé.

Cette configuration est fournie à titre d'exemple pour montrer comment gérer les journaux multilignes lors de l'utilisation d'un formatage personnalisé des journaux. Si votre application utilise une structure ou une bibliothèque de journalisation différente, utilisez-la comme référence pour créer votre propre analyseur multiligne en conséquence.

Configuration manuelle de l'analyse multiligne à l'aide d'un fichier de configuration

Pour regrouper correctement les journaux, définissez un analyseur multiligne qui reconnaît l'horodatage au début des nouvelles entrées du journal et traite les lignes suivantes comme des suites des entrées précédentes.

Définir l'analyseur multi-lignes

Ajouter ce qui suit au fichier parsers.conf:

[MULTILINE_PARSER]
    Name            multiline-nodejs-winston
    Type            regex
    Flush_timeout   500
    Rule            "start_state"     "/^\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] .*$/"
    Rule            "cont"            "/^(?!\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] ).*$/"

Cet analyseur suppose que les journaux commencent par un horodatage tel que [Wed Jul 24 2025 14:52:31.456] .... Les traces de pile sont indentées sur les lignes suivantes et ne correspondent pas à l'expression rationnelle de l'horodatage; elles sont donc regroupées avec la ligne de journal précédente.

Appliquer l'analyseur syntaxique avec un filtre multiligne

Ajoutez un bloc de filtre au fichier filters.conf pour utiliser l'analyseur :

[FILTER]
    Name                  multiline
    Match                 kube.*
    Multiline.key_content log
    Multiline.parser      multiline-nodejs-winston

Redémarrez l'agent.

Après avoir mis à jour la carte de configuration, redémarrez l'agent.

  • Linux Pour les environnements Linux, exécutez :

    systemctl daemon-reload && systemctl restart fluent-bit
    
  • Windows Pour les environnements Windows, exécutez :

    sc.exe stop fluent-bit && sc.exe start fluent-bit
    

Vérifiez vos journaux multilignes

Accédez à votre instance IBM Cloud Logs et confirmez que vos entrées multilignes (par exemple, les traces de pile) sont regroupées correctement.

  1. Accédez à votre instance IBM Cloud Logs.

  2. En utilisant la vue Journaux Icône d'exploration des journaux, vérifiez que vos entrées multilignes sont correctement groupées.

    Les données d'enregistrement groupées sont incluses dans le champ log.