Graylog: Problèmes de mapping des données
Comment résoudre les problèmes de mapping des données d'index Graylog
👋 Bienvenue sur la documentation de Stackhero !
Stackhero propose une solution Graylog cloud prête à l'emploi qui offre de nombreux avantages, notamment :
- Serveur SMTP d'e-mail dédié et illimité inclus.
- Mises à jour simplifiées en un clic.
- Nom de domaine personnalisable sécurisé par HTTPS (par exemple, https://logs.votre-entreprise.com).
- Performance optimale et sécurité renforcée grâce à une VM privée et dédiée.
Gagnez du temps et simplifiez-vous la vie : il suffit de 5 minutes pour essayer la solution Graylog cloud hosting de Stackhero !
Un problème fréquent dans Graylog concerne les conflits de mapping des données, qui peuvent entraîner des échecs lors de l'indexation. Vous pouvez rencontrer ce problème si vous voyez des logs similaires à ceux-ci :
ElasticsearchException[Elasticsearch exception [type=mapper_parsing_exception, reason=failed to parse field [level] of type [long] in document with id '34fd4d11-36ed-11f0-afc9-0242ac140002'. Preview of field's value: 'error']]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=For input string: "error"]];
Raison du problème
Ce problème provient de la fonctionnalité de mapping dynamique d'OpenSearch. Le mapping dynamique détermine automatiquement le type de données de chaque champ en se basant sur le premier document écrit dans un index. Une fois ce type défini, il est "figé", et tout document ultérieur contenant un type de données différent pour ce champ sera rejeté, ce qui provoque une erreur de type mapper parsing exception.
Lorsqu'un nouvel index est créé, le premier document définit le mapping de l'index. Par exemple, si ce document contient un champ "level" avec la valeur 3 (une valeur numérique), OpenSearch définit le type de données de "level" sur "long" (type numérique). Si un document ultérieur envoyé à Graylog contient le champ "level" avec la valeur "error" (type chaîne de caractères), il sera rejeté car le type de données ne correspond pas à celui initialement défini. Cela déclenche une erreur mapper_parsing_exception avec la raison failed to parse field [level] of type [long] in document with id 'xxx'.
Ce problème peut survenir avec n'importe quel champ si les types de données sont incohérents entre les documents.
Comment résoudre ce problème
Pour résoudre ce problème, vous disposez de 2 options :
1. Garantir la cohérence des types de données entre les systèmes
La solution idéale consiste à standardiser les types de données utilisés pour les champs sur l'ensemble des systèmes envoyant des données à Graylog. Par exemple, assurez-vous que le champ "level" soit toujours envoyé soit comme une chaîne de caractères ("error", "warn", etc.), soit toujours comme un nombre (3, 4, etc.). Cette cohérence évite les conflits de mapping et garantit l'ingestion correcte de tous les documents.
2. Utiliser les pipelines Graylog pour la conversion des données
Si la standardisation des types de données sur tous les systèmes n'est pas possible, vous pouvez utiliser les pipelines de Graylog pour convertir les types de données à la réception. Les pipelines permettent de définir des règles qui transforment les données selon des conditions spécifiques.
Pour mettre en place cette solution :
- Accédez à "System" > "Pipelines" dans l'interface web Graylog.
- Cliquez sur "Add new pipeline" pour créer un nouveau pipeline.
- Définissez des règles pour convertir le champ "level" (ou d'autres champs) vers le type de données souhaité. Par exemple, vous pouvez convertir des niveaux numériques en leur représentation textuelle correspondante (3 en "error", 4 en "warning", etc.).
Cette méthode garantit que toutes les données entrantes respectent les types de données attendus, évitant ainsi les conflits de mapping.
Visualisation et modification des mappings d'index
Pour les utilisateurs avancés, Graylog permet de consulter et de modifier manuellement le mapping des index :
- Rendez-vous dans "System" > "Indices" depuis l'interface web Graylog.
- Sélectionnez l'index concerné.
- Accédez à "Configuration" > "Configure index field types" pour consulter ou modifier les mappings des champs.
Cependant, toute modification manuelle doit être réalisée avec précaution, car un mapping incorrect peut entraîner de nouveaux problèmes d'ingestion.