Elasticsearch w 15 minut

Początki z ElasticSearch są trudne dla nowincjuszy w temacie. Nie pomagają twórcy ktorzy reklamują swoj produkt (a raczej ich kilka) jako "narzędzie do analizy logów". Co może kreować błędną opinie że jest to system "dla informatyków". Tymczasem Elastic Stack (w skrócie Elk) to oprogramowanie które znakomicie nadaje się do przetwarzania danych w biznesie. Jeśli uświadomimy sobie że dane sprzedażowe, rejestry faktur, aktywności naszych klientów są właśnie "logami", szybko zrozumiemy że możemy zastosować ELK w naszej pracy.

Co to jest Elasticsearch?

Elasticsearch jest bazą danych. Jak MySQL, MSSQL, Posgres. Większość z nas wie do czego służy baza danych - nie miejse by to opisywać. Elasticsearch pełni właśnie taką rolę w środowisku ELK; przechowuje dane. Warto tylko wspomnieć że Elasticsearch jest bazą typy NoSQL. To oznacza wiele zalet ale też i ograniczeń. Wbrew ludowym legendom, Elasticsearch nie ma nadzwyczajnych możliwości precyzyjnego wyszykiwanie danych (nie jest to Google) - lepsze rezultaty osiągniemy w SQL. Potęga Elastic to błyskawiczne docieranie do wybranego zakresu danych czy agregacja danych spośrod dziesiątków milionów rekordów. Z samym Elasticsearch niewiele zdziałasz. Będziesz potrzebować interfejsu do bazy danych by nią zarządzać i wizualizować dane. Czyli Kibany. Potrzebować też będziesz narzędzia by załadować dane - Logstash.

Instalujemy bazę danych.

Nie będziemy toczyć akademickich dyskusji jaki procesor czy ile pamieci powinien mieć komputer. Nie może to być 286 a skoro ELK zakodowany został w Jav'ie - im więcej pamięci tym lepiej.... i sama Java także musi istnieć na naszym komputerze. Ok, pobieramy program dla właściwego systemu operacyjnego. Ponieważ mieliśmy uruchomić środowisko w 15 minut, jednocześnie pobieramy też Kibanę i Logstash (jest jedna wersja Logstash dla wszystkich OS - dla Windows pobieramy w formie zip) - niech się dolołduje kiedy będziemy robić inne rzeczy.

Pobrany plik rozpakowujemy do domyślnego katalogu gdzieś na dysku (np. c:\elc). Wchodzimy do katalogu bin i uruchamiamy program:

cd c:\elc\elasticsearch-7.4.2\bin
elasticsearch.bat

Nie klikajcie na elasticsearch.bat ale uruchomcie go właśnie z linii komend - jeśli bedą jakieś problemy, będzie to widoczne. OK, baza danych działa. Zostawiamy ją działającą - będziemy jej potrzebować by połączyć się z Kibany. Po testach po prostu wciśnij Ctrl+C by zatrzymać program. Docelowo możesz zainstalować Elasticsearch jako serwis. Więcej o isntalacji znajdziesz tutaj.

Instalujemy Kibanę

Pobrałeś wcześniej zip i zapisałeś do katalogu. OK, rozpakuj go teraz gdzieś na dysku. Z linii komend wchodzimy do katalogu kibany i uruchamiamy program:

cd c:\elc\kibana-7.4.2\bin
kibana.bat

Bardziej szczegółowe informacje co do instalacji są tutaj. Kibana oczywiście może być także uruchomiona jako serwis. OK, Kibana działa. Zalogujmy się do niej. Uruchom przeglądarkę i wpisz:

http://localhost:5601

Po połączeniu się uzyskamy ekran startowy Kibany. Darmowa wersja Kibany nie oferuje autoryzacji. Jeśli potrzebujesz zabezpieczenia danych w środowisku produkcyjnym, skontaktuj się z nami.

Załaduj następnie przykładowe dane. Menu dostępne jest na ekranie startowym: "Add sample data Load a data set and a Kibana dashboard". Do wyboru masz wiele różnych formatów i typów danych. Wybierz np. "Sample flight data". Kliknij "Add data".

 

Po załadowaniu pojawi się przycisk by przejść do wizualizacji danych - wybierz dashboard.

ABC pracy w Kibana

Kibana służy do zarządzania bazą danych, Elasticsearch, i wizualizacji danych. Jeśli rozpoczynasz pracę z Kibana, pasek ikon po lewej stronie ekranu może być dla Ciebie nieczytelny - rozwiń go klikając na strzałkę w lewym, dolnym rogu ekranu.

Menu Management

Tutaj zarządzasz bazą danych Elassticsearch. Jeśli masz doświadczenie z bazami danych to w uproszczeniu:

