Graylog: Problemi di mapping dei dati

Come risolvere i problemi di mapping dei dati degli indici Graylog

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione Graylog cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Server email SMTP illimitato e dedicato incluso.
  • Aggiornamenti senza sforzo con un solo clic.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://logs.tua-azienda.com).
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione Graylog cloud hosting di Stackhero!

Un problema comune in Graylog è rappresentato dai conflitti di mapping dei dati che possono portare a tentativi di indicizzazione falliti. Potreste incontrare questo problema se vedete log come questi:

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

Questo problema deriva dalla funzionalità di mapping dinamico di OpenSearch. Il mapping dinamico determina automaticamente il tipo di dati di ciascun campo in base al primo documento scritto in un indice. Una volta impostato, questo tipo di dati è "bloccato" e qualsiasi documento futuro con un tipo di dati diverso per quel campo viene rifiutato, causando un'eccezione di parsing del mapper.

Quando viene creato un nuovo indice, il primo documento definisce il mapping dell'indice. Ad esempio, se il documento contiene un campo "level" con un valore di 3 (un valore numerico), OpenSearch imposta il tipo di dati per "level" su "long" (un tipo numerico). Se un documento successivo inviato a Graylog contiene il campo "level" impostato su "error" (un tipo stringa), verrà rifiutato perché il tipo di dati non corrisponde al tipo inizialmente impostato. Questo genera un errore mapper_parsing_exception con la motivazione failed to parse field [level] of type [long] in document with id 'xxx'.

Questo problema può verificarsi con qualsiasi campo se i tipi di dati sono incoerenti tra i documenti.

Per risolvere questo problema, avete 2 opzioni:

La soluzione ideale è standardizzare i tipi di dati utilizzati per i campi in tutti i sistemi che inviano dati a Graylog. Ad esempio, assicuratevi che il campo "level" sia sempre inviato come stringa (come "error", "warn", ecc.) o sempre come numero (3, 4, ecc.). Questa coerenza previene i conflitti di mapping e garantisce che tutti i documenti siano ingeriti correttamente.

Se la standardizzazione dei tipi di dati in tutti i sistemi non è fattibile, potete utilizzare i pipeline di Graylog per convertire i tipi di dati al momento della ricezione. I pipeline vi permettono di definire regole che trasformano i dati in base a condizioni specifiche.

Per implementare questa soluzione:

  • Navigate su "System" > "Pipelines" nell'interfaccia web di Graylog.
  • Cliccate su "Add new pipeline" per creare un nuovo pipeline.
  • Definite regole per convertire il campo "level" (o altri campi) al tipo di dati desiderato. Ad esempio, potete convertire i livelli numerici nelle loro rappresentazioni stringa corrispondenti (come 3 in "error", 4 in "warning", ecc.).

Questo approccio garantisce che tutti i dati in entrata rispettino i tipi di dati previsti, evitando conflitti di mapping.

Per gli utenti avanzati, Graylog offre la possibilità di visualizzare e regolare manualmente il mapping degli indici:

  • Andate su "System" > "Indices" nell'interfaccia web di Graylog.
  • Selezionate l'indice pertinente.
  • Navigate su "Configuration" > "Configure index field types" per visualizzare o modificare i mapping dei campi.

Tuttavia, le regolazioni manuali devono essere affrontate con cautela, poiché mapping errati possono portare a ulteriori problemi di ingestione.