Seite wählen

NETWAYS Blog

OpenSearch: Aller Anfang ist schwer!

OpenSearch – Runde I

Worum geht es in der Serie? Wir wollen mit Euch erste Blicke in die frühen Versuche von OpenSearch und dessen Dashboard (OpenSearch Dashboards) werfen, welche je einen Fork durch AMAZON AWS von Elasticsearch-OSS 7.10.x (OpenSearch) und Kibana-OSS 7.10.x abbilden.

Wie es dazu kam, dürft Ihr in diesem Blog-Post von mir lesen. Dieses „Community“ Projekt könnte man, aufgrund der Hintergründe, als Nebenprodukt des Bezahl-Dienstes „Elasticsearch“ in der Amazon AWS Cloud bezeichnen, da es den Fortbestand dieses Dienstes sichern soll. Dieser war aufgrund der „Wehrhaftigkeit“ von Elastic gefährdet.

Nach über 8 Jahren Erfahrung mit Elastic Stack und Graylog, dachte ich mir zu Beginn des Jahres das wir mal mit OpenSearch in den Ring steigen. Mit der Zeit entwickelte sich der Trainings-Partner weiter und es gibt nun ein wenig her um davon zu berichten. Letzten Endes bleibt es aber auf unabsehbare Zeit dabei, dass OpenSearch und OpenSearch Dashboards, als „Open Source Community Projekt“ getarnte Quelle für den Amazon AWS Dienst dienen. Was bedeutet das es keine Support-Garantie, oder ähnliche Strukturen um diese Dienste aus dem Projekt-Kreis selbst geben wird. Allerdings treten schon die ersten Firmen auf, welche eine Support- (mit SLA), Consulting- und Fehlerbehebung als Service anbieten, jedoch bisher keine im deutschsprachigen Raum.

Worum geht also nun der erste Teil? Wir wollen uns mit OpenSearch und OpenSearch Dashboards auseinander setzen und Euch einen Weg zum ersten eigenen Betrieb aufzeigen.

Installationsquellen und Veröffentlichungen

Zum aktuellen Zeitpunkt gibt es tarballs für Linux: x64, ARM64, System-Pakete für FreeBSD: x64, ARM64, x86 und Docker-Images. Ein Release von stabilen Linux-Paketen und einem möglichen Paket-Repository ist für die nächste Veröffentlichung v1.2 am 16. November. 2021 angedacht, so zumindest der Fahrplan.

Im weiteren Verlauf werden wir uns für die ersten Versuche mittels Docker eine Testumgebung aufbauen. Zuerst wollen wir jedoch auf den Umfang von OpenSearch eingehen.

Funktionen von OpenSearch

OpenSearch ist in weiten Teilen mit Elasticsearch und Kibana aus der aktuellen Elastic-Stack Version in Bezug auf Templates und weiteren Funktionen gleich. Lediglich für die Einlieferung und der damit zusammen hängenden Funktionen gibt es wesentliche Unterschiede. Zum Zeitpunkt der Tests ist die Einlieferung nur mit Filebeat-OSS 7.12.1  oder logstash-7.13.2 in Verbindung mit dem Plugin „logstash-output-opensearch“ möglich.

Was hat nun funktioniert bzw. nicht?

  • Einliefern mit Standard-Inputs
  • Einliefern mit Modulen in OpenSearch
  • Laden der Ingest-Pipeline in OpenSearch
  • Einliefern mit Logstash (bedingt)
  • ILM und Index Management waren nicht möglich!

Letzteres sind nicht ganz so schöne Dinge, aber nun gut, später mehr.

Was ist denn wichtig und gleich aufgebaut wie in Elasticsearch?

  • Template API
  • Ingest Pipeline API
  • Index-Management (teilweise)

Folgende Plugins bringt OpenSearch mit sich:

  • opensearch-job-scheduler
  • opensearch-sql
  • opensearch-alerting
  • opensearch-security
  • opensearch-cross-cluster-replication
  • opensearch-performance-analyzer
  • opensearch-index-management
  • opensearch-knn
  • opensearch-anomaly-detection
  • opensearch-asynchronous-search
  • opensearch-reports-scheduler
  • opensearch-notebooks

Einige davon werden wir uns in Runde III genauer ansehen, diese Plugins bilden auch die Grundlage für einige Dashboard-Integrationen um z.B Alarmierungen, Notizen oder Berechtigungen in Form von Rollen und Benutzern zu verwalten. OpenSearch Dashboards nutzt somit die Plugins von OpenSearch.

Funktionen von OpenSearch Dashboards

Hier gibt es einiges Neues aber auch einiges was fehlt.

Folgend das Wichtigste und die neuesten Dinge:

  • Suche in den Daten
  • Dashboards
  • Visualisierungen
  • Reporting (NEU)
  • Notebooks (NEU)
  • Anomaly Detction
  • Index-Management; jedoch ohnne Index-Template Management!

 

Los Geht’s

Im folgenden Szenario gehen wir von einem Linux-Arbeitsplatz aus! Daher kommt gleich das Wichtigste zuerst! Wir gehen auch davon aus, dass eine funktionierende Docker-Umgebung auf dem Arbeitsplatz oder Zugriff auf eine solche besteht!

