Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Struktura danych niestrukturalnych za pomocą GROK

Jeśli korzystasz z zestawu Elastic (ELK) i jesteś zainteresowany mapowaniem niestandardowych dzienników Logstash z Elasticsearch, ten post jest dla Ciebie.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Zestaw ELK to skrót trzech projektów open source: Elasticsearch, Logstash i Kibana. Razem tworzą platformę do zarządzania dziennikami.

  • Elasticsearch – to system wyszukiwania i analizy.
  • Logstash – to serwerowy procesor danych, który jednocześnie przyjmuje dane z różnych źródeł, przetwarza je, a następnie wysyła do „magazynu”, na przykład Elasticsearch.
  • Kibana umożliwia użytkownikom wizualizację danych za pomocą diagramów i wykresów w Elasticsearch.

Beats pojawił się później i jest lekkim narzędziem do przesyłania danych. Wprowadzenie Beats przekształciło Elk Stack w Elastic Stack, ale to nie jest najważniejsze.

Ten artykuł jest poświęcony Grok, który jest funkcją w Logstash, która może przetwarzać Twoje dzienniki przed ich wysłaniem do magazynu. W naszych celach będę odnosić się tylko do przetwarzania danych z Logstash do Elasticsearch.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Grok to filtr w Logstash, który służy do analizy danych niestrukturalnych na coś strukturalnego i dającego się zapytać. Działa na podstawie wyrażeń regularnych (regex) i wykorzystuje szablony tekstowe do dopasowywania linii w plikach dzienników.

Jak zobaczymy w kolejnych sekcjach, użycie Grok ma kluczowe znaczenie dla efektywnego zarządzania dziennikami.

Bez Grok Twoje dane dziennika są niestrukturalne.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Bez Grok, gdy dzienniki są wysyłane z Logstash do Elasticsearch i wizualizowane w Kibana, pojawiają się tylko w wartości wiadomości.

W tej sytuacji trudne jest zapytanie o istotne informacje, ponieważ wszystkie dane dziennika są przechowywane w jednym kluczu. Lepiej byłoby, gdyby wiadomości dziennika były lepiej zorganizowane.

Dane niestrukturalne z logów

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Jeśli dokładnie przyjrzysz się nieprzetworzonym danym, zobaczysz, że w rzeczywistości składają się one z różnych części, z których każda jest oddzielona spacją.

Dla bardziej doświadczonych programistów prawdopodobnie możesz zgadnąć, co oznacza każda z części i że to jest wiadomość dziennika z wywołania API. Opis każdej pozycji przedstawiony jest poniżej.

Strukturalny wygląd naszych danych

  • localhost == środowisko
  • GET == metoda
  • /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • 400 == status_odpowiedzi
  • 46ms == czas_odpowiedzi
  • 5bc6e716b5d6cb35fc9687c0 == id_użytkownika

Jak widać w danych strukturalnych, istnieje porządek dla niestrukturalnych dzienników. Następnym krokiem jest przetwarzanie danych nieprzetworzonych. To tutaj Grok świeci.

Szablony Grok

Wbudowane szablony Grok

Logstash dostarczany jest z ponad 100 wbudowanymi szablonami do strukturyzacji niestrukturalnych danych. Zdecydowanie powinieneś skorzystać z tej zalety, gdy to możliwe dla ogólnych dzienników systemowych, takich jak apache, linux, haproxy, aws i tak dalej.

Jednak co się dzieje, gdy masz niestandardowe dzienniki, jak w podanym powyżej przykładzie? Musisz stworzyć swój własny szablon Grok.

Niestandardowe szablony Grok

Musisz próbować, aby skonstruować swój własny szablon Grok. Użyłem Grok Debugger i Wzory Grok.

Zauważ, że składnia szablonów Grok wygląda następująco: %{SYNTAX:SEMANTICS}

Pierwszą rzeczą, którą próbowałem zrobić, to przejść na zakładkę Odkryj w debuggerze Grok. Pomyślałem, że byłoby świetnie, gdyby to narzędzie mogło automatycznie generować szablon Grok, ale to nie było zbyt pomocne, gdyż znalazło tylko dwa dopasowania.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Korzystając z tego odkrycia, zacząłem tworzyć własny szablon w debuggerze Grok, używając składni znalezionej na stronie Github Elastic.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Bawiąc się różnymi składniami, w końcu udało mi się ustrukturyzować dane dziennika tak, jak chciałem.

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Link do debuggera Grok https://grokdebug.herokuapp.com/

Tekst źródłowy:

localhost GET /v2/applink/5c2f4bb3e9fda1234edc64d 400 46ms 5bc6e716b5d6cb35fc9687c0

Wzór:

%{WORD:środowisko} %{WORD:metoda} %{URIPATH:url} %{NUMBER:status_odpowiedzi} %{WORD:czas_odpowiedzi} %{USERNAME:id_użytkownika}

To, co udało się osiągnąć

{
  "środowisko": [
    [
      "localhost"
    ]
  ],
  "metoda": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "status_odpowiedzi": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "czas_odpowiedzi": [
    [
      "46ms"
    ]
  ],
  "id_użytkownika": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Mając w rękach szablon Grok i dopasowane dane, ostatnim krokiem jest dodanie go do Logstash.

Aktualizacja pliku konfiguracyjnego Logstash.conf

Na serwerze, na którym zainstalowałeś stos ELK, przejdź do konfiguracji Logstash:

sudo vi /etc/logstash/conf.d/logstash.conf

Wklej zmiany.

input { 
  file {
    path => "/your_logs/*.log"
  }
}
filter{
  grok {
    match => { "message" => "%{WORD:środowisko} %{WORD:metoda} %{URIPATH:url} %{NUMBER:status_odpowiedzi} %{WORD:czas_odpowiedzi} %{USERNAME:id_użytkownika}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

Po zapisaniu zmian, uruchom ponownie Logstash i sprawdź jego stan, aby upewnić się, że nadal działa.

sudo service logstash restart
sudo service logstash status

Na koniec, aby upewnić się, że zmiany zostały wprowadzone, koniecznie zaktualizuj indeks Elasticsearch dla Logstash w Kibana!

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Z Grok twoje dane z logów są uporządkowane!

Porady i wskazówki dotyczące transformacji danych nieustrukturyzowanych z logów w ELK Stack za pomocą GROK w LogStash

Jak widzimy na powyższym obrazku, Grok potrafi automatycznie mapować dane logów do Elasticsearch. Ułatwia to zarządzanie logami i szybkie wyszukiwanie informacji. Zamiast grzebać w plikach logów w celu debugowania, możesz po prostu przefiltrować to, czego szukasz, na przykład środowisko lub adres URL.

Spróbuj dać Grok expressions szansę! Jeśli masz inny sposób na zrobienie tego lub masz jakiekolwiek problemy z powyższymi przykładami, po prostu napisz komentarz poniżej, aby mnie o tym poinformować.

Dzięki za przeczytanie — i proszę, śledź mnie tutaj, na Medium, aby uzyskać więcej interesujących artykułów o inżynierii oprogramowania!

Resources

https://www.elastic.co/blog/do-you-grok-grok
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
https://grokdebug.herokuapp.com/

P.S Link do źródła

Kanał Telegram o Elasticsearch

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster