Graylog: Gestire l'errore "failed to parse field [XXXX] of type [YYYY]"

Questa documentazione fa parte della guida Come iniziare. Consulta la guida completa qui: Come iniziare con Graylog.

👋 Benvenuto nella documentazione di Stackhero

Stackhero offre una soluzione Graylog cloud completamente gestita, progettata per garantire velocità e semplicità. Puoi:

  • Affidarti a un server SMTP email dedicato e illimitato incluso nel tuo servizio.
  • Applicare facilmente gli aggiornamenti con un solo clic, senza necessità di interventi manuali.
  • Utilizzare un nome di dominio personalizzato protetto da HTTPS (ad esempio, https://logs.tua-azienda.com), offrendo al tuo team un accesso diretto e sicuro.
  • Sfruttare elevate prestazioni e sicurezza su un'infrastruttura privata e dedicata, senza risorse condivise o "noisy neighbors".

Concentrati sui tuoi dati, non sugli strumenti: puoi iniziare a utilizzare la soluzione Graylog cloud hosting di Stackhero in pochi minuti.

Potreste incontrare un errore come:

org.opensearch.index.mapper.MapperParsingException: failed to parse field [time] of type [long] in document with id 'xxxx'

Potete visualizzare questo errore nei log disponibili nella dashboard Stackhero o nel pannello di amministrazione di Graylog sotto System > Overview > Indexer failures.

Questo errore indica che è stato inviato un log con un valore per il campo time che non corrisponde al tipo atteso (in questo caso, un valore numerico di tipo "long"). Graylog sfrutta la funzionalità di mapping dinamico di OpenSearch. Quando un log viene inviato per la prima volta, OpenSearch tenta di dedurre i tipi dei campi. Ad esempio, se un log contiene il campo time con il valore numerico 1234, OpenSearch lo definisce come campo numerico. Se successivamente viene inviato un altro log con il campo time impostato a "abcd", ovvero una stringa, OpenSearch lo rifiuterà perché si aspetta un valore numerico.

Ricordate che il nome del campo time è solo a scopo illustrativo. Può trattarsi di qualsiasi nome di campo e tipo.

Per risolvere questo problema, è necessario ridefinire il tipo che OpenSearch si aspetta. Per maggiori informazioni, consultate la documentazione ufficiale di Graylog.

Prima di procedere, abilitate l'accesso a OpenSearch dalla dashboard Stackhero. Accedete al vostro servizio Graylog e cliccate sul pulsante "Configura" per attivare l'accesso a OpenSearch.

Fate attenzione a queste modifiche: una configurazione errata può bloccare il vostro cluster OpenSearch e causare la perdita di dati. Se avete dubbi, non procedete.

  1. Definite il nuovo mapping. In questo esempio, ridefiniamo il campo time come tipo string. Potete trovare i tipi disponibili nella documentazione dei tipi di campo di OpenSearch.

  2. Salvate il seguente contenuto in un file chiamato graylog-custom-mapping.json:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. Inviate questo file utilizzando il seguente comando curl (sostituite <XXXXXX>.stackhero-network.com con il dominio della vostra istanza):

    curl -u 'admin' -X PUT -d @'graylog-custom-mapping.json' -H 'Content-Type: application/json' 'https://<XXXXXX>.stackhero-network.com/opensearch/_template/graylog-custom-mapping?pretty'
    

    Dovreste ricevere una risposta simile a:

    {
      "acknowledged": true
    }
    
  4. Infine, verificate che il mapping sia stato aggiornato con questo comando (sostituite il dominio se necessario):

    curl -u 'admin' -X GET 'https://<XXXXXX>.stackhero-network.com/opensearch/graylog_deflector/_mapping?pretty'