Graylog: Daten-Mapping-Probleme
Wie Sie Probleme mit dem Daten-Mapping von Graylog-Indizes lösen
👋 Willkommen bei der Stackhero-Dokumentation!
Stackhero bietet eine einsatzbereite Graylog Cloud-Lösung, die zahlreiche Vorteile bietet, darunter:
- Unbegrenzter und dedizierter SMTP-E-Mail-Server inklusive.
- Mühelose Updates mit nur einem Klick.
- Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://logs.ihre-firma.com).
- Optimale Performance und robuste Sicherheit durch eine private und dedizierte VM.
Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Graylog Cloud Hosting-Lösung von Stackhero auszuprobieren!
Ein häufiges Problem in Graylog sind Daten-Mapping-Konflikte, die zu fehlgeschlagenen Indexierungsversuchen führen können. Sie stoßen möglicherweise auf dieses Problem, wenn Sie Protokolle wie die folgenden sehen:
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"]];
Ursache des Problems
Dieses Problem entsteht durch die dynamische Mapping-Funktion von OpenSearch. Das dynamische Mapping bestimmt den Datentyp jedes Feldes automatisch anhand des ersten Dokuments, das in einen Index geschrieben wird. Sobald dieser Datentyp festgelegt ist, ist er "fixiert" und alle zukünftigen Dokumente, die für dieses Feld einen anderen Datentyp verwenden, werden abgelehnt. Dies führt zu einer Mapper Parsing Exception.
Wenn ein neuer Index erstellt wird, definiert das erste Dokument das Index-Mapping. Enthält dieses Dokument beispielsweise ein Feld "level" mit dem Wert 3 (eine numerische Angabe), setzt OpenSearch den Datentyp für "level" auf "long" (numerischer Typ). Wenn später ein weiteres Dokument an Graylog gesendet wird, das das Feld "level" mit dem Wert "error" (ein String) enthält, wird dieses abgelehnt, da der Datentyp nicht mit dem ursprünglich festgelegten Typ übereinstimmt. Dies löst einen mapper_parsing_exception-Fehler mit dem Grund failed to parse field [level] of type [long] in document with id 'xxx'. aus.
Dieses Problem kann bei jedem Feld auftreten, wenn die Datentypen in den Dokumenten nicht konsistent sind.
Wie Sie das Problem lösen
Um dieses Problem zu beheben, haben Sie zwei Möglichkeiten:
1. Konsistente Datentypen über alle Systeme hinweg sicherstellen
Die ideale Lösung besteht darin, die verwendeten Datentypen für Felder über alle Systeme hinweg, die Daten an Graylog senden, zu standardisieren. Stellen Sie beispielsweise sicher, dass das Feld "level" immer entweder als String (wie "error", "warn" usw.) oder immer als Zahl (3, 4 usw.) gesendet wird. Diese Konsistenz verhindert Mapping-Konflikte und stellt sicher, dass alle Dokumente korrekt verarbeitet werden.
2. Graylog-Pipelines zur Datenkonvertierung nutzen
Falls eine Standardisierung der Datentypen über alle Systeme hinweg nicht möglich ist, können Sie die Pipelines-Funktion von Graylog verwenden, um Datentypen bei der Verarbeitung zu konvertieren. Mit Pipelines können Sie Regeln definieren, die Daten basierend auf bestimmten Bedingungen transformieren.
So setzen Sie diese Lösung um:
- Navigieren Sie in der Graylog-Weboberfläche zu "System" > "Pipelines".
- Klicken Sie auf "Add new pipeline", um eine neue Pipeline zu erstellen.
- Definieren Sie Regeln, um das Feld "level" (oder andere Felder) in den gewünschten Datentyp zu konvertieren. Beispielsweise können Sie numerische Level-Werte in die entsprechenden String-Repräsentationen umwandeln (z. B. 3 zu "error", 4 zu "warning" usw.).
Mit diesem Ansatz stellen Sie sicher, dass alle eingehenden Daten den erwarteten Datentypen entsprechen und Mapping-Konflikte vermieden werden.
Index-Mappings anzeigen und ändern
Für fortgeschrittene Nutzer bietet Graylog die Möglichkeit, das Mapping von Indizes einzusehen und manuell anzupassen:
- Gehen Sie in der Graylog-Weboberfläche zu "System" > "Indices".
- Wählen Sie den entsprechenden Index aus.
- Navigieren Sie zu "Configuration" > "Configure index field types", um die Feld-Mappings einzusehen oder zu bearbeiten.
Manuelle Anpassungen sollten jedoch mit Vorsicht vorgenommen werden, da fehlerhafte Mappings zu weiteren Problemen bei der Datenaufnahme führen können.