Logstash - Architektura wewnętrzna

W tym rozdziale omówimy wewnętrzną architekturę i różne komponenty Logstash.

Architektura usługi Logstash

Logstash przetwarza logi z różnych serwerów i źródeł danych i zachowuje się jak nadawca. Spedytorzy są wykorzystywani do zbierania dzienników, które są instalowane w każdym źródle wejściowym. Brokerzy lubiąRedis, Kafka lub RabbitMQ są buforami do przechowywania danych dla indeksatorów, może istnieć więcej niż jeden broker w przypadku awarii.

Indeksatory lubią Lucenesą używane do indeksowania dzienników w celu uzyskania lepszej wydajności wyszukiwania, a następnie dane wyjściowe są przechowywane w usłudze Elasticsearch lub w innym miejscu docelowym. Dane w pamięci wyjściowej są dostępne dla Kibany i innych programów do wizualizacji.

Architektura wewnętrzna Logstash

Potok Logstash składa się z trzech komponentów Input, Filters i Output. Część wejściowa jest odpowiedzialna za określenie i dostęp do źródła danych wejściowych, takiego jak folder dziennikaApache Tomcat Server.

Przykład wyjaśniający potok Logstash

Plik konfiguracyjny Logstash zawiera szczegółowe informacje o trzech składnikach Logstash. W tym przypadku tworzymy nazwę pliku o nazwieLogstash.conf.

Poniższa konfiguracja przechwytuje dane z dziennika wejściowego „inlog.log” i zapisuje je w dzienniku wyjściowym „outlog.log” bez żadnych filtrów.

Logstash.conf

Plik konfiguracyjny Logstash po prostu kopiuje dane z pliku inlog.log plik za pomocą wtyczki wejściowej i opróżnia dane dziennika do outlog.log plik za pomocą wtyczki wyjściowej.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

Uruchom Logstash

Logstash używa –f możliwość określenia pliku konfiguracyjnego.

C:\logstash\bin> logstash –f logstash.conf

inlog.log

Poniższy blok kodu przedstawia dane dziennika wejściowego.

Hello tutorialspoint.com

outlog.log

Dane wyjściowe Logstash zawierają dane wejściowe w polu komunikatu. Logstash dodaje również inne pola do danych wyjściowych, takie jak znacznik czasu, ścieżka źródła danych wejściowych, wersja, host i tagi.

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

Jak możesz, dane wyjściowe Logstash zawierają więcej niż dane dostarczane przez dziennik wejściowy. Dane wyjściowe zawierają ścieżkę źródłową, znacznik czasu, wersję, nazwę hosta i znacznik, które są używane do reprezentowania dodatkowych komunikatów, takich jak błędy.

Możemy wykorzystać filtry do przetwarzania danych i uczynienia ich przydatnymi dla naszych potrzeb. W następnym przykładzie używamy filtra do pobierania danych, który ogranicza dane wyjściowe tylko do danych z czasownikiem takim jak GET lub POST, po którym następujeUnique Resource Identifier.

Logstash.conf

W tej konfiguracji Logstash dodajemy filtr o nazwie grokaby odfiltrować dane wejściowe. Zdarzenie dziennika wejściowego, które jest zgodne z dziennikiem wejściowym sekwencji wzorców, dociera do miejsca docelowego tylko z błędem. Logstash dodaje znacznik o nazwie „_grokparsefailure” do zdarzeń wyjściowych, który nie jest zgodny z sekwencją wzorca filtru grok.

Logstash oferuje wiele wbudowanych wzorców regex do analizowania popularnych dzienników serwera, takich jak Apache. Wzorzec użyty tutaj oczekuje czasownika, takiego jak get, post itp., Po którym następuje jednolity identyfikator zasobu.

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

Uruchom Logstash

Możemy uruchomić Logstash za pomocą następującego polecenia.

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

Nasz plik wejściowy zawiera dwa zdarzenia oddzielone domyślnym separatorem, tj. Nowym ogranicznikiem linii. Pierwsze zdarzenie pasuje do wzorca określonego w GROk, a drugie nie.

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

Widzimy, że drugie zdarzenie wyjściowe zawiera tag „_grokparsefailure”, ponieważ nie pasuje do wzorca filtru grok. Użytkownik może również usunąć te niedopasowane zdarzenia w danych wyjściowych przy użyciu‘if’ warunek we wtyczce wyjściowej.

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}