Graylog: Problemy z mapowaniem danych

Jak rozwiązywać problemy z mapowaniem danych indeksu w Graylog

👋 Witamy w dokumentacji Stackhero

Stackhero oferuje w pełni zarządzane rozwiązanie Graylog cloud, zaprojektowane z myślą o szybkości i prostocie. Możesz:

  • Korzystać z nielimitowanego, dedykowanego serwera SMTP email, który jest wliczony w usługę.
  • Wdrażać aktualizacje bez wysiłku, jednym kliknięciem, bez konieczności ręcznej ingerencji.
  • Używać własnej nazwy domeny zabezpieczonej przez HTTPS (na przykład https://logs.twoja-firma.com), zapewniając swojemu zespołowi bezpieczny, bezpośredni dostęp.
  • Doświadczać wysokiej wydajności i bezpieczeństwa na prywatnej, dedykowanej infrastrukturze – bez współdzielonych zasobów i zakłócających sąsiadów.

Skup się na swoich danych, nie na narzędziach: rozpoczęcie pracy z Graylog cloud hosting od Stackhero zajmuje tylko kilka minut.

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.