Die Container können übrigens in der richtigen Umgebung auch produktiv eingesetzt werden. Solche Umgebungen bekommt Ihr in Form von Kubernetes auch bei unseren Kollegen von NMS

Vorbereitung ist alles!

Für den Betrieb der Container brauchen wir, egal wie viel Last wir erzeugen, einen erhöhten „<code>vm.max_map_count</code> Wert.

Dies erledigt man wie folgt:

[code lang=“plain“]
# entweder dauerhaft
$ sudo echo &quot;vm.max_map_count=262144&quot; &amp;amp;amp;gt;&amp;amp;amp;gt; /etc/sysctl.conf
$ sudo sysctl -p

# Oder temporär
$ sudo sysctl -w vm.max_map_count=262144
$ sudo sysctl -p
[/code]

Wir setzen unsere Umgebung zusammen

Dafür benötigen wir nichts weiter als eine einfache Docker-Compose Beschreibung in einer Datei:

[code lang=“yaml“]
version: ‚3‘
services:
opensearch-node1: # Wählt hier euren Namen für eure Knoten
image: opensearchproject/opensearch:latest # Lädt immer die letzte stabile Veröffentlichung eines Abbild
container_name: opensearch-node1
environment:
– cluster.name=opensearch-cluster # Euer Cluster-Name
– node.name=opensearch-node1 # Wählt hier euren Namen für eure Knoten
– discovery.seed_hosts=opensearch-node1,opensearch-node2 # Knoten zur Cluster erkennung
– cluster.initial_master_nodes=opensearch-node1,opensearch-node2
– bootstrap.memory_lock=true # along with the memlock settings below, disables swapping
# – jedes weitere beliebige elasticsearch Einstellung wie Knoten-Typ oder Knoten Eigenschaften (node.attr.)
– &quot;OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m&quot; # minimum and maximum Java heap size, recommend setting both to 50% of system RAM
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536 # maximum number of open files for the OpenSearch user, set to at least 65536 on modern systems
hard: 65536
volumes:
– opensearch-data1:/usr/share/opensearch/data # keine dauerhaften Daten! Pfad im Container
# Wollt hier die Knoten dauerhaft betreiben empfiehlt es sich einen dauerhaften lokalen Pfad abzubilden um die Daten nicht zu verlieren
# – ./srv/opensearch-data1:/usr/share/opensearch/data
– 9200:9200
– 9600:9600 # required for Performance Analyzer
networks:
– opensearch-net
opensearch-node2:
image: opensearchproject/opensearch:latest
container_name: opensearch-node2
environment:
– cluster.name=opensearch-cluster
– node.name=opensearch-node2
– discovery.seed_hosts=opensearch-node1,opensearch-node2
– cluster.initial_master_nodes=opensearch-node1,opensearch-node2
– bootstrap.memory_lock=true
– &quot;OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m&quot;
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
– opensearch-data2:/usr/share/opensearch/data
networks:
– opensearch-net
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:latest
container_name: opensearch-dashboards
ports:
– 5601:5601
expose:
– &quot;5601&quot;
environment:
OPENSEARCH_HOSTS: ‚[&quot;https://opensearch-node1:9200&quot;,&quot;https://opensearch-node2:9200&quot;]‘
networks:
– opensearch-net

volumes:
opensearch-data1: # bitte beides auskommentieren für dauerhafte Daten, siehe oben.
opensearch-data2:

networks:
opensearch-net:
[/code]

Die Netzwerkeinstellungen im obigen Konfigurationsbeispiel sind für eine Portweiterleitung gesetzt. Im Folgenden gehen wir davon aus, dass das Notebook die beispielhafte IP 192.168.2.42 hat.
Nun starten wir  aus dem Verzeichnis heraus, unsere Komposition und lassen alles zusammen spielen:

[code lang=“plain“]
$ docker-compose up
Starting opensearch-node1 … done
Starting opensearch-dashboards … done
Starting opensearch-node2 … done
Attaching to opensearch-node2, opensearch-node1, opensearch-dashboards
opensearch-node2 | [2021-10-11T17:15:44,498][INFO ][o.o.n.Node ] [opensearch-node2] version[1.0.0], pid[11], build[tar/34550c5b17124ddc59458ef774f6b43a086522e3/2021-07-02T23:22:21.383695Z], OS[Linux/5.10.0-8-amd64/amd64], JVM[AdoptOpenJD
K/OpenJDK 64-Bit Server VM/15.0.1/15.0.1+9]
opensearch-node2 | [2021-10-11T17:15:44,501][INFO ][o.o.n.Node ] [opensearch-node2] JVM home [/usr/share/opensearch/jdk], using bundled JDK [true]
opensearch-node2 | [2021-10-11T17:15:44,501][INFO ][o.o.n.Node ] [opensearch-node2] JVM arguments [-Xshare:auto, -Dopensearch.networkaddress.cache.ttl=60, -Dopensearch.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -D
java.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -XX:+ShowCodeDetailsInExceptionMessages, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dio.netty.al
locator.numDirectArenas=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.locale.providers=SPI,COMPAT, -Xms1g, -Xmx1g, -XX:+UseG1GC, -XX:G1ReservePercent=25, -XX:InitiatingHeapOccupancyPercent=30, -Djava.io.tmpdir=/tmp/opensearch-1450963
1834068960625, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m, -Dclk.tck=100, -Djdk.attach.allowAttachSelf=true, -Djava.
security.policy=/usr/share/opensearch/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy, -Dopensearch.cgroups.hierarchy.override=/, -Xms512m, -Xmx512m, -XX:MaxDirectMemorySize=268435456, -Dopensearch.path.home=/usr/share/opensearch,
-Dopensearch.path.conf=/usr/share/opensearch/config, -Dopensearch.distribution.type=tar, -Dopensearch.bundled_jdk=true]
opensearch-node1 | [2021-10-11T17:15:44,792][INFO ][o.o.n.Node ] [opensearch-node1] version[1.0.0], pid[11], build[tar/34550c5b17124ddc59458ef774f6b43a086522e3/2021-07-02T23:22:21.383695Z], OS[Linux/5.10.0-8-amd64/amd64], JVM[AdoptOpenJD
K/OpenJDK 64-Bit Server VM/15.0.1/15.0.1+9]
opensearch-node1 | [2021-10-11T17:15:44,794][INFO ][o.o.n.Node ] [opensearch-node1] JVM home [/usr/share/opensearch/jdk], using bundled JDK [true]
opensearch-node1 | [2021-10-11T17:15:44,794][INFO ][o.o.n.Node ] [opensearch-node1] JVM arguments [-Xshare:auto, -Dopensearch.networkaddress.cache.ttl=60, -Dopensearch.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -XX:+ShowCodeDetailsInExceptionMessages, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dio.netty.al
locator.numDirectArenas=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.locale.providers=SPI,COMPAT, -Xms1g, -Xmx1g, -XX:+UseG1GC, -XX:G1ReservePercent=25, -XX:InitiatingHeapOccupancyPercent=30, -Djava.io.tmpdir=/tmp/opensearch-1753077
5664832230117, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -Xlog:gc*,gc+age=trace,safepoint:file=logs/gc.log:utctime,pid,tags:filecount=32,filesize=64m, -Dclk.tck=100, -Djdk.attach.allowAttachSelf=true, -Djava.security.policy=/usr/share/opensearch/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy, -Dopensearch.cgroups.hierarchy.override=/, -Xms512m, -Xmx512m, -XX:MaxDirectMemorySize=268435456, -Dopensearch.path.home=/usr/share/opensearch,
-Dopensearch.path.conf=/usr/share/opensearch/config, -Dopensearch.distribution.type=tar, -Dopensearch.bundled_jdk=true]
opensearch-node2 | [2021-10-11T17:15:45,739][INFO ][o.o.s.s.t.SSLConfig ] [opensearch-node2] SSL dual mode is disabled
opensearch-node2 | [2021-10-11T17:15:45,740][INFO ][o.o.s.OpenSearchSecurityPlugin] [opensearch-node2] OpenSearch Config path is /usr/share/opensearch/config
opensearch-node1 | [2021-10-11T17:15:45,863][INFO ][o.o.s.s.t.SSLConfig ] [opensearch-node1] SSL dual mode is disabled
opensearch-node1 | [2021-10-11T17:15:45,863][INFO ][o.o.s.OpenSearchSecurityPlugin] [opensearch-node1] OpenSearch Config path is /usr/share/opensearch/config
opensearch-dashboards | {&quot;type&quot;:&quot;log&quot;,&quot;@timestamp&quot;:&quot;2021-10-11T17:15:45Z&quot;,&quot;tags&quot;:[&quot;info&quot;,&quot;plugins-service&quot;],&quot;pid&quot;:1,&quot;message&quot;:&quot;Plugin \&quot;visTypeXy\&quot; is disabled.&quot;}
opensearch-node2 | [2021-10-11T17:15:45,991][INFO ][o.o.s.s.DefaultSecurityKeyStore] [opensearch-node2] JVM supports TLSv1.3
opensearch-node2 | [2021-10-11T17:15:45,992][INFO ][o.o.s.s.DefaultSecurityKeyStore] [opensearch-node2] Config directory is /usr/share/opensearch/config/, from there the key- and truststore files are resolved relatively
opensearch-dashboards | {&quot;type&quot;:&quot;log&quot;,&quot;@timestamp&quot;:&quot;2021-10-11T17:15:46Z&quot;,&quot;tags&quot;:[&quot;warning&quot;,&quot;config&quot;,&quot;deprecation&quot;],&quot;pid&quot;:1,&quot;message&quot;:&quot;\&quot;cpu.cgroup.path.override\&quot; is deprecated and has been replaced by \&quot;ops.cGroupOverrides.cpuPath\&quot;&quot;}
opensearch-dashboards | {&quot;type&quot;:&quot;log&quot;,&quot;@timestamp&quot;:&quot;2021-10-11T17:15:46Z&quot;,&quot;tags&quot;:[&quot;warning&quot;,&quot;config&quot;,&quot;deprecation&quot;],&quot;pid&quot;:1,&quot;message&quot;:&quot;\&quot;cpuacct.cgroup.path.override\&quot; is deprecated and has been replaced by \&quot;ops.cGroupOverrides.cpuAcctPath\&quot;&quot;}
opensearch-node1 | [2021-10-11T17:15:46,131][INFO ][o.o.s.s.DefaultSecurityKeyStore] [opensearch-node1] JVM supports TLSv1.3
opensearch-node1 | [2021-10-11T17:15:46,132][INFO ][o.o.s.s.DefaultSecurityKeyStore] [opensearch-node1] Config directory is /usr/share/opensearch/config/, from there the key- and truststore files are resolved relatively
opensearch-dashboards | {&quot;type&quot;:&quot;log&quot;,&quot;@timestamp&quot;:&quot;2021-10-11T17:15:46Z&quot;,&quot;tags&quot;:[&quot;info&quot;,&quot;plugins-system&quot;],&quot;pid&quot;:1,&quot;message&quot;:&quot;Setting up [45] plugins: [alertingDashboards,usageCollection,opensearchDashboardsUsageCollection,opensearchDashboardsLegacy,mapsLe
gacy,share,opensearchUiShared,legacyExport,embeddable,expressions,data,home,console,apmOss,management,indexPatternManagement,advancedSettings,savedObjects,securityDashboards,indexManagementDashboards,anomalyDetectionDashboards,dashboard,notebooksDashboards,vi
sualizations,visTypeVega,visTypeTimeline,timeline,visTypeTable,visTypeMarkdown,tileMap,regionMap,inputControlVis,ganttChartDashboards,visualize,reportsDashboards,traceAnalyticsDashboards,queryWorkbenchDashboards,charts,visTypeVislib,visTypeTimeseries,visTypeT
agcloud,visTypeMetric,discover,savedObjectsManagement,bfetch]&quot;}
[/code]

Und ja ich gebe es zu, ich hatte alles schon mal am Laufen!

Nun prüfen wir ob alles läuft!

Im Standard wird OpenSearch und OpenSearch Dashboards bereits mit Zertifikaten und einer Absicherung ausgerollt. Der Standard-Benutzer ist „admin“ und auch das Passwort lautet „admin“. Bitte denkt daran das es sich um selbst signierte Zertifikate handelt! Dies ist bei allen Anbindungen zu beachten (ssl.verification_mode: none).

[code lang=“plain“]

$ curl -k -u &quot;admin:admin&quot; -X GET ‚https://192.168.2.42:9200/_cluster/health?pretty‘
{
&quot;cluster_name&quot; : &quot;opensearch-cluster&quot;,
&quot;status&quot; : &quot;green&quot;,
&quot;timed_out&quot; : false,
&quot;number_of_nodes&quot; : 2,
&quot;number_of_data_nodes&quot; : 2,
&quot;discovered_master&quot; : true,
&quot;active_primary_shards&quot; : 12,
&quot;active_shards&quot; : 24,
&quot;relocating_shards&quot; : 0,
&quot;initializing_shards&quot; : 0,
&quot;unassigned_shards&quot; : 0,
&quot;delayed_unassigned_shards&quot; : 0,
&quot;number_of_pending_tasks&quot; : 0,
&quot;number_of_in_flight_fetch&quot; : 0,
&quot;task_max_waiting_in_queue_millis&quot; : 0,
&quot;active_shards_percent_as_number&quot; : 100.0
}[/code]

Und nun ab in die visuelle Ansicht:

Hier empfiehlt es sich erst mal den Tenant auf Privat zu setzen.

Nun folgt eine kleines Video. Mein erstes Video Tutorial oder was auch immer nur für euch:

 

Und da ist der Pausengong!

Und schon ist sie rum, die erste Runde und OpenSearch steht noch! Also macht Euch alle bereit für die nächste Runde. Wenn Euch das, was ihr jetzt schon gelesen habt gefällt und Ihr es nicht bis Runde II aushaltet, dann meldet Euch doch einfach bei unserem Sales Team sales[at]netways.de. Wir helfen Euch in einem PoC (Proof of Concept) gleich von Runde I an mit zu kämpfen! Nach den letzten Monaten intensiver OpenSearch Evaluierung bin ich der Trainer der euch „State of the Art“ Euren „Kampf gegen die Informationsflut“ gewinnen lässt.

Daniel Neuberger
Daniel Neuberger
Senior Consultant

Nach seiner Ausbildung zum Fachinformatiker für Systemintegration und Tätigkeit als Systemadministrator kam er 2012 zum Consulting. Nach nun mehr als 4 Jahren Linux und Open Source Backup Consulting zieht es ihn in die Welt des Monitorings und System Management. Seit April 2017 verstärkt er das NETWAYS Professional Services Team im Consulting rund um die Themen Elastic, Icinga und Bareos. Wenn er gerade mal nicht um anderen zu Helfen durch die Welt tingelt geht er seiner Leidenschaft für die Natur beim Biken und der Imkerei nach und kassiert dabei schon mal einen Stich.

Warum OpenSearch? Was ist OpenSearch? OpenSearch VS. Elastic

Es fing bereits 2015 an zu brodeln, als AWS seinen neuen SaaS-Dienst „AWS Elasticsearch Services“ veröffentlichte und später dann 2019 das Produkt OpenDistro erschien. Bei zuletzt genanntem Produkt erschließt sich mir bis heute nicht, warum ich dieses der X-Pack Basic von Elastic vorziehen sollte. So lange ich natürlich ein Elasticsearch oder den Elastic Stack nicht als SaaS-Dienst vermarkten möchte. Denn dann bleibt mir nur die bis vor kurzem verfügbare OSS-Variante, welche natürlich entsprechende Features, welche im X-Pack Basic integriert sind, vermissen lässt.

2017 auf der ElasticON in San Francisco wurde das neue offene Lizenz-Modell auf Basis der Apache-2.0-Lizenz und der daraus entstandenen OSS-Variante, so wie die Veröffentlichung einer X-Pack Basic Variante bekannt gegeben. Dieser Weg wird jetzt teilweise verlassen.

Anfang des Jahres war der Höhepunkt einer langen gerichtlichen Auseinandersetzung wohl erreicht. Elastic kündigte im Januar, wohl als letztes Mittel gegen Amazon, dass Ende der OSS mit Version Elasitc Stack 7.11 und den Wechsel zu einem dualen Lizenzmodell aus Server Side Public License (SSPL, wie z.b MongoDB) oder Elastic-Lizenz an. Amazon reagierte darauf und brachte die Community zum kochen, dass Ergebnis ist der Fork von Amazon „OpenSearch“, welcher auf Elastic Stack v 7.10 aufbaut.

Jetzt wollen wir aber mal alles im Detail betrachten und wie es weitergeht.

Spieler 1: Elastic

Was bedeutet dies jetzt für die Nutzer von Elastic Stack Produkten (IMHO):

  1. Die OSS Varianten welche Elasticsearch, Kibana und Beats unter APLv2 frei nutzbar und auch als SaaS-Dienst verkaufbar machten wurden abgekündigt mit Version 7.10
  2. Die X-Pack Basic bleibt bestehen und ist weiterhin frei Verfügbar und nutzbar mit allen Features, die darin enthalten sind
  3.  Lediglich die Vermarktung des Elastic Stack als SaaS-Dienst ist nicht mehr möglich

IMHO: Bisher für mich in der Wertung alles noch kein Beinbruch und viele Reaktionen unverständlich, denn von irgendwas muss ja als Firma gelebt werden. Zudem darf man nicht vergessen, dass mit den Werkzeugen des Elastic Stack, hervorragende Standards für ein modernes Event und Informations-Managment geschaffen wurden.

Was mich aber wirklich aufregt an der ganzen Sache ist der Fakt, dass mit der Filebeat Version 7.13, die Beats nur noch mit Elasticsearch und Kibana mit Versionen ältere als 7.10 sprich 7.11 zusammen spielen. Breaking Change lesen hier.
Dies könnte es schwierig machen die aktuellen Beats bzw. Filebeat mit anderen Werkzeugen wie z.B. Graylog zu nutzen. Aber dies werden wir für euch testen und berichten.

Spieler 2: OpenSearch

Als Antwort auf die Veränderungen des Elastic Stack wurde die Community unter anderem um AWS OpenDistro laut und es brodelte weiter bis es zum Ausbruch kam und Amazon AWS den Fork von Elastic Stack OSS 7.10 bekannt gab. Dies zunächst in Form von „OpenSearch“ als Fork von Elasticsearch und OpenDashboard als Fork von Kibana. Beide kommen bereits mit einer Vielzahl an Plugins und Integrationen, wie Sie es im Elastic Stack gibt. Hier ist schon mal ein guter Grundstock vorhanden.

Am 25.5.2021 wurde die Roadmap veröffentlicht  welche besagt, dass der aktuelle RC1 am 12.07.2021 als v1.0 veröffentlicht wird.

Jetzt wollen wir aber auch die Gegenseite Stellung beziehen lassen:

  1.  Am 21.01.2021 wurde der Fork ausgerufen und der heldenhafte Einsatz für ein ehrliches und quelloffenes Elasticsearch erklärt
  2.  Am 12.04.2021 wurde der Fork „OpenSearch“ öffentlich vorgestellt und gestartet.

Was bedeutet das für neue Nutzer oder Nutzer von OpenDistro oder von Nutzern des AWS Saas-Dienstes (IMHO):

  1. Abwarten ist hier angesagt der RC1 welchen wir uns natürlich für euch bereits ansehen und auch demnächst vorstellen werden ist „nur“ ein RC.
  2. Nutzer von OpenDistro sollten mit der Veröffentlichung von Version 1.0 umsteigen. Dennn OpenDistro wird mit Version 1.13 eingestellt!
  3.  „AWS Elasticsearch Service“ Nutzer müssen nicht bangen.
  4. Denn es gibt eine Abwärts-Kompatibilität zu Elasticsearch und Kibana 7.10.2 wie hier besagt und in den FAQs beschrieben.
  5. Diese Abwärts-Kompatibilität bedeutet es ist auch von Elasticsearch-OSS 7.10 oder gar 6.0 auf OpenSearch möglich.
  6. Wer Elasticsearch als SaaS-Dienst oder in SaaS-Dienste oder ähnlichen Produkt-Formaten verwenden will muss auf OpenSearch setzen (oder einfach Solr nutzen)

 

Abschließend bleibt zu sagen…

Nun liebe Lesenden ich weiss, dass war jetzt alles nichts technisches. Aber wir sind bereits den RC1 fleißig für euch am Testen und werden euch so bald es passt davon berichten. Vielleicht sogar passend zur Veröffentlichung von Version 1.0 am 12.07.2021?

Wer bisher auf den „alt“ bewährten Elastic Stack setzen möchte, kann dies in der Zukunft natürlich gerne weiterhin tun. Zu mal auch abzuwarten bleibt, wie es sich bei einer Vielzahl von Anwendungen welche auf Elasticsearch als Speicher setzen, wie z.B Graylog  mit der Integration verhält.

IMHO: Für mich ist klar Amazon in Form von AWS hat, dies bewusst provoziert und ist nicht der faire Spieler in dieser Partie (gewesen). Denn wenn man durchs Leben geht sollte es immer gelten ….

Bei allem, was wir denken, sagen oder tun, sollten wir uns fragen:
1. Ist es wahr?
2. Ist es fair für alle Beteiligten?
3. Wird es Freundschaft und guten Willen fördern?
4. Wird es dem Wohl aller Beteiligten dienen?”

Wer zu den oben erwähnten Themen und Werkzeugen Unterstützung benötigt, darf sich natürlich gerne von uns helfen lassen und bei den Kollegen von Sales nach einem/r Kollegen/Kollegin von Professional Services fragen. Oder in einer unserer Schulungen zu Graylog oder dem Elastic Stack lernen, wie mit den Werkzeugen in der Produktion umgegangen wird.

Daniel Neuberger
Daniel Neuberger
Senior Consultant

Nach seiner Ausbildung zum Fachinformatiker für Systemintegration und Tätigkeit als Systemadministrator kam er 2012 zum Consulting. Nach nun mehr als 4 Jahren Linux und Open Source Backup Consulting zieht es ihn in die Welt des Monitorings und System Management. Seit April 2017 verstärkt er das NETWAYS Professional Services Team im Consulting rund um die Themen Elastic, Icinga und Bareos. Wenn er gerade mal nicht um anderen zu Helfen durch die Welt tingelt geht er seiner Leidenschaft für die Natur beim Biken und der Imkerei nach und kassiert dabei schon mal einen Stich.

Multiline in Grok – Kein schönes Format

In einem modernen Log-Management ist das Aufbereiten für die spätere Analyse unverzichtbar. Je schöner das Format ist, in welchem wir eine Information geliefert bekommen, desto einfacher ist deren Verarbeitung.
Das Aufbereiten der Daten ist oft eine große Herausforderung. Doch über die Jahre hinweg habe ich mir beholfen, indem ich mir ein standardisiertes Vorgehen angewöhnt habe. Und das nicht nur weil ich ein großer Fan der RFC5424 bin.

Egal ob ich mit Graylog oder Logstash arbeite, irgendwann kommt der Punkt an dem ein Grok-Filter benötigt wird, weil kein einfaches Key-Value-Format oder noch besser kein JSON-Format vorliegt.

Ein schönes Beispiel sind Stack-Traces einer JAVA-Anwendung in JBOSS:

[code lang=“plain“]
2020-07-02 23:54:32,979 [severity] [class] [thread]\n
traceline1\n
traceline2\n
traceline3]
[/code]

