Elasticsearch to rozproszone narzędzie umożliwiające wyszukiwanie i analizowanie gromadzonych przez nas danych. Elasticsearch jest także klasyfikowany jako baza NoSQL przechowująca te dane w specyficznym dla siebie formacie zwanym indeksem. Fizycznie bazuje on na bibliotece Apache Lucene której twórcą jest Doug Cutting, autor wielu innych popularnych narzędzie jak Apache Nutch i Apache Hadoop. Za rozwojem Elasticsearch stoi firma Elastic.

Rodzina narzędzi Elasticsearch

Firma Elastic stworzyła cały stos technologiczny narzędzi które umożliwiają budowanie kompletnych systemów wyszukiwania i analizowania danych. Sercem takiego środowiska jest Elasticsearch zaś pozostałe narzędzia go uzupełniają. Jednym z dość często używanych narzędzi jest Kibana służąca do wizualizacji i prezentacji zgromadzonych w Elasticsearch danych. Możemy w niej tworzyć interaktywne kokpity managerskie (dashboards) lub wykorzystać ją do tworzenia zapytań i przeglądu wyników. Elasticsearch musi także w jakiś sposób zostać zasilony danymi, do czego możemy wykorzystać narzędzie Logstash umożliwiające realizację procesów ETL (Extract, Transform, Load) czyli zgromadzenia danych z zewnętrznych źródeł, wstępnego ich oczyszczenia i obrobienia a następnie zindeksowania w Elasticsearch. W celu ładowania danych możemy także wykorzystać narzędzie zwane Beats, które jest tak naprawdę zbiorem konektorów które mogą przesyłać dane do Logstash lub bezpośrednio do Elasticsearch z innych maszyn. Moduły Beats napisane są w języku Go dzięki czemu są bardzo wydajne i zużywają mało pamięci. Część modułów jest tworzonych przez firmę Elastic, pozostałe tworzone są przez społeczność z całego świata.

Licencja, czyli ile to będzie nas kosztować?

Większość narzędzi firmy Elastic, takie jak Elasticsearch, Kibana, Logstash czy Beats mają otwarty kod źródłowy. Niektóre jednak komponenty Elastic Stack jak np. X-Pack, czyli zbiór dodatkowych funkcjonalności do Elastic Stack takie jak security lub monitoring, były udostępniane na licencji komercyjnej o zamkniętym kodzie źródłowym. Dopiero od wersji 6.3 Elastic ogłosił udostępnienie kodu źródłowego i złączeniu go z kodem źródłowym otwartych narzędzi jak Elasticsearch, Kibana, Logstash i Beats. Od wersji 6.3 Elastic Stack jest udostępniany na dwóch licencjach, podstawowe narzędzia są udostępnione na licencji Apache 2.0, zaś moduły należące do X-Pack na nowej dedykowanej komercyjnej licencji Elastic. Oznacza to, że część funkcjonalności dostępnych w X-Pack będzie darmowa (tak zwany X-Pack basic), zaś pozostałe funkcjonalności będą płatne.

Obecnie dostępne są cztery wersje subskrypcji Elastic Stack. Wszystkie z nich mają otwarty kod źródłowy, jednak tylko pierwsza “Open Source” pozwala na jego darmowe i dowolne użycie na podstawie licencji Apache 2.0. Kolejna wersja subskrypcji “Basic” jest nadal darmowa, kod źródłowy jest otwarty, jednak modyfikować możemy go tylko dla własnego użytku i nie możemy czerpać korzyści majątkowych ze sprzedaży samodzielnej oprogramowania Elastic, jak to jest w licencji Apache 2.0. Kolejne dwie licencje, czyli “Gold” i “Platinum” są płatne, zaś wycena dla firm jest robiona indywidualnie. Różnica pomiędzy tymi dwoma wersjami polega na innych zasadach wsparcia (support) oraz innego zestawu narzędzi z których możemy korzystać.

W przypadku wersji Elastic Cloud, cena jest liczona w podejściu płatności za użycie.

Wdrożenie Elastic Stack

Elasticsearch wraz z innymi komponentami całego stosu technologicznego może być wdrożony na kilka sposobów, w zależności od naszych potrzeb, środowiska w którym pracujemy oraz sposobu rozliczania.

Jedną z podstawowych metod wdrożenia Elastic Stack w naszej firmie jest ściągnięcie paczki ze strony firmy i samodzielna instalacja na własnych zasobach. Jest to jedna z najtrudniejszych instalacji, jednak oferuje szerokie możliwości dostosowania wszystkich narzędzi do naszych potrzeb. Instalacja taka może być przeprowadzona na maszynach fizycznych, maszynach wirtualnych bądź przy użyciu środowiska Docker i Kubernetes.

Jeżeli interesuje nas praca z Elasticsearch na zasadach SaaS, możemy skorzystać z środowiska chmurowego Elastic Cloud bazującego na infrastrukturze Amazon Web Service lub Google Cloud Platform. W tym podejściu płacimy tylko za użycie bazując na wybranych zasobach i czasie uruchomienia. W tej wersji cały proces wdrożenia jest w pełni zautomatyzowany i sterowany z poziomu GUI.

