Graylog: Fehler "failed to parse field [XXXX] of type [YYYY]" beheben

Diese Dokumentation ist Teil des Erste Schritte-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Wie Sie mit Graylog starten.

👋 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!

Es kann vorkommen, dass Sie einen Fehler wie diesen sehen:

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

Sie können diesen Fehler in den Logs im Stackhero-Dashboard oder im Graylog-Adminbereich unter System > Overview > Indexer failures einsehen.

Dieser Fehler bedeutet, dass ein Log mit einem Wert für das Feld time gesendet wurde, der nicht dem erwarteten Typ entspricht (in diesem Fall ein numerischer Wert vom Typ "long"). Graylog nutzt das dynamische Mapping-Feature von OpenSearch. Wenn ein Log zum ersten Mal gesendet wird, versucht OpenSearch, die Feldtypen zu erkennen. Enthält ein Log beispielsweise das Feld time mit dem numerischen Wert 1234, wird es als numerisches Feld definiert. Wird später ein Log mit dem Feld time und dem Wert "abcd" (also ein String) gesendet, lehnt OpenSearch dies ab, da ein numerischer Wert erwartet wird.

Beachten Sie, dass der Feldname time hier nur als Beispiel dient. Es kann sich um beliebige Feldnamen und Typen handeln.

Um dieses Problem zu beheben, müssen Sie den von OpenSearch erwarteten Typ neu definieren. Weitere Informationen finden Sie in der offiziellen Graylog-Dokumentation.

Bevor Sie fortfahren, aktivieren Sie den OpenSearch-Zugang im Stackhero-Dashboard. Navigieren Sie zu Ihrem Graylog-Dienst und klicken Sie auf die Schaltfläche "Konfigurieren", um den OpenSearch-Zugang zu aktivieren.

Seien Sie vorsichtig mit diesen Änderungen, da eine fehlerhafte Konfiguration Ihren OpenSearch-Cluster blockieren und zu Datenverlust führen kann. Wenn Sie unsicher sind, führen Sie die Änderungen nicht durch.

  1. Definieren Sie Ihr neues Mapping. In diesem Beispiel definieren wir das Feld time als Typ string. Eine Übersicht der verfügbaren Typen finden Sie in der OpenSearch Feldtypen-Dokumentation.

  2. Speichern Sie den folgenden Inhalt in einer Datei namens graylog-custom-mapping.json:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. Senden Sie diese Datei mit folgendem curl-Befehl (ersetzen Sie <XXXXXX>.stackhero-network.com durch den Domainnamen Ihrer Instanz):

    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'
    

    Sie sollten eine Antwort wie diese erhalten:

    {
      "acknowledged": true
    }
    
  4. Überprüfen Sie abschließend, ob das Mapping aktualisiert wurde, mit folgendem Befehl (passen Sie die Domain ggf. an):

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