Eine solches Ereignis fängt immer mit den Meta-Informationen an und ich würde zuerst aus diesen Felder erzeugen und mich im Nachgang der eigentlichen Information dem Trace als Nachricht zuwenden. Dies erfordert aber das ich mittels Grok das Feld „message“ neu belegen kann. Dies ist die Voraussetzung für das weitere verarbeiten der Kern-Nachricht. Hier würde sich zum Beispiel ein Key-Value Filter anbieten.

Hierfür würden wir in der Implementierung von Grok in Logstash folgendes Muster benötigen:

[code lang=“plain“]
(?m)
[/code]

Doch nicht so in Graylog. Die Implementierung von Grok in Graylog erfordert einen anderes Muster zumindest für die Filter in den „Pipeline-Processors“

[code lang=“plain“]
(?s)
[/code]

Somit sind wir mit diesem Muster in der Lage die mehrzeilige Information als eine Nachricht in einem Grok-Filter in einer „Pipeline-Regel“ abzufangen.
Hier ein Beispiel in der gänze für ein mögliches JBoss Server-Log

[code lang=“plain“]
%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:severity}%{SPACE}\[%{HOSTNAME:jboss_class}\]%{SPACE}\[%{HOSTNAME:thread}\]\n(?<message>(?s).*)
[/code]