Elasticsearch indeks = baza danych

To nie do końca jest prawda ale zobaczysz to poźniej. Nie komplikujmy teraz.

Elasticsearch dokument = rekord w relacyjnej bazie danych

Nie zaprzątaj sobie głowy 'types'. To stara organizacja Elasticearch - funkcjonuje ciągle dla kompatybilności wstecz.

Tak więc wchodząc do menu "Management => Index Management" zobaczysz indeks "kibana_sample_data_flights". Zobaczysz jego status, ile dokumentów (rekordów) zawiera i ile miejsca na dysku zużywa. Wystarczy na teraz.

Menu Visualize

Menu służące tworzeniu i edytowaniu wizualizacji na podstawie danych zgromadzonych w indeksach. Jeśli zainstalowałe(a)ś przykładowe dane 'flight' bedą tam dwa ekrany gotowych wizualizacji danych. W każdej chwili możesz dodać nową wizualizację klikacjąc na "create new visualization".

Menu Dasboard

Po wejściu w to menu ujrzysz testowy dashboard "Sample Flight Data". Dashboard grupuje wizualizacje wykonane w menu wyżej. Zauważ że dashboard jest interaktywny - w każdym momencie możesz ustawić zakres czasowy wyświetlanych danych czy utworzyć filtrowanie danych na dowolnym polu dokumentu (kolumny w tradycyjnym ujęciu). Możesz mieć wiele dashboardów i używać na nim tych samych lub wybranych dla każdego wizualizacji. OK, czas goni - przejdźmy do załadowania własnych danych.

Ładujemy własne dane do Elasticsearch

Rozpakuj pobrany plik Logstash na dysku. W naszym teście dokonamy importu danych z pliku CSV. Przytowowujemy zatem plik testowy zawierający dane (jego nazwa to dane.csv):

datap,cena,sprzedawca
2019-01-01,12.80,Mariusz Radziwił
2019-01-02,45.50,Maria Komorowska

Przygotowujemy plik konfiguracyjny - dzieki niem Logstash będzie wiedział jak ma potraktować plik z danymi i dokąd ma go zapisać:

input {
  file {
    path => "C:/Elastic/Logstash/dane.csv"
    start_position => "beginning"
  }
}
filter {
  csv {
      separator => ","
      columns => ["datap","cena","sprzedawca"]
  }
  date {
    match => ["datap", "yyyy-MM-dd"]
    target => "data_sprzedazy"
    remove_field => ["@timestamp"]
  }
  mutate {
    convert => {
       "cena" => "float"
       "sprzedawca" => "string"
    }
  }
}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "sprzedaz_201902"
  }
  stdout {}
}

W powyższym pliku konfiguracyjnym wkazaliśmy które pola importujemy, jak Logstash ma potraktować datę i dokąd ma zapisać plik. OK, mamy wszystko - pora załadować dane do bazy. Przejdź do katalogu Logstash i uruchom program:

cd c:\elc\logstash-7.4.2\bin
logstash -f C:\Elastic\Logstash\test.conf --config.reload.automatic 

Parametr '-f' wskazuje plik konfiguracyjny. Parametr '--conf.reload.automatic' przeładuje automatycznie Logstash jeśli plik konfiguracyjny się zmieni. Logstash domyślnie będzie czekać na zmiany w pliku i załaduje nowe linie do bazy.

Sprawdźmy co wrzuciliśmy do Elasticsearch

By móc korzystać z danych, potrzebujemy w Kibanie stworzyć 'Index pattern'. Jest to mapowanie danych. Wyobraź sobie że co miesiąc ładujesz dane sprzedaży. Co miesiąc tworzysz nowy index. Masz zatem "sprzedaz_201901, sprzedaz_201902, sprzedaz_201903...". Wzorcem który będzie spinać wszystkie indeksy będzie "sprzedaż" (albo dla roku 2019 "sprzedaz_2019"). Przejdź zatem to menu "Management => Index pattern" i wybierz "Create index pattern". Wpisz 'sprzedaż" i wybierz Next. Na następnym ekranie musisz określić które pole będzie osią czasu dla tych danych. W polu "Time Filter field name" wybierz "data_sprzedazy". Gotowe.

Zobaczmy w końcu nasze dane! :-) Wejdź zatem do menu Discover i wybierz, prawy rog ekranu, zakres dat dla których mieliśmy dane w pliku dane.csv (pole 'datap'). Kliknij Refresh. Na ekranie pojawią sie dokumenty. Gratulacje!

Czy było to trudne? Raczej nie. Elastic daje potężne możliwości analizy danych. Jeśli potrzebujesz wsparcia - napisz do nas.