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.
-
Imparate a conoscere il supporto multilinea in ambienti non orchestrati.
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.
-
Utilizzando la vista Registri
, verificare che le voci multilinea siano raggruppate correttamente.
I dati di log raggruppati sono inclusi nel campo
log.