Diese Erkenntnis für die Multiline in Grok stammt aus dem folgenden Issue #2465.
Ich hoffe es hilft dem nächsten Suchenden, dem es ergeht wie mir um mit Zeilenumbrüchen in Grok umzugehen.

Wenn Ihr gerne mehr über Graylog oder die spannenden Welt des Informations- und Event-Management wissen wollt zögert nicht ein Training bei NETWAYS Events zu besuchen oder euch direkt Hilfe bei unseren Kollegen von Netways Professional Services zu holen.

Daniel Neuberger
Daniel Neuberger
Senior Consultant

Nach seiner Ausbildung zum Fachinformatiker für Systemintegration und Tätigkeit als Systemadministrator kam er 2012 zum Consulting. Nach nun mehr als 4 Jahren Linux und Open Source Backup Consulting zieht es ihn in die Welt des Monitorings und System Management. Seit April 2017 verstärkt er das NETWAYS Professional Services Team im Consulting rund um die Themen Elastic, Icinga und Bareos. Wenn er gerade mal nicht um anderen zu Helfen durch die Welt tingelt geht er seiner Leidenschaft für die Natur beim Biken und der Imkerei nach und kassiert dabei schon mal einen Stich.

Komm‘ zu unserem nächsten Graylog Training in Nürnberg!

