Graylog: Problemy z mapowaniem danych
Jak rozwiązać 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 takie jak te:
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"]];
Przyczyna problemu
Problem ten wynika z funkcji dynamicznego mapowania w OpenSearch. Dynamiczne mapowanie automatycznie określa typ danych każdego pola na podstawie pierwszego dokumentu zapisanego w indeksie. Po ustawieniu, ten typ danych jest "zablokowany", a wszelkie przyszłe dokumenty z innym typem danych dla tego pola są odrzucane, co powoduje wyjątek 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 dla "level" na "long" (typ numeryczny). Jeśli późniejszy dokument wysłany do Graylog zawiera pole "level" ustawione na "error" (typ tekstowy), zostanie on odrzucony, ponieważ typ danych nie pasuje do pierwotnie ustawionego typu. To wywołuje 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ć z dowolnym polem, jeśli typy danych są niespójne w dokumentach.
Jak rozwiązać problem
Aby rozwiązać ten problem, masz 2 opcje:
1. Zapewnienie spójności typów danych w systemach
Idealnym 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 wysyłane jako tekst (jak "error", "warn", itp.) lub zawsze jako liczba (3, 4, itp.). Ta spójność zapobiega konfliktom mapowania i zapewnia poprawne przetwarzanie wszystkich dokumentów.
2. Użycie pipeline'ów Graylog do konwersji danych
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 przy odbiorze. Pipeline'y pozwalają na definiowanie reguł, 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 konwersji pola "level" (lub innych pól) do pożądanego typu danych. Na przykład, możesz konwertować poziomy numeryczne na ich odpowiedniki tekstowe (jak 3 na "error", 4 na "warning", itp.).
To podejście zapewnia, że wszystkie przychodzące dane są zgodne z oczekiwanymi typami danych, zapobiegając konfliktom mapowania.
Przeglądanie i zmiana mapowań indeksów
Dla zaawansowanych użytkowników, Graylog oferuje możliwość przeglądania i ręcznego dostosowywania mapowania indeksów:
- Przejdź do "System" > "Indices" w interfejsie webowym Graylog.
- Wybierz odpowiedni indeks.
- Przejdź do "Configuration" > "Configure index field types", aby przeglądać lub modyfikować mapowania pól.
Jednak ręczne dostosowania powinny być podejmowane z ostrożnością, ponieważ nieprawidłowe mapowania mogą prowadzić do dalszych problemów z przetwarzaniem.