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"
]
}