Einführung
In diesem Tutorial erfahren Sie, wie Sie den ELK-Stack mithilfe von Docker Compose auf einem Server mit Ubuntu (Version 22.04) installieren. Der ELK-Stack besteht aus Elasticsearch, Kibana und Logstash.
- Elasticsearch ist eine Such- und Analyse-Engine.
- Kibana ist eine Benutzeroberfläche für die Datenanalyse.
- Logstash kann anwendungsbezogene Protokolle analysieren.
Voraussetzungen
- Ein Server mit Ubuntu 22.04 oder höher: SSH-Zugriff auf diesen Server und Root- bzw. sudo-Benutzerzugriff
- Grundkenntnisse in Docker, Docker Compose, ElasticSearch und YAML
Schritt 1 – Docker Compose installieren
Wenn Docker Compose bereits auf Ihrem Server installiert ist, können Sie diesen Schritt überspringen. Stellen Sie zunächst eine SSH-Verbindung zu Ihrem Server her, indem Sie folgenden Befehl verwenden:
ssh holu@<your_host>
Stellen Sie sicher, dass Sie die apt-Pakete aktualisieren und cURL installieren:
sudo apt-get update && sudo apt-get install curl -y
Nachdem sichergestellt ist, dass curl installiert ist, können wir das von Docker bereitgestellte Schnellinstallationsskript verwenden, um Docker und Docker Compose zu installieren:
curl https://get.docker.com | sh
Dieser Befehl lädt das Skript von get.docker.com herunter und leitet es an sh weiter (das heruntergeladene Skript wird an sh übergeben, welches es ausführt und Docker installiert). Abschließend können wir uns noch der Docker-Gruppe hinzufügen, damit wir nicht jedes Mal sudo verwenden müssen, wenn wir den Docker-Befehl ausführen.
sudo usermod -aG docker holu
Vergessen Sie nicht, sich ab- und wieder anzumelden, um die Änderungen zu übernehmen.
Schritt 2 – Erstellen Sie eine docker-compose.yaml-Datei.
Datei docker-compose.yaml Es dient zur Deklaration der gesamten Infrastruktur des ELK-Stacks. Es wird verwendet, um mit einem einzigen Befehl mehrere Container zu erstellen.
Erstellen Sie einen neuen Ordner auf Ihrem Server und erstellen Sie darin eine Datei. docker-compose.yaml Erstellen Sie darin:
mkdir elk-stack && cd elk-stack && touch docker-compose.yaml
Wir möchten mit Docker Compose drei Docker-Container erstellen:

Um diese drei Container zu erstellen, fügen Sie der Datei folgenden Inhalt hinzu. docker-compose.yaml Hinzufügen:
version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=falseUns fehlt aktuell noch ein Element: die .env-Datei. In der .env-Datei werden Geheimnisse wie Passwörter und API-Token gespeichert, damit diese aus Ihrer Konfiguration oder Ihrem Code entfernt werden können. Docker Compose erkennt die .env-Datei automatisch und ersetzt Variablen wie ${MY_VARIABLE} durch die entsprechende Umgebungsvariable.
Erstellen Sie eine Umgebungsvariable und fügen Sie die folgenden Zeilen hinzu:
ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>Jetzt können Sie docker compose ausführen, um alles zum Laufen zu bringen:
docker compose up -d
Ausgabe:
[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch StartedSie können den Befehl verwenden docker ps Verwenden Sie diese Funktion, um zu überprüfen, ob alles wie erwartet funktioniert.
holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch
Sie können Kibana jetzt in einem Webbrowser starten, indem Sie Folgendes eingeben: :5601 In der URL-Leiste öffnen.
Mit Benutzernamen elastisch und das zuvor in der Datei gespeicherte Passwort .env Sie haben sich entschieden, sich einzuloggen.

Wenn Sie diese Seite beim Einloggen sehen, klicken Sie auf “Selbstständig erkunden”.

Sie sollten nun auf die Kibana-Startseite zugreifen können. Sie sieht folgendermaßen aus:

Schritt 3 – Logstash
Nun fehlt nur noch das letzte Puzzleteil: Logstash. Logstash kann die Protokolle Ihrer Anwendung(en) analysieren und die analysierten Protokolle an Elasticsearch übermitteln.
docker-compose.yaml Bearbeiten Sie den Abschnitt “Dienste” unter “Kibana” und fügen Sie dort den vierten Container hinzu.
logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.confDie Einrichtung von Logstash ist etwas komplizierter. Sie benötigen eine zusätzliche Konfigurationsdatei namens logstash.conf. Logstash arbeitet mit sogenannten Pipelines. Diese Datei beschreibt, was Logstash tun soll (woher die Logs stammen, wie sie analysiert und wohin sie gesendet werden). Die Pipeline befindet sich in der Datei logstash.conf.
Dies ist eine der grundlegendsten Produktlinien, die man haben kann:
input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}Es ist im Grunde selbsterklärend. Es nimmt eine Datei als Eingabe (in diesem Fall /var/log/dpkg.log) und gibt die Ausgabe an Elasticsearch und stdout aus.
Fügen Sie das obige Beispiel in Ihre logstash.conf-Datei ein.
Das Verzeichnis elk-stack sollte nun die folgenden Dateien enthalten:
elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.confSie können Logstash jetzt mit folgendem Befehl starten:
docker compose up -d
Ausgabe:
[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana RunningSie können nun von Kibana aus auf Logstash zugreifen. Zuerst müssen Sie eine Logstash-Datenansicht erstellen.
Rufen Sie die Analytics-Seite auf. Dort sollte etwa Folgendes angezeigt werden:

Erstellen Sie Ihre Datenansicht, indem Sie auf die Schaltfläche “Datenansicht erstellen” klicken:

Nach dem Speichern der Datenansicht sollten Sie die von Logstash kommenden Berichte sehen können:

Schritt 4 – Den Stapel zerstören
Um den Stack zu stoppen und die Container zu entfernen, führen Sie abschließend folgenden Befehl aus:
docker compose down
Ausgabe:
[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default RemovedErgebnis
Sie sollten einen ELK-Stack mit Docker Compose betreiben. Die nächsten Schritte bestehen darin, Berichtsgeneratoren wie Filebeat hinzuzufügen oder die offizielle Dokumentation zu konsultieren.











