Logstash - analizowanie dzienników

Logstash odbiera dzienniki za pomocą wtyczek wejściowych, a następnie używa wtyczek filtrów do analizowania i przekształcania danych. Analiza i transformacja logów są wykonywane zgodnie z systemami obecnymi w miejscu docelowym danych wyjściowych. Logstash analizuje dane logowania i przekazuje tylko wymagane pola. Później pola te są przekształcane w kompatybilną i zrozumiałą formę systemu docelowego.

Jak analizować dzienniki?

Parsowanie dzienników odbywa się za pomocą rozszerzenia GROK (Graficzna reprezentacja wiedzy) wzorce i można je znaleźć na Github -

https://github.com/elastic/logstash/tree/v1.4.2/patterns.

Logstash dopasowuje dane dzienników z określonym wzorcem GROK lub sekwencją wzorców do analizowania dzienników, na przykład „% {COMBINEDAPACHELOG}”, który jest powszechnie używany w dziennikach Apache.

Przeanalizowane dane są bardziej uporządkowane i łatwe do przeszukiwania i wykonywania zapytań. Logstash wyszukuje określone wzorce GROK w dziennikach wejściowych i wyodrębnia pasujące wiersze z dzienników. Możesz użyć debugera GROK, aby przetestować swoje wzorce GROK.

Składnia wzorca GROK to% {SYNTAX: SEMANTIC}. Filtr Logstash GROK jest zapisany w postaci -

%{PATTERN:FieldName}

Tutaj PATTERN reprezentuje wzorzec GROK, a nazwa pola to nazwa pola, które reprezentuje przeanalizowane dane w wyniku.

Na przykład za pomocą debugera online GROK https://grokdebug.herokuapp.com/

Wejście

Przykładowy wiersz błędu w dzienniku -

[Wed Dec 07 21:54:54.048805 2016] [:error] [pid 1234:tid 3456829102]
   [client 192.168.1.1:25007] JSP Notice:  Undefined index: abc in
   /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11

Sekwencja wzorców GROK

Ta sekwencja wzorca GROK jest zgodna ze zdarzeniem dziennika, które składa się ze znacznika czasu, po którym następuje poziom dziennika, identyfikator procesu, identyfikator transakcji i komunikat o błędzie.

\[(%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[.*:%{LOGLEVEL:loglevel}\]
   \[pid %{NUMBER:pid}:tid %{NUMBER:tid}\] \[client %{IP:clientip}:.*\]
   %{GREEDYDATA:errormsg}

wynik

Dane wyjściowe są w formacie JSON.

{
   "day": [
      "Wed"
   ],
   "month": [
      "Dec"
   ],
   "loglevel": [
      "error"
   ],
   "pid": [
      "1234"
   ],
   "tid": [
      "3456829102"
   ],
   "clientip": [
      "192.168.1.1"
   ],
   "errormsg": [
      "JSP Notice:  Undefined index: abc in
      /home/manu/tpworks/tutorialspoint.com/index.jsp on line 11"
   ]
}