Der Elastic Stack (ELK): Einrichtung einer zentralen Protokollierung (logging) mit Logstash, Elasticsearch und Kibana

Eine Einführung in den Elastic Stack als Teil einer DevOps-Architektur sowie eine Schritt für Schritt-Anleitung zur Einrichtung der Erfassung und Visualisierung von Systemprotokollen

Centralised logging with the ELK stack

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

diagram of Adobe inhouse Elastic Stack deployment

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!

Ausgewählte Blogbeiträge