Graylog: Problemy z mapowaniem danych

Jak rozwiązywać problemy z mapowaniem danych indeksu w 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!

Częstym problemem w Graylog są konflikty mapowania danych, które mogą prowadzić do nieudanych prób indeksowania. Możesz napotkać ten problem, jeśli zobaczysz logi podobne do poniższych:

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

Problem ten wynika z funkcji dynamicznego mapowania w OpenSearch. Dynamic mapping automatycznie określa typ danych każdego pola na podstawie pierwszego dokumentu zapisanego w indeksie. Po ustaleniu typ danych jest "zablokowany" i każde kolejne dokumenty, w których to pole ma inny typ danych, są odrzucane, co skutkuje błędem mapper parsing exception.

Gdy tworzony jest nowy indeks, pierwszy dokument definiuje mapowanie indeksu. Na przykład, jeśli dokument zawiera pole "level" z wartością 3 (wartość numeryczna), OpenSearch ustawia typ danych pola "level" na "long" (typ liczbowy). Jeśli późniejszy dokument wysłany do Graylog zawiera pole "level" ustawione na "error" (typ tekstowy), zostanie on odrzucony, ponieważ typ danych nie zgadza się z pierwotnie ustalonym typem. Powoduje to błąd mapper_parsing_exception z powodem failed to parse field [level] of type [long] in document with id 'xxx'.

Problem ten może wystąpić dla dowolnego pola, jeśli typy danych są niespójne pomiędzy dokumentami.

Aby rozwiązać ten problem, masz dwie opcje:

Najlepszym rozwiązaniem jest standaryzacja typów danych używanych dla pól we wszystkich systemach wysyłających dane do Graylog. Na przykład upewnij się, że pole "level" jest zawsze przesyłane jako tekst (np. "error", "warn" itd.) lub zawsze jako liczba (3, 4 itd.). Taka spójność zapobiega konfliktom mapowania i zapewnia prawidłowe przetwarzanie wszystkich dokumentów.

Jeśli standaryzacja typów danych we wszystkich systemach nie jest możliwa, możesz użyć pipeline'ów Graylog do konwersji typów danych podczas odbioru. Pipeline'y pozwalają definiować reguły, które przekształcają dane na podstawie określonych warunków.

Aby wdrożyć to rozwiązanie:

  • Przejdź do "System" > "Pipelines" w interfejsie webowym Graylog.
  • Kliknij "Add new pipeline", aby utworzyć nowy pipeline.
  • Zdefiniuj reguły konwertujące pole "level" (lub inne pola) do oczekiwanego typu danych. Na przykład możesz zamienić numeryczne poziomy na odpowiadające im tekstowe reprezentacje (np. 3 na "error", 4 na "warning" itd.).

Takie podejście zapewnia, że wszystkie przychodzące dane mają oczekiwane typy danych, co zapobiega konfliktom mapowania.

Dla zaawansowanych użytkowników Graylog umożliwia podgląd i ręczną edycję mapowania indeksów:

  • Przejdź do "System" > "Indices" w interfejsie webowym Graylog.
  • Wybierz odpowiedni indeks.
  • Przejdź do "Configuration" > "Configure index field types", aby zobaczyć lub zmodyfikować mapowanie pól.

Należy jednak zachować ostrożność przy ręcznych zmianach, ponieważ nieprawidłowe mapowanie może prowadzić do kolejnych problemów z przetwarzaniem danych.