An alle Sicherheitsspezialist*innen und Systemadministrator*innen: es gibt noch wenige freie Plätze für unsere Graylog Schulung in Nürnberg vom 27. – 28. Oktober!

It’s all about filtern, modifizieren und anreichern!

Wenn Du Dich für das zweitägige Training anmeldest, bekommst Du, unter anderem, über folgende Themen wertvolles Wissen vermittelt (das ist aber noch längst nicht alles!):

  • Einführung in Graylog und modernes Log-Management
  • Elasticsearch Fundamentals
  • Data Enrichment
  • Visualisierung von Daten
  • und vieles mehr!

 

Durch Deine grundlegenden Kenntnisse im Betrieb von Linux/UNIX Systemen, bist Du nach dem Training sattelfest beim Sammeln und Auswerten von Log-Daten. Finde heraus, was unsere Graylog Schulung besonders und anders als andere macht.

Du hast am 27. Und 28. Oktober schon was vor, möchtest aber dennoch gerne beim Graylog Training teilnehmen? Kein Problem! Die nächsten Termine sind bereits geplant.

Wir freuen uns auf Dich! Wenn Du Fragen hast oder Hilfe bei der Buchung eines Hotels benötigst, dann kannst Du uns gerne kontaktieren – wir helfen Dir weiter!

