Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Strukturyzacja nieustrukturyzowanych danych za pomocą GROK

Jeśli używasz stosu Elastic (ELK) i jesteś zainteresowany mapowaniem niestandardowych dzienników Logstash na Elasticsearch, ten post jest dla Ciebie.

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Stos ELK jest akronimem trzech projektów open source: Elasticsearch, Logstash i Kibana. Razem tworzą platformę do zarządzania logami.

  • Elasticsearch to system przeszukiwawczo-analityczny.
  • Logstash to potok przetwarzania danych po stronie serwera, który pobiera dane z wielu źródeł jednocześnie, przekształca je, a następnie wysyła do „skrytki”, takiej jak Elasticsearch.
  • Kibana pozwala użytkownikom wizualizować dane za pomocą wykresów i wykresów w Elasticsearch.

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

Ten artykuł dotyczy Groka, czyli funkcji Logstash, która może przekształcić Twoje logi przed wysłaniem ich do skrytki. Dla naszych celów będę mówił tylko o przetwarzaniu danych z Logstash do Elasticsearch.

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Grok to filtr w Logstash, który służy do analizowania nieustrukturyzowanych danych w coś ustrukturyzowanego i nadającego się do zapytań. Znajduje się na wyrażeniu regularnym (regex) i używa wzorców tekstowych do dopasowywania ciągów znaków w plikach dziennika.

Jak zobaczymy w kolejnych sekcjach, użycie Groka robi dużą różnicę, jeśli chodzi o efektywne zarządzanie logami.

Bez Groka dane dziennika są nieustrukturyzowane

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Bez Groka, gdy logi są wysyłane z Logstash do Elasticsearch i renderowane w Kibanie, pojawiają się one tylko w wartości komunikatu.

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

Nieustrukturyzowane dane z logów

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

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

Bardziej doświadczeni programiści prawdopodobnie zgadną, co oznacza każda z części i jaki jest komunikat dziennika z wywołania API. Poniżej omówiono prezentację każdego elementu.

Ustrukturyzowany widok naszych danych

  • ​ localhost == środowisko
  • ​ GET == metoda
  • ​ /v2/applink/5c2f4bb3e9fda1234edc64d == url
  • ​ 400 == status_odpowiedzi
  • ​ 46 ms == czas_reakcji
  • ​ 5bc6e716b5d6cb35fc9687c0 == user_id

Jak widzimy w danych strukturalnych, istnieje kolejność logów nieustrukturyzowanych. Kolejnym krokiem jest programowa obróbka surowych danych. Tutaj Grok błyszczy.

Szablony Groka

Wbudowane szablony Grok

Logstash zawiera ponad 100 wbudowanych szablonów do strukturyzowania nieustrukturyzowanych danych. Zdecydowanie powinieneś skorzystać z tego, jeśli to możliwe, w przypadku ogólnych logów syslogowych, takich jak Apache, Linux, haproxy, aws i tak dalej.

Co się jednak stanie, jeśli masz niestandardowe dzienniki, jak w powyższym przykładzie? Musisz zbudować własny szablon Grok.

Niestandardowe szablony Grok

Musisz spróbować zbudować własny szablon Grok. użyłem Debuger Groka и Wzory Groka.

Należy pamiętać, że składnia szablonu Grok jest następująca: %{SYNTAX:SEMANTIC}

Pierwszą rzeczą, którą próbowałem zrobić, było przejście do zakładki odkryj w debugerze Grok. Pomyślałem, że byłoby fajnie, gdyby to narzędzie mogło automatycznie generować wzór Groka, ale nie było to zbyt przydatne, ponieważ znalazło tylko dwa dopasowania.

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

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

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

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

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

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

Oryginalny tekst:

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

Wzór:

%{WORD:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}

Co zdarzyło się na końcu

{
  "environment": [
    [
      "localhost"
    ]
  ],
  "method": [
    [
      "GET"
    ]
  ],
  "url": [
    [
      "/v2/applink/5c2f4bb3e9fda1234edc64d"
    ]
  ],
  "response_status": [
    [
      "400"
    ]
  ],
  "BASE10NUM": [
    [
      "400"
    ]
  ],
  "response_time": [
    [
      "46ms"
    ]
  ],
  "user_id": [
    [
      "5bc6e716b5d6cb35fc9687c0"
    ]
  ]
}

Mając już szablon Grok i zmapowane dane, ostatnim krokiem jest dodanie go do Logstash.

Aktualizowanie 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:environment} %{WORD:method} %{URIPATH:url} %{NUMBER:response_status} %{WORD:response_time} %{USERNAME:user_id}"}
  }
}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
  }
}

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

sudo service logstash restart
sudo service logstash status

Na koniec, aby upewnić się, że zmiany weszły w życie, Pamiętaj o zaktualizowaniu indeksu Elasticsearch dla Logstash w Kibanie!

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Dzięki Grok Twoje dane dziennika są uporządkowane!

Wskazówki i porady dotyczące konwersji nieustrukturyzowanych danych z dzienników do stosu ELK przy użyciu GROK w LogStash

Jak widać na powyższym obrazku, Grok jest w stanie automatycznie dopasowywać dane dziennika za pomocą Elasticsearch. Ułatwia to zarządzanie logami i szybkie wyszukiwanie informacji. Zamiast przekopywać się przez pliki dziennika w celu debugowania, możesz po prostu filtrować według tego, czego szukasz, na przykład środowiska lub adresu URL.

Wypróbuj wyrażenia Groka! Jeśli masz inny sposób, aby to zrobić lub masz problemy z powyższymi przykładami, po prostu napisz komentarz poniżej, aby dać mi znać.

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

Ресурсы

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ł telegramu wg Elasticsearch

Źródło: www.habr.com

Dodaj komentarz