Personalizzazione di 1.6.x Agent di registrazione per supportare l'analisi multilinea personalizzata per le applicazioni di Node.js che utilizzano Winston in ambienti non orchestrati

Questa esercitazione mostra come configurare la gestione dei registri multilinea di IBM® Cloud Logs Agent di registrazione per un'applicazione Node.js utilizzando la libreria di registrazione Winston personalizzata. Questa configurazione è per ambienti non orchestrati, ad esempio Linux e Windows, e modifica il file di configurazione. Questa configurazione assicura che le tracce dello stack e i log multilinea siano raggruppati correttamente in IBM Cloud Logs.

Questa esercitazione richiede il programma IBM Cloud Logs Agent di registrazione 1.6.2 o successivo.

Prima di iniziare

Prima di iniziare a utilizzare questa esercitazione, si consiglia di leggere le seguenti informazioni per comprendere i concetti di Agent di registrazione e multilinea.

Questa esercitazione presuppone anche che siate in possesso di:

  • Un'istanza di IBM Cloud Logs è stata fornita e configurata.

  • Il sito Agent di registrazione è stato implementato in un ambiente non orchestrato.

I file di configurazione di questa esercitazione si trovano nel punto in cui sono stati scaricati i file del pacchetto al momento dell'installazione di Agent di registrazione.

Esempio di configurazione Winston

Supponiamo che l'applicazione Node.js utilizzi Winston e registri nella console nel seguente formato:

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()
  ]
});

Questo formato produce voci di registro che iniziano con un timestamp e un livello, mentre i registri multilinea, come le tracce dello stack di errori, seguono su righe successive senza timestamp.

Winston in genere registra tutto l'output, comprese le tracce di stack degli errori, come una singola stringa, quindi spesso non è necessario un parser multilinea. Tuttavia, questo esempio dimostra cosa fare se il formattatore stampa log multilinea e illustra come affrontare il parsing multilinea per qualsiasi formato personalizzato.

Questa configurazione è fornita come esempio per mostrare come gestire i registri multilinea quando si usa la formattazione personalizzata dei registri. Se l'applicazione utilizza una struttura o una libreria di log diversa, usare questo come riferimento per creare il proprio parser multilinea di conseguenza.

Configurazione manuale del parsing multilinea tramite un file di configurazione

Per raggruppare correttamente i registri, definire un parser multilinea che riconosca il timestamp all'inizio delle nuove voci di registro e tratti le righe successive come continuazione delle voci precedenti.

Definire il parser multilinea

Aggiungete quanto segue al file 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}\\] ).*$/"

Questo parser assume che i log inizino con un timestamp come [Wed Jul 24 2025 14:52:31.456] .... Le tracce di stack sono indentate nelle righe successive e non corrispondono alla regex del timestamp, quindi sono raggruppate con la riga di log precedente.

Applicare il parser con un filtro multilinea

Aggiungere un blocco filtro al file filters.conf per utilizzare il parser:

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

Riavviare l'agent

Dopo aver aggiornato la mappa di configurazione, riavviare l'agente.

  • Linux Per gli ambienti Linux, eseguire:

    systemctl daemon-reload && systemctl restart fluent-bit
    
  • Windows Per gli ambienti Windows, eseguire:

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

Verificare i log multilinea

Accedere all'istanza di IBM Cloud Logs e verificare che le voci multilinea (ad esempio, le tracce di stack) siano raggruppate correttamente.

  1. Accedere all'istanza IBM Cloud Logs.

  2. Utilizzando la vista Registri Icona Esplora registri, verificare che le voci multilinea siano raggruppate correttamente.

    I dati di log raggruppati sono inclusi nel campo log.