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.
-
En savoir plus sur la prise en charge multiligne dans les environnements non orchestrés.
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.
-
En utilisant la vue 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.