Mamy także możliwość instalacji środowiska podobnego do tego dostępnego w Elastic Cloud lecz na własnej infrastrukturze komputerowo sieciowej (on-premise). Dzięki temu podejściu, instalacja całego środowiska jest zautomatyzowana i dużo prostsza, gdyż możemy zarządzać tym przez interfejs graficzny tak jak to jest robione w wersji “Elastic Cloud”. Środowisko takie działa w oparciu o kontenery Docker.

Elastic Stack w świecie Big Data

Elasticsearch jest narzędziem które z natury działa w środowisku rozproszonym. Oznacza to, że można z łatwością zwiększać jego wydajność oraz ilość analizowanych informacji poprzez dostawienie kolejnych węzłów obliczeniowych do naszego klastra. Mechanizm replikacji umożliwia nam dodatkowo zwiększenie dostępności rozwiązania, gdyż utrata jednej z maszyn na których działa klaster Elasticsearch nie wpływa na działanie narzędzia.

Zespół Elastic’a przygotował także specjalny moduł do integracji z ekosystemem rozwiązań Apache Hadoop. Dzięki takiemu połączeniu, możemy wykorzystać Elasticsearch do zindeksowania i analizowania danych zgromadzonych w Hadoop Distributed File System oraz Kibana do ich wizualizacji. W drugą stronę, HDFS może być użyty jako usługa kopii zapasowej dla Elasticsearch.

Integracja Elastic Stack z ekosystemem Apache Hadoop (obraz pochodzi z www.elastic.co)

Sztuczna inteligencja w Elasticsearch

Wykupując najwyższą subskrypcję “Platinum”, dostajemy dostęp do modułów uczenia maszynowego. Dzięki wbudowanym algorytmów uczenia nienadzorowanego (Unsupervised learning) możemy łatwo i wydajnie wykonywać detekcję anomalii lub wytyczać prognozy. Cały proces zarządzany jest z poziomu interfejsu graficznego Kibana.

Typowe zastosowania

Elastic Stack może być użyty do wielu zastosowań. Jednym z podstawowych jest wyszukiwanie informacji dla naszych aplikacji. W takiej sytuacji Elasticsearch jest użyty do zindeksowania danych które gromadzimy w bazie danych, zaś nasza aplikacja (np. mikroserwis) wykonuje zapytania REST w celu wydajnego przeszukiwania tych informacji. Dzięki takiemu podejściu możemy otrzymać wydajną i zaawansowaną wyszukiwarkę produktów na naszej stronie.

Innym przykładem zastosowania Elastic Stack może być wyszukiwanie informacji na naszej stronie. Wtedy wyspecjalizowany crawler analizuje zawartość naszego całego serwisu i odpowiednio indeksuje to w Elasticsearch w celu późniejszego przeszukiwania.

Kolejnym popularnym zastosowaniem Elastic Stack jest tak zwany Enterprise Search, czyli w skrócie możliwość wyszukiwania informacji w firmowych repozytoriach dla uprawnionej grupy pracowników. Jako ciekawostkę można dodać, że popularne repozytoria jak np. Liferay i Alfresco mają wbudowane proste wyszukiwarki, podobnie jak Elasticsearch, bazujące na bibliotece Lucene.

Jednym z podstawowych zadań stawianym rozwiązaniom z rodziny Elasticsearch jest analiza wszelakiego rodzaju logów, metryk czy nawet wydajności systemów (APM, Application Performance Management). Jedno z ostatnich naszych wdrożeń, polegało na wykorzystaniu Elastic Stack w połączeniu z narzędziem Fluentd do monitorowania klastra Kubernetes.

Elastic Stack sprawdza się także w środowisku Business Intelligence jako narzędzie do agregowania i analizowania danych biznesowych. W takim zastosowaniu możemy używać tylko rozwiązań firmy Elastic albo zintegrować je z rozwiązaniami innych firm.

Szeroki wachlarz możliwości jakie oferuje Elastic Stack, spowodował, że zaufało mu wiele firm z całego świata jak np. Orange, Ebay, Adobe, Cisco, Airbus, Vimeo, Blizzard, City, Volkswagen, Deutsche Telekom, Microsoft, Zalando, Slack, Tinder, Netflix i Facebook.

Popularność w świecie IT

Według portalu DB-Engines zbierającego informacje o różnych bazach danych, Elasticsearch jest obecnie najpopularniejszych narzędziem w kategorii wyszukiwania informacji oraz ósmym w ogólnym rankingu popularności wszystkich rozwiązań bazodanowych.

Ranking baz danych, styczeń 2019 (obraz pochodzi z db-engines.com)

Ranking silników wyszukujących, styczeń 2019 (obraz pochodzi z db-engines.com)

Na wykresie poniżej widać także nieustannie rosnącą popularność tego rozwiązania.

Popularność Elasticsearch na przestrzeni lat, styczeń 2019 (obraz pochodzi z db-engines.com)

Podsumowanie

Elasticsearch wraz całym ekosystemem Elastic Stack jest obecnie najpopularniejszym rozwiązaniem do tworzenia systemów wyszukiwania i analizowania danych. Wdrożenie go jako elementu naszego systemu analitycznego pozwala znacząco zwiększyć jego możliwości oraz ułatwić korzystanie dzięki bardzo przyjaznemu interfejsowi użytkownika.