Elasticsearch ist eine Suchmaschine und Analytics Engine, mit der es möglich ist, die gewaltigen Mengen an Logdaten in heutigen Serverumgebungen auszuwerten und darzustellen. Thema dieses Beitrags ist der Vergleich der verschiedenen Arten der Bereitstellung von Elasticsearch in der AWS Cloud. Dazu gibt es im Wesentlichen drei Möglichkeiten, die im Folgenden kurz vorgestellt werden.
Amazon Elasticsearch Service
Bei dem Amazon Elasticsearch Service (Amazon ES) handelt es sich um einen managed Service. Mit Amazon ES ist die Bereitstellung einer Elasticsearch Umgebung in wenigen Schritten möglich. Die Bereitstellung erfolgt über eine Webbasierte Oberfläche. Über die Oberfläche können diverse Parameter, wie z.B. der Instance Typ und die Anzahl der Master- und Daten-Knoten, eingestellt werden. Amazon ES verwendet eine angepasste Version von Elasticsearch, welche nur Code unter Open Source Lizenzen beinhaltet.
Elastic Cloud
Die Elastic Cloud ist ein managed Service von Elastic, dem Entwickler von Elasticsearch, welcher die Bereitstellung von Elasticsearch in der Cloud stark vereinfacht. Die Konfiguration erfolgt auch hier über eine Weboberfläche, durch die diverse Einstellungsmöglichkeiten bestehen. Auch bei diesem Service ist es möglich, Parameter wie die Größe des Arbeitsspeichers, die Anzahl der Master- und Daten-Knoten sowie diverse weitere Parameter einzustellen.
Eigenständige Installation
Die Installation von Elasticsearch über den Paketmanager aus dem offiziellen Elastic Repository oder aus einem Archiv bietet die größte Flexibilität. Sämtliche Einstellungen müssen manuell vorgenommen werden.
Bei allen drei Bereitstellungsarten wird eine Installation bestehend aus Elasticsearch und Kibana auf dem Master-Knoten verwendet. Kibana wird in diesem Zusammenhang als Webbasiertes Tool zur einfachen Visualisierung von Daten eingesetzt. Die Erfassung der Logdaten wird durch dedizierte Instanzen durchgeführt. Hierzu werden spezielle Programme wie Logstash, ein Programm zur Pipelinebasierten Verarbeitung von Logdaten, oder einer/mehrere der verfügbaren Beats (Programme zum Sammeln, Analysieren und Versenden von Logdaten) verwendet. Die Daten werden von den Programmen an Elasticsearch gesendet.
Die Bereitstellung der blau hinterlegten Programme wird von den Anbietern der managed Services (Amazon ES & Elastic Cloud) verwaltet. Die Programme in den rot hinterlegten Feldern müssen vom Benutzer selbst installiert und verwaltet werden.
Bei einer manuellen Installation müssen sowohl die rot als auch die blau hinterlegten Programme vom Nutzer selbst installiert und verwaltet werden.
Anzahl Master-Knoten
Bei allen drei Arten der Bereitstellung ist es möglich, die von Elastic empfohlene Anzahl von drei zum Master berechtigten Knoten einzustellen. Bei einem Elasticsearch Cluster mit mehreren möglichen Mastern einigen sich die zum Master berechtigten Knoten beim Start auf einen Knoten welcher der eigentliche Master wird. Sollte der Master-Knoten ausfallen, verbleiben noch 2 Knoten im Cluster, welche Master werden können. Die beiden Knoten verständigen sich untereinander, wer der neue Master-Knoten des Clusters wird. Dieses Verfahren erhöht die Ausfallsicherheit deutlich.
Verfügbarkeitszonen
Es ist bei allen genannten Bereitstellungsarten möglich, die Knoten auf verschiedene Verfügbarkeitszonen (AZ) zu verteilen. Bei Elastic Cloud ist jeweils ein Knoten je Verfügbarkeitszone möglich. Die Verteilung erfolgt auf bis zu drei Verfügbarkeitszonen. Die Anzahl der Master- und Kibana-Knoten ist getrennt voneinander einstellbar. Bei Amazon ES können bis zu 40 Knoten auf bis zu drei Verfügbarkeitszonen verteilt werden, wobei die Anzahl der Kibanaknoten nicht eingestellt werden kann. Bei der eigenständigen Installation ist die Anzahl der Knoten und der Verfügbarkeitszonen nicht eingeschränkt. Durch die Bereitstellung der Knoten in unterschiedlichen Verfügbarkeitszonen wird die Ausfallsicherheit erhöht. Durch die Verwendung mehrerer Verfügbarkeitszonen kann Elasticsearch die indizierten Daten durch sogenannte Replicagroups auf mehreren Knoten speichern. Die Daten werden auf den einzelnen Knoten immer als vollständige Kopie gespeichert. Beim Lesen von Daten von einem Index wählt Elasticsearch über das Adaptive Replica Selection (ARS) Verfahren den aus seiner Sicht für die Anfrage am besten geeigneten Knoten für die Bereitstellung der Daten aus. Bei der Auswahl werden unter anderem die Parameter “Ausstehende Suchanfragen an einen Knoten” und “Anzahl der Knoten im Cluster” berücksichtigt. Durch den Einsatz von Knoten, welche nur als Master berechtigt (dedizierter Master) konfiguriert sind lässt sich die Stabilität des Clusters weiter steigern. Die Erstellung von dedizierten Mastern ist bei allen drei Varianten verfügbar. Ebenso wie die Erstellung von dedizierten Mastern möglich ist, können auch reine Datenknoten erstellt werden, welche nicht berechtigt sind, Master des Clusters zu werden.
In-place Upgrades
Upgrades zur Laufzeit des Clusters sind bei allen drei Deployment Varianten möglich. Bei den beiden managed Services wird das Upgrade über die Weboberfläche durchgeführt. Ein manuelles Upgrade ist bei der manuellen Installation erforderlich.
Backups
Bei Amazon ES wird standardmäßig jede Stunde ein Snapshot erstellt, der 14 Tage gespeichert wird. In Elastic Cloud erfolgt die Erstellung der Snapshots alle 30 Minuten, wobei das Intervall angepasst werden kann. Die Aufbewahrungszeit beträgt zwei Tage. Bei der eigenständigen Installation kann man den Zeitplan für die Erstellung der Snapshots und die Speicherdauer selbst festlegen.
Sicherheit
In Elastic Cloud ist die Elasticsearch Installation durch eingebaute Sicherheitsfeatures, wie z.B. einer Benutzerverwaltung mit Berechtigungsrollen oder einer SSL Verschlüsselung, geschützt. Bei der manuellen Installation ist die Verwendung der Sicherheitsfeatures nach manueller Konfiguration ebenfalls möglich. Bei Amazon ES werden einige der Sicherheitsfeatures über ein Plugin bereitgestellt. Eine Kapselung der Installation in eine Virtual Private Cloud (VPC) ist bei allen Deploymentarten möglich. Ein Schutz der Daten im Cluster über Encryption at Rest ist bei allen drei Bereitstellungsarten möglich. Bei Amazon ES ist außerdem eine Integration von AWS KMS verfügbar. Ein Zugriff über https ist ebenfalls bei allen drei Varianten möglich. Bei der manuell Installierten Variante ist eine Verschlüsselung von Snapshots im S3 mit dem AES256 Algorithmus möglich.
Verfügbarkeit neuer Elasticsearch Versionen
In der Elastic Cloud werden neue Versionen und Sicherheitspatches, ebenso wie bei der manuellen Installation, am Tag Ihrer Veröffentlichung bereitgestellt. Bei Amazon ES erfolgt die Bereitstellung neuer Versionen und Sicherheitspatches deutlich langsamer. Aktuell ist die Version 7.7 von Elasticsearch verfügbar. Bei Amazon ES ist die aktuellste Version jedoch 7.4.
Übersicht der Verfügbarkeit von Elasticsearch Versionen bei Amazon ES:
Version | Elastic | Open Distro for Elasticsearch | Amazon ES |
7.1 | 20.05.2019 | 17.07.2019 | 13.08.2019 |
7.4 | 01.10.2019 | 22.11.2019 | 12.03.2020 |
7.7 | 13.05.2020 | 15.05.2020 | - |
Die Bereitstellung von neuen Elasticsearch Versionen in Amazon ES kann unter Umständen längere Zeit dauern.
Konfiguration
In Amazon ES gibt es nur sehr eingeschränkten Zugriff auf die Konfiguration von Elasticsearch. Es ist nicht möglich, Anpassungen an der Konfigurationsdatei von Elasticsearch oder Kibana vorzunehmen. Eine Einstellung diverser Sicherheitsrelevanter Paramater ist möglich. Bei Elastic Cloud ist es möglich, am Ende der Elasticsearch- und Kibana-Konfigurationsdatei eigene Parameter anzuhängen. Bei der manuell installierten Variante erhält man Zugriff auf sämtliche Konfigurationsmöglichkeiten.
Verfügbarkeit sonstiger Funktionen
Bei der manuellen Installation und in der Elastic Cloud stehen alle Elasticsearch Funktionen zur Verfügung. Bei Amazon ES jedoch gibt es eine Reihe von Features bzw. Programmierschnittstellen (APIs), welche nicht unterstützt werden. Amazon ES unterstützt zum Beispiel die X‑Pack Features von Elasticsearch nicht. Die X‑Pack Features stellen Funktionen für Stack Security, Alerting, Monitoring, Graph, Reporting und Machine Learning bereit. Ebenfalls nicht verfügbar sind das Index-Lifecycle-Management und diverse weitere Funktionen. Einige der in Amazon ES fehlenden Funktionen lassen sich mehr oder weniger gut durch AWS Services ersetzen. Eine Übersicht, über die nicht oder nicht vollständig unterstützten Funktionen ist hier zu finden.
Elastic Stack
Bei Amazon ES sind die Logfiles nur über den kostenpflichtigen Dienst CloudWatch einsehbar. In der Elastic Cloud sind einige Logeinträge über die Weboberfläche einsehbar. Amazon ES erlaubt den Einblick in einige Metriken in graphischer Form. Durch die Integration in CloudWatch ist eine nahtlose Anbindung an weitere AWS Dienste möglich. Elastic Cloud beinhaltet die Darstellung einiger Metriken in Kibana (als zusätzliches Feature unter der proprietären Elastic Lizenz). Bei der manuell installierten Variante hat man Zugriff auf sämtliche Logfiles und Metriken, muss die Aufbereitung aber selbstständig konfigurieren.
Plugins
Bei Amazon ES ist die Installation von eigenen Plugins nicht möglich. Bei Elastic Cloud ist die Installation von Plugins über die Weboberfläche möglich. Ebenso ist eine Installation von Plugins bei der manuell Installierten Variante möglich. Durch die Installation von Plugins (S3 Repository Plugin) ist unter anderem eine Integration mit AWS S3 möglich. Bei Amazon ES ist die Integration mit S3 bereits ohne die Installation des Plugins vorhanden. Diese Integration ist beim Amazon ES Service natürlich vorhanden. Eine Liste der offiziellen Elasticsearch Plugins ist unter hier zu finden.
Instanz Typen
Bei Amazon ES ist man auf eine gewisse limitierte Auswahl von Instanz Typen beschränkt. Bei Elastic Cloud kann man nur die Größe des Arbeitsspeichers (RAM) der Instanzen angeben. Die Einbindung von speziellen Machine Learning Instanzen in das Cluster ist möglich. Bei einem manuell installierten Elasticsearch in der AWS Cloud ist es möglich, aus allen Verfügbaren Instanz Typen den am besten geeignetsten auszuwählen und die Installation darauf durchzuführen.
Kosten
Bei der Verwendung von Amazon ES entstehen Kosten für die genutzte Cloudinstanz und die AWS-Datenübertragung (ausgenommen Datentransfer innerhalb des Clusters). Die Speicherung der automatisch erstellten Snapshots ist kostenlos. Für die Erstellung eigener Snapshots fallen die üblichen S3 Speichergebühren an. Für die Nutzung von Elasticsearch und Kibana selbst fallen durch die ausschließliche Nutzung von Open Source Code keine Kosten an. Auch die Verwaltung des Services durch AWS verursacht keine weiteren Kosten. In der Elastic Cloud fallen Kosten für die Nutzung des Services in Abhängigkeit von dem genutzten RAM an. Darüber hinaus fallen Kosten für die Speicherung von Snapshots, die Verwendung der Snapshot API, den ausgehenden Datentransfer und den Datenverkehr zwischen den unterschiedlichen Nodes an. Bei einer eigenständig installierten Instanz von Elasticsearch fallen Kosten für die genutzten EC2 Instanzen und Datentransfer an.
Fazit
Die Bereitstellung von Elasticsearch und Kibana über die drei dargestellten Methoden bietet jeweils Vor und Nachteile. Die Verwendung von Amazon ES eignet sich für Projekte, die auf die Verwendung von 100% Open Source Code angewiesen sind. Durch die ausschließliche Verwendung von Open Source Code fehlen jedoch einige Features, welche in der unter der Elastic Lizenz verfügbaren Version enthalten sind. Durch die fehlenden Features eignet sich Amazon ES eher für einfachere Projekte. Die Einrichtung ist in wenigen Minuten durchgeführt.
In Elastic Cloud ist es möglich in kurzer Zeit ein Cluster aus mehreren Nodes mit Elasticsearch und Kibana bereitzustellen. Ein großer Vorteil der Elastic Cloud ist die einfache Verwaltung und die sofortige Verfügbarkeit neuer Versionen. Aufgrund des vollen Funktionsumfangs von Elasticsearch und der schnellen Bereitstellung von Sicherheitspatches und neuen Versionen eignet sich die Elastic Cloud auch für größere Projekte.
Die Daten für die Elasticsearch Instanzen in der Cloud müssen von anderen Nodes an den Master in der Cloud gesendet werden.
Die größtmögliche Flexibilität bietet eine manuelle Installation von Elasticsearch und Kibana. Bei der manuellen Installation ist es z.B. möglich auf einem Node neben Elasticsearch und Kibana weitere Module von Elastic wie Filebeat oder Metricbeat zu installieren. Auch benutzerdefinierte Konfigurationen, die in der Cloud nicht vorgesehen sind, sind möglich. Die Bereitstellung über eine manuelle Installation eignet sich für sehr große bzw. Projekte mit sehr speziellen Anforderungen, die bei den managed Services durch die beschränkten Konfigurationsmöglichkeiten nicht umgesetzt werden können. Ein Nachteil ist der deutlich erhöhte administrative Aufwand verglichen mit den beiden managed Services. Auch die für die Einrichtung des Clusters benötigte Zeit darf nicht unterschätzt werden.
Links:
https://www.elastic.co/de/aws-elasticsearch-service#full-comparison
https://www.elastic.co/de/blog/a‑new-era-for-cluster-coördination-in-elasticsearch