In diesem Beitrag stellen wir den Elastic Stack vor, der auch als ELK-Stack bezeichnet wird – Logstash, Elasticsearch und Kibana. Außerdem erhalten Sie eine detaillierte Schritt-für-Schritt-Anleitung zur Einrichtung der drei Tools, die diesen Stack bilden. So können Sie die Erfassung und Visualisierung von System-logs (-protokollen) in einer DevOps- und Cloud-Native-App-Architektur automatisieren.
Was ist der Elastic Stack (früher bekannt als ELK Stack)?
Der Elastic Stack ist die Weiterführung des ELK Stack, dessen Name eine Abkürzung aus den drei zentralen Open-Source-Tools ist, auf denen der DevOps Stack aufbaut: Elasticsearch, Logstash und Kibana.
Elasticsearch ist eine Such- und Analysemaschine.
Logstash ist eine serverseitige Datenverarbeitungspipeline. Sie sammelt mehrere simultane Datenströme aus verschiedenen Quellen, analysiert jedes Ereignis, identifiziert benannte Felder, um eine Struktur aufzubauen. Anschließend werden die Daten in ein gemeinsames Format umgewandelt, um eine leistungsfähigere Analyse und einen höheren Geschäftswert zu erzielen.
Kibana visualisiert Daten in Elasticsearch durch Diagramme und Tabellen.
Der Elastic Stack ergänzt den ELK Stack um Beats, eine Open-Source-Plattform für leichtgewichtige Daten-Shipper, die es Benutzern ermöglicht, Dateien zu tailen. Alle vier Open-Source-Projekte, aus denen der Elastic Stack besteht – Elasticsearch, Logstash, Kibana und Beats – sind von Elastic selbst entwickelte Produkte.
Elastic beschreibt die Entwicklung von ELK zu Elastic Stack wie folgt:
„…die gleichen Open-Source-Produkte, die sie gewohnt waren, nur besser integriert, leistungsfähiger, benutzerfreundlicher und sehr viel Potenzial.“
Dieses Video von Coding Explained geht näher auf die technischen Details der Elastic Stack-Komponenten ein und zeigt, wie sie so konfiguriert werden können, dass sie als leistungsstarkes und flexibles Log-Management-System zusammenarbeiten.
Elastic Stack Use Cases
Elastic hat eine Reihe von use cases veröffentlicht, die aufzeigen, dass Elastic Stack von unterschiedlichsten bekannten Marken genutzt wurde, um eine Vielzahl von technischen und letztlich auch geschäftlichen Problemen zu lösen. Im folgenden zwei Beispiele:
HappyFresh behebt das Problem der Suchlatenz mit App Search auf Elastic Cloud
Bei HappyFresh, einer marktführenden Plattform für Lebensmitteleinkauf und -lieferung in Indonesien, Malaysia und Thailand, führten Latenzprobleme bei der Produktsuche dazu, dass Kunden aus der App flogen, was viele Kunden verärgerte. Ein Wechsel zu Elastic’s App Search auf der Elastic Cloud halbierte die Suchlatenz auf den Online- und mobilen E-Commerce-Portalen und bewältigte gleichzeitig einen 300%igen Anstieg des Suchverkehrs während der Covid 19-Pandemie.
Das Unternehmen ist davon überzeugt, dass die alte Lösung gescheitert wäre, wenn man sich weiterhin auf diese verlassen hätte. Zu dem Zeitpunkt verzehnfachte sich der Datenverkehr über die Apps und der Suchverkehr stieg um das Dreifache, als die Kunden während der Pandemie ihre Einkäufe online tätigten.
Adobe Bildsuchfunktionen auf Basis des Elastic Stack
Mehrere Produkte von Adobe verfügen über eine Bildsuchfunktion, die von Elastic Stack unterstützt wird, darunter gilt beispielsweise Adobe Stock. Die DevOps-Engineers von Adobe verwalten das folgende Elastic Stack Deployment (Several of Adobe’s products feature image search functionality powered by Elastic Stack, with Adobe Stock a prime example. Adobe’s DevOps engineers manage the following Elastic Stack deployment:
18 Produktionscluster hosten über 10 Milliarden Dokumente, mit einer Live-Ingestion-Rate von etwa 6.000 Dokumenten pro Sekunde. Um die Suche in Adobe Lightroom optimal zu unterstützen, wechselte das Unternehmen beispielsweise von Amazons Elasticsearch Service zu ihren eigenen, selbst verwalteten Clustern – dabei wurden fast 3,5 Milliarden Dokumente übertragen. Ein großer Teil der Inhalte von Adobe ist nicht textbasiert, d. h. Bilder, Videos, Photoshop-Dateien usw., aber auch Standarddokumenttypen für Unternehmen, insbesondere PDFs. Der Elastic Stack trägt zusammen mit den kundenspezifischen Elasticsearch-Plugins zu den folgenden Suchergebnissen bei:
Suche auf der Grundlage von Computer Vision und Metadaten
Tiefe textuelle und hybride Inhaltssuche
Suche in Videos und umfangreichen Formaten
Unternehmensweite Suche
Entdeckung und Empfehlungen
Wie man ein zentralisiertes Log-System (Protokollierungssystem) mit dem Elastic Stack aufbaut
Manchmal müssen wir die Logs durchsehen und auf mehreren Servern nach den gewünschten Zeilen suchen; dazu loggen wir uns ein und suchen nach den Logs, in denen dieselben Befehle auf den Servern wiederholt werden.
Angenommen, wir sind ein E-Mail-Hosting-Unternehmen mit 3 MX-Servern. Ein Kunde beschwert sich über eine fehlende Nachricht, die er zu einem bestimmten Zeitpunkt an seine Frau geschickt hat.
Hätten wir ein zentralisiertes Log-System mit dem Elastic Stack eingerichtet, könnten wir diese Nachricht in den Logs mit ein paar Klicks finden. Und es gibt unzählige weitere Gründe, warum Unternehmen ein zentralisiertes Log-System benötigen, um zu verfolgen, was in ihrer IT-Infrastruktur vor sich geht. Obwohl Ausnahmen nicht ungewöhnlich sind, kann man mit Sicherheit sagen, dass wir bei K&C auf den Elastic Stack zurückgreifen, wenn es darum geht, Log-Management-Systeme aufzubauen.
Elastic Stack Alternativen für Log-Management
Natürlich ist der Elastic Stack, obwohl er effektiv und beliebt ist, nicht die einzige Möglichkeit, die ein Softwareentwicklungsteam für die Verwaltung von Logs hat. Datadog, Splunk, Graylog und Papertrail sind die beliebtesten Alternativen und Konkurrenten zu den Bestandteilen des Elastic Stack. Jedes dieser Tools hat seine technischen Stärken und Schwächen sowie unterschiedliche Gebührenmodelle und ist daher unter bestimmten Umständen den herkömmlichen ELK-Tools vorzuziehen.
In den meisten Fällen ist jedoch der Elastic-Stack die erste Wahl für ein Log-Management-System. Im Folgenden beschreiben wir Schritt für Schritt, wie wir ein zentralisiertes Logging-System einrichten würden:
Unser zentraler Logging-System-Stack
- CentOS 7: Die aktuelle Version des Betriebssystems der Linux-Distrobution
- Logstash: Serverbasierter Teil zur Verarbeitung eingehender Logs (Protokolle)
- Elasticsearch: Zum Speichern von Logs
- Kibana: Webinterface zum Durchsuchen und Visualisieren der Logs
- Logstash Forwarder: Er wird auf den Servern als Agent installiert, um Logs an einen Logstash-Server zu senden
- Beats: Plattform für leichtgewichtige Daten-Shipper („Datenversender“)
Schritt-für-Schritt-Anleitung zur Einrichtung eines Log-Managementsystems mit ELK
Wir werden die ersten drei Komponenten auf unserem Sammelserver installieren und Logstash Forwarder auf den Servern, von denen wir Logs sammeln wollen.
Java 8 installieren
Java wird für Logstash und Elasticsearch benötigt. Wir werden OpenJDK 8 installieren.
cd /opt sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "https://download.oracle.com/otn-pub/java/jdk/8u40-b25/jre-8u40-linux-x64.tar.gz"
Unpack
sudo tar xvf jre-8*.tar.gz
Die erforderlichen Rechte erteilen:
sudo chown -R root: jre1.8*
Simlinks mit Hilfe von „alternatives“ erstellen
sudo alternatives --install /usr/bin/java java /opt/jre1.8*/bin/java 1
Das heruntergeladene archive löschen
sudo rm /opt/jre-8*.tar.gz
Elasticsearch installieren
Elasticsearch public GPG key importieren:
sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Das Repository-File für Elasticsearch erstellen und bearbeiten:
sudo vi /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.4] name=Elasticsearch repository for 1.4.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Elasticsearch installieren
sudo yum -y install elasticsearch-1.4.4
Configuration-File anpassen:
sudo vi /etc/elasticsearch/elasticsearch.yml
Äußeren Zugang zu elascticsearch schließen:
network.host: localhost
Elasticsearch ausführen:
sudo systemctl start elasticsearch.service
Dem Autorun hinzufügen:
sudo systemctl enable elasticsearch.service
Kibana installieren:
Kibana 4 herunterladen un entpacken:
cd ~; wget https://download.elasticsearch.org/kibana/kibana/kibana-4.0.1-linux-x64.tar.gz; tar xvf kibana-*.tar.gz
Configuration-File editieren:
vi ~/kibana-4*/config/kibana.yml
In dem Kibana Configuration-File, die Zeile die den Host festlegt finden. Daraufhin die IP (standardmäßig 0.0.0.0) durch die IP von localhost ersetzen:
host: "localhost"
Dieser Paramter gibt an, dass Kibana nur lokal zugänglich sein wird. Dies ist gut, da wir den Reverse-Proxy-Server Nginx verwenden werden, um den Zugriff von außen zu ermöglichen.
sudo mkdir -p /opt/kibana
Die Files folgendermaßen verschieben und entpacken:
sudo cp -R ~/kibana-4*/* /opt/kibana/
Kibana wird als /opt/kibana/bin/kibana ausgeführt, wir werden es allerdings als „service“ ausführen. Kibana Systemd erstellen:
sudo vi /etc/systemd/system/kibana4.service
[Service] ExecStart=/opt/kibana/bin/kibana Restart=always StandardOutput=syslog StandardError=syslog SyslogIdentifier=kibana4 User=root Group=root Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
Jetzt, Programm ausführen und autorun hinzufügen
sudo systemctl start kibana4
sudo systemctl enable kibana4
Set epel repository
sudo yum -y install epel-release
Nginx installieren
sudo yum -y install nginx httpd-tools
Mit htpasswd einen Benutzer und ein Passwort erstellen
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
Nun die main-Configuration nginx.com bearbeiten:
sudo vi /etc/nginx/nginx.conf
Die gesamte server{} Section finden und löschen. Am ende sollten zwei Zeilen übrig bleiben
include /etc/nginx/conf.d/*.conf; }
Das Configuration-File nginx für kibana4 erstellen
server { listen 80; server_name example.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Nginx ausführen:
sudo systemctl start nginx
sudo systemctl enable nginx
Kibana ist jetzt unter https://FQDN/ erreichbar
Logstash installieren:
Das Logstash Repository-File erstellen:
sudo vi /etc/yum.repos.d/logstash.repo [logstash-1.5] name=logstash repository for 1.5.x packages baseurl=http://packages.elasticsearch.org/logstash/1.5/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Speicherun und beenden
Logstash installieren :
sudo yum -y install logstash
SSL-Zertifikate generieren
Erzeugen von Zertifikaten zur Überprüfung der Serverauthentizität
cd /etc/pki/tls sudo openssl req -subj '/CN=logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
Die Datei logstash-forwarder.crt sollte auf alle Server kopiert werden, welche die Logs an den Logstash-Server senden
Logstash konfigurieren:
Die Konfigurationsdateien für Logstash sind im json-Format geschrieben und befinden sich unter /etc/logstash/conf.d. Die Konfiguration umfasst drei Abschnitte: inputs, filters, und outputs.
Die 01-lumberjack-input.conf Datei erstellen und den “lumberjack” input einrichten (das Protokolle das von Logstash und Logstash Forwarder zur Kommunikation verwendet wird)
sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf input { lumberjack { port => 5000 type => "logs" ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
Nun speichern und exit. Es ist vermerkt das lumberjack den TCP port 5000 abhört und die Zertifikate verwendet, die wir zuvor erzeugt haben.
Nun, ein File erstellen das 10-syslog.conf heißt, und dieses zu den Einstellungen für die Filterung von syslog Nachrichten hinzu:
sudo vi /etc/logstash/conf.d/10-syslog.conf filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Speichern und exit
Das letzte 30-lumberjack-output.conf File erstellen:
sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf output { elasticsearch { host => localhost } stdout { codec => rubydebug } }
Logstash neustarten:
sudo service logstash restart
Jetzt ist Logstash eingerichtet, nun zu Logstash Forwarder
Logstash Forwarder einrichten
Das SSL-Zertifikat auf den Server kopieren, auf dem Logstash Forward laufen soll
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
key herunterladen:
sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Repository configuration file erstellen:
sudo vi /etc/yum.repos.d/logstash-forwarder.repo
repo für Logstash Forwarder erstellen
[logstash-forwarder] name=logstash-forwarder repository baseurl=http://packages.elasticsearch.org/logstashforwarder/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Logstash Forwarder installieren
sudo yum -y install logstash-forwarder
Das Zertifikat zur benötigen location kopieren:
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
Nun einrichten:
sudo vi /etc/logstash-forwarder.conf
"servers": [ "logstash_server_private_IP:5000" ], "timeout": 15, "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" Между квадратнымы скобками вставляем { "paths": [ "/var/log/messages", "/var/log/secure" ], "fields": { "type": "syslog" } }
Logstash Forwarder zu dem autorun hinzufügen und ausführen:
sudo service logstash-forwarder restart
Nun, sendet Logstash Forwarder Logs zu dem Logstash Server.
Enter kibana, das Dashboard öffnen und Ansicht genießen!
Fazit
Suche und Datenmanagement werden zunehmend zu einer Schlüsselkomponente für Softwaresysteme und technologiegetriebene Unternehmen. Die Sicherstellung optimaler Suchfunktionen in kundenorientierten Anwendungen wie E-Commerce-Apps ist weniger ein Wettbewerbsvorteil als vielmehr ein Muss. Der Bedarf an solchen Tech-Stacks wie dem Elastic Stack wird in Zukunft noch steigen, vor allem wenn neue Formen der Suche, wie die Sprachsuche, an Bedeutung gewinnen.
Wenn Ihr nächstes Softwareentwicklungsprojekt oder künftige Iterationen einer sich entwickelnden Anwendung auf Elastic Stack-Expertise angewiesen sind und Sie von einem maßgeschneiderten, dedizierten Team oder der Erweiterung eines bestehenden Teams mit dem Elastic Stack profitieren könnten, kontaktieren Sie uns bitte!