Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Archiwum: 'ELK' Kategorie

Logstash

Autor: Piotr Karpiuk o 20. grudnia 2019

Wprowadzenie

Logstash to narzędzie będące swoistą stacją przekaźnikową i rozgałęziaczem do przetwarzania strumieni danych. Typowy potok przetwarzania (ang. pipeline) Logstasha łączy wiele strumieni wejściowych w jeden strumień wyjściowy, przy okazji uzupełniając przepływające rekordy danych o nowe informacje. Strumień danych wejściowych jest tu rozumiany bardzo szeroko i obejmuje takie źródła jak pliki dzienników (np. Apache, syslog), brokery komunikatów, usługi HTTP, skrzynka emailowa, wyniki cyklicznie uruchamianych poleceń shella lub zapytań do baz danych, kanały RSS, a nawet strumień postów z Twittera. Typowym wyjściem jest NoSQLowa baza danych Elasticsearch, ale możliwych dodatkowych miejsc docelowych jest wiele, np. możemy sobie zażyczyć aby wszystkie dane dodatkowo zrzucać do pliku lub przekazywać na wejście do jakiegoś skryptu Pythona, wysyłać do aplikacji Graphite, StatsD, itd.

Typowym przykładem transformacji danych dokonywanej przez Logstash jest konwersja rekordu dziennika Apache:

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /images/kibana-search.png HTTP/1.1" 200 203023 "/logstash-monitorama-2013/" \
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

na format JSON, z jednoczesnym ustaleniem nazwy domenowej dla adresu IP i przybliżonej lokalizacji geograficznej adresu IP:

{
        "request" => "/images/kibana-search.png",
          "agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36",
         "offset" => 325,
           "auth" => "-",
          "ident" => "-",
           "verb" => "GET",
         "source" => "/path/to/file/logstash-tutorial.log",
        "message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] GET /images/kibana-search.png HTTP/1.1 ...",
       "referrer" => "/logstash-monitorama-2013/",
     "@timestamp" => 2017-11-09T02:51:12.416Z,
       "response" => "200",
          "bytes" => "203023",
       "clientip" => "83.149.9.216",
     "client_dns" => "gprs-client-83.149.9.216.misp.ru",
          "geoip" => {
              "timezone" => "Europe/Moscow",
                    "ip" => "83.149.9.216",
              "latitude" => 55.7485,
        "continent_code" => "EU",
             "city_name" => "Moscow",
          "country_name" => "Russia",
         "country_code2" => "RU",
         "country_code3" => "RU",
           "region_name" => "Moscow",
              "location" => {
                   "lon" => 37.6184,
                   "lat" => 55.7485
              },
           "postal_code" => "101194",
           "region_code" => "MOW",
             "longitude" => 37.6184
       },
       "@version" => "1",
           "host" => "My-MacBook-Pro.local",
    "httpversion" => "1.1",
      "timestamp" => "04/Jan/2015:05:13:42 +0000"
}
    

Gwoli ścisłości, pod wejście i wyjście Logstasha możemy podpiąć tzw. kodeki które dekodują/kodują dane do określonego formatu (np. protobuf, JSON, itp.).

Czytaj więcej »

Tags:
Napisany w ELK | Brak komentarzy »