Graylog: Problemen met gegevensmapping

Hoe problemen met Graylog indexgegevensmapping op te lossen

👋 Welkom bij de Stackhero documentatie!

Stackhero biedt een kant-en-klare Graylog cloud oplossing die tal van voordelen biedt, waaronder:

  • Onbeperkte en toegewijde SMTP e-mailserver inbegrepen.
  • Moeiteloze updates met slechts één klik.
  • Aanpasbare domeinnaam beveiligd met HTTPS (bijvoorbeeld, https://logs.uw-bedrijf.com).
  • Optimale prestaties en robuuste beveiliging aangedreven door een privé en toegewijde VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Graylog cloud hosting oplossing van Stackhero te proberen!

Een veelvoorkomend probleem in Graylog zijn gegevensmappingconflicten die kunnen leiden tot mislukte indexeringspogingen. U kunt dit probleem tegenkomen als u logs zoals deze ziet:

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"]];

Dit probleem ontstaat door de dynamische mappingfunctie van OpenSearch. Dynamische mapping bepaalt automatisch het gegevenstype van elk veld op basis van het eerste document dat naar een index wordt geschreven. Zodra ingesteld, wordt dit gegevenstype "vergrendeld", en toekomstige documenten met een ander gegevenstype voor dat veld worden afgewezen, wat een mapper parsing exception veroorzaakt.

Wanneer een nieuwe index wordt aangemaakt, definieert het eerste document de indexmapping. Bijvoorbeeld, als het document een "level"-veld bevat met een waarde van 3 (een numerieke waarde), stelt OpenSearch het gegevenstype voor "level" in op "long" (een numeriek type). Als een later document dat naar Graylog wordt gestuurd het "level"-veld ingesteld heeft op "error" (een stringtype), wordt het afgewezen omdat het gegevenstype niet overeenkomt met het aanvankelijk ingestelde type. Dit veroorzaakt een mapper_parsing_exception fout met de reden failed to parse field [level] of type [long] in document with id 'xxx'.

Dit probleem kan optreden bij elk veld als de gegevenstypen inconsistent zijn tussen documenten.

Om dit probleem op te lossen, heeft u 2 opties:

De ideale oplossing is om de gegevenstypen die voor velden worden gebruikt te standaardiseren in alle systemen die gegevens naar Graylog sturen. Zorg er bijvoorbeeld voor dat het "level"-veld altijd wordt verzonden als een string (zoals "error", "warn", enz.) of altijd als een nummer (3, 4, enz.). Deze consistentie voorkomt mappingconflicten en zorgt ervoor dat alle documenten correct worden geïmporteerd.

Als het standaardiseren van gegevenstypen in alle systemen niet haalbaar is, kunt u Graylog's pipelines gebruiken om gegevenstypen bij ontvangst te converteren. Pipelines stellen u in staat om regels te definiëren die gegevens transformeren op basis van specifieke voorwaarden.

Om deze oplossing te implementeren:

  • Navigeer naar "System" > "Pipelines" in de Graylog-webinterface.
  • Klik op "Add new pipeline" om een nieuwe pipeline te maken.
  • Definieer regels om het "level"-veld (of andere velden) naar het gewenste gegevenstype te converteren. U kunt bijvoorbeeld numerieke niveaus converteren naar hun overeenkomstige stringrepresentaties (zoals 3 naar "error", 4 naar "warning", enz.).

Deze aanpak zorgt ervoor dat alle binnenkomende gegevens voldoen aan de verwachte gegevenstypen, waardoor mappingconflicten worden voorkomen.

Voor gevorderde gebruikers biedt Graylog de mogelijkheid om de mapping van indices te bekijken en handmatig aan te passen:

  • Ga naar "System" > "Indices" in de Graylog-webinterface.
  • Selecteer de relevante index.
  • Navigeer naar "Configuration" > "Configure index field types" om de veldmappings te bekijken of te wijzigen.

Echter, handmatige aanpassingen moeten met voorzichtigheid worden benaderd, aangezien onjuiste mappings kunnen leiden tot verdere importproblemen.