Vom Bordstein zur Skyline von Robert Waffen | OSMC 2019

YouTube player

 

Auf der Open Source Monitoring Conference (OSMC) 2019 in Nürnberg hat uns Robert Waffen mit seinem Vortrag „Vom Bordstein zur Skyline“ in den Bann gezogen. Für den Fall, dass jemand nicht die Möglichkeit hatte, an seinem Vortrag teilzunehmen, haben wir hier etwas vorbereitet: Seht euch das Video von Roberts „Kriegsgeschichte“ – wie er selbst es nennt – an und lest weiter unten eine Zusammenfassung.

Die OSMC ist das jährliche Treffen internationaler Monitoring-Experten, auf dem zukünftige Trends und Strategien festgelegt werden. Seit 2006 findet die Veranstaltung jedes Jahr im Herbst in Nürnberg, Deutschland, statt. Führende Spezialisten präsentieren die ganze Bandbreite des Open Source Monitorings und stehen bereit, um Fragen zu beantworten, und seien diese noch so schwierig. Lernt neue Techniken kennen, tauscht Wissen aus und diskutiert mit Top-Entwicklern.

Ausführliche Workshops am Tag vor der Konferenz und ein Hackathon bieten weitere Möglichkeiten, eure Fähigkeiten zu erweitern und euer Wissen im Bereich IT-Monitoring und -Management zu vertiefen.

