Prise en charge des journaux multilignes pour Agent de journalisation dans les environnements orchestrés
Les erreurs et les traces de pile peuvent s'étendre sur plusieurs lignes, chaque ligne étant envoyée comme une entrée de journal distincte. Pour prendre en charge l'ingestion de journaux multilignes par IBM® Cloud Logs à partir d'applications, telles que Java ou Python, fonctionnant dans des environnements orchestrés, tels que Red Hat OpenShift on IBM Cloud ou IBM Cloud Kubernetes Service, vous devez apporter des modifications à la configuration de Agent de journalisation. Les modifications portent notamment sur l'analyse syntaxique nécessaire pour regrouper des lignes de journal qui sont censées être regroupées en un seul enregistrement.
À propos de multiline
Dans les clusters OpenShift et Kubernetes, le système de journalisation capture les journaux des flux des applications stdout et stderr. Il ajoute ensuite un préfixe à chaque ligne de journal avec des métadonnées avant
de stocker les journaux dans des fichiers, en suivant le format de journalisation de l'interface d'exécution des conteneurs (CRI).
Le préfixe de la ligne de journal Kubernetes contient :
- Horodatage : Au format ISO 8601.
- Nom du flux :
stdoutoustderr. - Tag :
FouP.
Le format d'enregistrement CRI utilise des balises pour définir si une ligne d'enregistrement est une ligne unique ou une entrée d'enregistrement multiligne. Les valeurs valables pour la balise sont les suivantes :
- Partiel (
P): Cette balise est incluse dans les lignes de journal qui résultent de la division d'une seule ligne de journal en plusieurs lignes par le runtime et l'entrée de journal n'est pas encore terminée. - Complet (
F): Cette balise est utilisée pour indiquer que l'entrée du journal est terminée. Elle est utilisée pour une entrée de ligne de journal unique ou pour indiquer qu'il s'agit de la dernière ligne d'une entrée de plusieurs lignes.
2024-03-15T10:30:45.123456789Z stdout F This is a complete log line
2024-03-15T10:30:45.123456789Z stderr P This is the first part of a
2024-03-15T10:30:45.123456789Z stderr F multiline error message
Par défaut, le site Agent de journalisation inclut la configuration de Tail plugin avec l'analyseur multiligne cri afin de prendre en charge la concaténation de ces journaux formatés CRI provenant de stdout et stderr en une seule ligne de journal.
Il est recommandé, dans les environnements Kubernetes utilisant la journalisation basée sur CRI, d'utiliser le paramètre Multiline.Parser (défini par défaut sur cri ) pour analyser et réassembler correctement les journaux
multilignes générés par les conteneurs.
Vous pouvez également avoir des applications, telles que Java ou Python, où les erreurs et les traces de pile peuvent s'étendre sur plusieurs lignes, et où chaque ligne est envoyée comme une entrée de journal séparée. Ces applications peuvent
générer plusieurs lignes de journal qui peuvent être associées les unes aux autres en une seule ligne de journal. Pour gérer ces journaux multilignes via le site Agent de journalisation, vous devez configurer un site supplémentaire Multiline parser.
Configuration multiligne par défaut
La configuration multiligne par défaut pour les journaux CRI est configurée et activée lorsque vous déployez le site Agent de journalisation.
Dans Fluent Bit, vous pouvez configurer le Multiline parser en utilisant l'analyseur multiligne intégré ou en utilisant un analyseur multiligne personnalisé.
Par défaut, le site Tail plugin qui est configuré avec Agent de journalisation est configuré avec l'analyseur multiligne intégré de cri. Cet analyseur traite les journaux générés par le moteur de conteneurs CRI-O et
prend en charge la concaténation des entrées de journaux.
Par exemple, le site Agent de journalisation a cette configuration par défaut pour la prise en charge multiligne :
[INPUT]
Name tail
Tag kube.*
.....
Buffer_Chunk_Size 32KB
Buffer_Max_Size 256KB
Multiline.parser cri
Skip_Long_Lines On
Refresh_Interval 10
storage.type filesystem
storage.pause_on_chunks_overlimit on
Configuration d'un support multiligne supplémentaire pour les applications
Si vous avez des applications, telles que Java ou Python, où les erreurs et les traces de pile peuvent s'étendre sur plusieurs lignes, et que chaque ligne est envoyée comme une entrée de journal séparée, vous devez configurer l'analyseur multiligne dans le fichier Agent de journalisation.
Choisissez l'une des options suivantes pour configurer le site Agent de journalisation avec l'analyseur multiligne :
-
Déployez le Agent de journalisation en ajoutant une nouvelle valeur
enableMultilinedans le fichierlogs-values.yamlque vous utilisez pour déployer l'agent à l'aide d'un diagramme Helm. Pour plus d'informations, consultez Configuration du fichier de valeurs du graphique Helm pour Agent de journalisation ou Configuration du fichier de valeurs du graphique Helm pour Agent de journalisation. -
Mettez à jour le site Agent de journalisation avec la version 1.4.1 ou une version supérieure. Vous devez mettre à jour le fichier Helm chart
logs-values.yamlavec la version de l'agent et définirenableMultilineàtruepour activer le support multiligne. Pour plus d'informations, voir Mise à jour du fichier Helm chart values pour l'agent Logging.
Ajout d'un analyseur multiligne personnalisé
Pour créer un analyseur multiligne personnalisé à utiliser avec le site Agent de journalisation, suivez les instructions de la section Analyseurs multiligne configurables. Vous définirez une expression rationnelle personnalisée pour déterminer le motif multiligne.
La configuration Agent de journalisation doit également inclure un plug-in FILTER après le plug-in INPUT. Le filtre appliquera le modèle du site configuré MULTILINE_PARSER. La valeur Name du
site MULTILINE_PARSER doit correspondre à la valeur Multiline.parser du site FILTER.
filter-multiline.conf: |
[FILTER]
Name multiline
Match *
Multiline.parser INSERT_CUSTOM_PARSER_NAME
Multiline.key_content log
Ajout d'un support multiligne pour les applications
Si vous avez déployé Agent de journalisation et que vous avez des applications telles que Java ou Python, où les erreurs et les traces de pile peuvent s'étendre sur plusieurs lignes, et où chaque ligne est envoyée comme une entrée de journal séparée, vous pouvez mettre à jour la configuration de votre agent et configurer l'analyseur multiligne.
Effectuez les étapes suivantes pour ajouter la prise en charge multiligne sur le site Agent de journalisation:
-
Connectez-vous au cluster. Pour plus d'informations, voir Accéder à votre cluster.
-
Dans la carte de configuration de Agent de journalisation (
inputs.conf), ajoutez l'analyseur multiligne.La configuration de Agent de journalisation doit avoir le
@INCLUDEpour le filtre multiligne juste après le plug-in d'entrée.fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf Plugins_File plugins.conf ... @INCLUDE input-kubernetes.conf @INCLUDE filter-multiline.conf ... input-kubernetes.conf: | [INPUT] Name tail Tag kube.* ..... Buffer_Chunk_Size 32KB Buffer_Max_Size 256KB Multiline.parser cri Skip_Long_Lines On Refresh_Interval 10 storage.type filesystem storage.pause_on_chunks_overlimit on filter-multiline.conf: | [FILTER] Name multiline Match * Multiline.parser multiline-java-example Multiline.key_content log parsers.conf: | ... [MULTILINE_PARSER] Name multiline-java-example Type regex Flush_timeout 500 Rule "start_state" "/^(\d+-\d+-\d+ \d+:\d+:\d+\.\d+)(.*)$/" "cont" Rule "cont" "/^(?!\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}).*$/" "cont" ... -
Redémarrer les agents.
Pour les clusters Kubernetes, exécutez :
kubectl -n ibm-observe rollout restart ds/logs-agentPour les clusters OpenShift, exécutez :
oc -n ibm-observe rollout restart ds/logs-agent
Configuration de la prise en charge des multilignes pour les clusters avec plusieurs moteurs d'exécution et exigences d'analyse syntaxique
Si vous avez des clusters qui exécutent des applications avec plusieurs langages ou environnements d'exécution différents (par exemple, Java, Go, et Python ), vous pouvez avoir besoin de gérer des journaux multilignes provenant de différentes sources. Si vous disposez déjà d'un analyseur multiligne personnalisé pour Java, vous pouvez le combiner avec des analyseurs intégrés pour d'autres systèmes d'exécution tels que Go et Python. Cela permet de s'assurer que tous les journaux sont analysés correctement et transmis sous forme d'entrées correctement groupées à IBM® Cloud Logs.
En spécifiant plusieurs analyseurs (intégrés et personnalisés) dans une liste séparée par des virgules, le site Agent de journalisation essaiera chaque analyseur dans l'ordre jusqu'à ce qu'une correspondance soit trouvée.
Configurer plusieurs analyseurs en utilisant Helm
Si vous utilisez Helm pour configurer votre environnement orchestré, mettez à jour la section multilinePreprocessor pour référencer les deux analyseurs intégrés (par exemple, go, python) avec vos analyseurs
personnalisés dans une liste séparée par des virgules.
Exemple :
multilinePreprocessor:
- name: multiline
multiline.parser: go, python, nodejs, ruby, multiline-java-example, multiline-nodejs-winston
multiline.key_content: log
Si vous avez installé une version précédente de Agent de journalisation et que vous avez mis à jour la configuration de l'agent en modifiant la carte de configuration directement dans le cluster, faites une copie de votre carte de configuration
à partir du cluster avant d'exécuter la commande helm upgrade. Lorsque le site Agent de journalisation est mis à jour, toutes les modifications apportées à la carte de configuration sont écrasées.
Après avoir mis à jour le fichier values.yaml, exécutez helm upgrade pour appliquer les modifications. Vérifiez votre configuration en consultant les journaux de différents moments d'exécution sur IBM Cloud Logs pour
vous assurer que le regroupement multiligne fonctionne dans toutes les configurations.
Plus d'informations et d'exemples
Pour plus d'informations et des tutoriels avec des exemples de scénarios pour la configuration du traitement multiligne, voir les rubriques suivantes.
| Pour plus d'informations sur : | Consultez |
|---|---|
| Configuration de la prise en charge multiligne pour le site Agent de journalisation dans Linux | Rubrique |
| Configuration de la prise en charge multiligne pour le site Agent de journalisation sous Windows | Rubrique |
| Analyse syntaxique multiligne pour les applications Java avec Log4j | Tutoriel |
| Analyse syntaxique multiligne à l'aide de Helm pour les applications Java avec Log4j | Tutoriel |
| Analyse syntaxique multiligne pour les applications Node.js à l'aide de Winston | Tutoriel |
| Analyse syntaxique multiligne à l'aide de Helm pour les applications Node.js à l'aide de Winston | Tutoriel |