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 : stdout ou stderr.
  • Tag : F ou P.

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 :

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:

  1. Connectez-vous au cluster. Pour plus d'informations, voir Accéder à votre cluster.

  2. Dans la carte de configuration de Agent de journalisation (inputs.conf), ajoutez l'analyseur multiligne.

    La configuration de Agent de journalisation doit avoir le @INCLUDE pour 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"
    ...
    
  3. Redémarrer les agents.

    Pour les clusters Kubernetes, exécutez :

    kubectl -n ibm-observe rollout restart ds/logs-agent
    

    Pour 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.

Ressources supplémentaires pour le traitement multiligne Agent de journalisation
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