Die nächste OSMC findet vom 16. bis 19. November 2020 in Nürnberg statt.
Weitere Informationen und Tickets unter osmc.de.


Vom Bordstein zur Skyline

Der Talk von Robert Waffen „Vom Bordstein zur Skyline“ handelt von den Monitoring-Entwicklungsstufen des Unternehmens Publicis Pixelpark.

Wie war der bisherige Stand im Monitoring?

Bei Robert Waffen in der Firma war schon Xymon oder – noch früher – Zabbix im Einsatz, was nicht richtig gepflegt wurde. Und wenn, dann nur zum Teil. Das dadurch entstandene Wissen wurde abgewandelt und daraufhin auf zwei Elk-Instanzen umgestellt. Als Metriken wurden nur Default-Metriken verwendet, also das, was das System standardmäßig bereitstellt. Dazu gehörten Metriken in 5-Minuten-Intervallen.

Das ganze Monitoring war weder automatisiert noch teilautomatisiert. Konfigurationen oder Interfaces konnte man einchecken, wenn man sich durchklickte.

 

Xymon

Xymon hat natürlich wie jedes andere Monitoring-System Checks, wodurch Auswertungen gemacht werden, wie zum Beispiel Shell. Dabei wurde meistens sehr viel Output produziert. Und zwar nicht wie beispielsweise in Icinga eine Zeile, sondern ganze Prozesslisten. Das ganze Interface war nicht dynamisch und wurde in HTML vorgerendert, was wiederum eigene Vor- und Nachteile hatte. Bei HD-Grafen, die auch gerne ein bisschen größer werden, mussten diese gelöscht werden. Das eigentliche Problem war, dass es sehr hohe Check-Intervalle gab und keine Anbindung an Grafana oder sonstiges möglich war, da Xymon aus den 1990er-Jahren kommt. Zudem ein Thema, das immer wieder zu Problemen führte: Es gab keine richtige Verschlüsselung.

 

