Graylog: Obsługa błędu "failed to parse field [XXXX] of type [YYYY]"

Ta dokumentacja jest częścią przewodnika Pierwsze kroki. Pełny przewodnik znajdziesz tutaj: Jak rozpocząć pracę z Graylog.

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Graylog cloud, które zapewnia wiele korzyści, w tym:

  • Nieograniczony i dedykowany serwer e-mail SMTP w zestawie.
  • Bezproblemowe aktualizacje za pomocą jednego kliknięcia.
  • Dostosowywalna nazwa domeny zabezpieczona za pomocą HTTPS (na przykład, https://logs.twoja-firma.com).
  • Optymalna wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie Graylog cloud hosting Stackhero!

Możesz napotkać błąd taki jak:

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

Błąd ten możesz zobaczyć w logach dostępnych w panelu Stackhero lub w panelu administracyjnym Graylog w System > Overview > Indexer failures.

Ten błąd oznacza, że log został wysłany z wartością pola time, która nie odpowiada oczekiwanemu typowi (w tym przypadku liczba typu "long"). Graylog wykorzystuje funkcję dynamicznego mapowania OpenSearch. Gdy log jest wysyłany po raz pierwszy, OpenSearch próbuje zgadnąć typy pól. Na przykład, jeśli log zawiera pole time z wartością liczbową 1234, OpenSearch zdefiniuje je jako pole numeryczne. Jeśli kolejny log zostanie wysłany z polem time ustawionym na "abcd" (ciąg znaków), OpenSearch odrzuci go, ponieważ oczekuje wartości liczbowej.

Pamiętaj, że nazwa pola time jest użyta tylko jako przykład. Może to być dowolna nazwa pola i typ.

Aby rozwiązać ten problem, należy ponownie zdefiniować typ oczekiwany przez OpenSearch. Więcej informacji znajdziesz w oficjalnej dokumentacji Graylog.

Przed kontynuacją włącz dostęp do OpenSearch w panelu Stackhero. Przejdź do swojej usługi Graylog i kliknij przycisk "Configure", aby aktywować dostęp do OpenSearch.

Zachowaj ostrożność podczas tych zmian – nieprawidłowa konfiguracja może zablokować Twój klaster OpenSearch i potencjalnie spowodować utratę danych. Jeśli masz wątpliwości, nie kontynuuj.

  1. Zdefiniuj nowe mapowanie. W tym przykładzie redefiniujemy pole time jako typ string. Dostępne typy znajdziesz w dokumentacji typów pól OpenSearch.

  2. Zapisz poniższą zawartość do pliku o nazwie graylog-custom-mapping.json:

    {
      "template": "graylog_*",
      "mappings": {
        "message": {
          "properties": {
            "time": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
    
  3. Wyślij ten plik za pomocą poniższego polecenia curl (zamień <XXXXXX>.stackhero-network.com na domenę swojej instancji):

    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'
    

    Powinieneś otrzymać odpowiedź podobną do:

    {
      "acknowledged": true
    }
    
  4. Na koniec sprawdź, czy mapowanie zostało zaktualizowane tym poleceniem (w razie potrzeby zamień domenę):

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