Zabbix

Bei Zabbix hingegen macht das GUI alles. Es gibt zwar ein Puppet-Modul, welches einen Server aufbauen kann, aber das Modul kann den Server nicht konfigurieren, was problematisch ist. Weiter war ein Update auf die neueste Version nicht möglich, weil interne Probleme auftraten. Das heißt, man ist bei einer älteren Version hängen geblieben.

Probleme wurden prinzipiell zwar immer angezeigt, aber nicht welcher Art. In einem Monitoring wurde der Alarm aktiviert. Daraufhin musste man in einem anderen System nachsehen und eventuell dort das Problem ausfindig machen. Man musste in mehreren Interfaces nachsehen, was sehr umständlich war.

Der Aufbau der GUI in Zabbix war auch nicht logisch, wenn man es mit anderen Monitoring-Systemen vergleicht. Es zeigte nur an, wenn ein Problem auftrat. Das Host-Objekt an sich gibt es in Zabbix gar nicht, an dem man sieht, dass der Host up ist und der Host folgende Daten hat… Das wird nicht angezeigt, man muss erst nach diesen Informationen suchen.

 

ELK

Zudem gibt es zwei verschiedene ELK-Stacks. Ein Stack ist schon etwas älter und beinhaltet sensible Daten eines langjährigen Kunden, die auch separat gehalten werden sollen. Daneben gibt es einen neueren Stack der Version 6 mit entsprechender Umgebung. Die Stacks sind alle manuell aufgesetzt und eine nachträgliche Automatisierung scheint nicht möglich, da sonst Indexe oder ganze Konfigurationen verworfen werden oder ähnliches. Deswegen wird hier ein Neuaufbau geplant.

 

Graylog

Als Alternative zum ELK gibt es auch noch Graylog. Das wird für neuere Kunden eingesetzt und funktioniert ganz gut.

 

Wie ist der aktueller Stand im Monitoring?

Aktuell sieht das Monitoring bei Robert so aus: Zabbix und Xymon dienen als Hauptmonitoring. Hier wurde ein Grafana mit diversen Quellen hinzugebaut, wie InfluxDB, Prometheus, Graphite oder ElasticSearch. Daneben existiert ein Proof of Concept für Icinga 2 und ELK 7.

 

Prometheus

Wir haben von null angefangen und ein Prometheus aufgesetzt. Wenn man sich damit beschäftigt, meint man erst, oh, ja, Kubernetes, da ist alles schön und toll. Da deployed man sein YAMLs und es ist alles schön und sicher – bis man von Systemen außerhalb von Kubernetes auf Metriken zugreifen möchte. Mit einem Reverse Proxy davorgebaut, mit einem Apache und HTTPS, und einem IP Require, so dass nur der Prometheus-Server den Node Exporter abfragen darf.

 

Icinga 2

Bei Icinga 2 hat man einen Pock aufgesetzt, der vollautomatisch aus dem Puppet generiert wird. Das heißt, wenn man den Host wegreißt und neu startet, werden alle Hosts, Konfigurationen, Checks wie vorher angezeigt.

So weiß man, woher der Check kommt. In Vergleich mit Zabbix und Xymon weiß man weißt nicht, woher die Checks kommen und warum etwas anspringt. Viele sagen, man brauche Automatisierung erst dann, wenn man mehrere Server hat. Aber es geht auch darum, nachvollziehbar zu arbeiten, um Konfigurationen einsehen zu können.

 

Wie soll Monitoring in Zukunft aussehen?

Host-Inventarisierung: Wir haben viele Hosts, die keine Puppet-Module haben, Puppet ausgeschaltet ist oder eine alte Puppet-Version installiert ist. Wir müssen diese updaten und installieren und das ist teilweise schwierig wegen Solaris.

Benachrichtigungsplan erstellen: Man muss man sich ein Konzept überlegen, über was wann benachrichtigt werden soll. Zum Beispiel wenn ein Server nur tagsüber wichtig ist, braucht man keine Notifications in der Nacht. Dies ist zum Beispiel bei Testmaschinen der Fall, wenn es in der Testumgebung Probleme gibt. Wenn es sich allerdings um eine Produktionsumgebung handelt, möchte man rund um die Uhr benachrichtigt werden.

 

Saeid Hassan-Abadi
Saeid Hassan-Abadi
Systems Engineer

Saeid hat im Juli 2022 seine Ausbildung als Fachinformatiker für Systemintegration bei uns abgeschloßen, und arbeitet nun in Operation-Team. Der gebürtige Perser hat in seinem Heimatland Iran Wirtschaftsindustrie-Ingenieurwesen studiert. Er arbeitet leidenschaftlich gerne am Computer und eignet sich gerne neues Wissen an. Seine Hobbys sind Musik hören, Sport treiben und mit seinen Freunden Zeit verbringen.