Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Konfiguration der Docker-Compose-Datei | Überwachung und Protokollierung in DevOps
Einführung in DevOps

bookKonfiguration der Docker-Compose-Datei

Nachdem alle notwendigen Konfigurationen für Filebeat, Logstash und die Flask-Anwendung vorgenommen wurden, ist es an der Zeit, diese zusammenzuführen und als ein einziges System auszuführen. Dafür verwenden wir Docker Compose.

Note
Definition

Docker Compose ist ein Tool, mit dem alle benötigten Container in einer einzigen YAML-Datei definiert und mit einem Befehl gestartet werden können.

Anstatt für jeden Dienst einen separaten docker run-Befehl zu schreiben, werden deren Konfigurationen in docker-compose.yml hinterlegt und alles gemeinsam ausgeführt.

Eine einfache docker-compose.yml-Datei sieht folgendermaßen aus:

docker-compose.yml

docker-compose.yml

copy

Erstellen wir nun Schritt für Schritt eine vollständige Datei und erläutern dabei jeden Container.

Flask-Anwendung

Dies ist Ihre Hauptanwendung, die Protokolle erzeugt.

docker-compose.yml

docker-compose.yml

copy

Dieser Block weist Docker an, den Container aus dem aktuellen Verzeichnis (wo sich Ihre Dockerfile befindet) zu bauen.

Der Container wird flask-app genannt. Die Zeile volumes verbindet den lokalen Ordner ./logs mit /logs im Container. Dadurch werden alle von der Anwendung erstellten Protokolle sowohl im Container als auch auf Ihrem Computer gespeichert.

Die Anwendung läuft im Container auf Port 5000, aber wir ordnen ihn Port 5050 auf Ihrem Rechner zu, sodass Sie über Ihren Browser unter http://localhost:5050 darauf zugreifen können.

Filebeat

Filebeat fungiert als Agent, der Protokolldateien überwacht und neue Einträge an Logstash sendet.

docker-compose.yml

docker-compose.yml

copy

Filebeat wird aus dem offiziellen 8.15.0-Image ausgeführt. Es läuft als root-Benutzer, damit es Berechtigungen zum Lesen von Logdateien hat.

Der Ordner ./logs wird im Nur-Lese-Modus sowie die Konfigurationsdatei filebeat.yml eingebunden. Dies gibt Filebeat an, welche Logs überwacht werden sollen und wohin sie gesendet werden. depends_on stellt sicher, dass Filebeat erst startet, nachdem die Anwendung und Logstash laufen.

Logstash

Logstash empfängt Logs von Filebeat, verarbeitet sie (zum Beispiel durch Parsen von JSON) und leitet sie an Elasticsearch weiter.

docker-compose.yml

docker-compose.yml

copy

Dieser Container verwendet das offizielle Logstash-Image.

Die Konfigurationsdatei logstash.conf wird eingebunden, die Logstash anweist, wie eingehende Logs verarbeitet werden sollen. Der Container startet erst, nachdem Elasticsearch läuft, da ein Ziel für die verarbeiteten Logs benötigt wird.

Port 5044 wird freigegeben, damit Filebeat Daten an Logstash senden kann.

Elasticsearch

Elasticsearch speichert Logs als Dokumente und ermöglicht eine schnelle Suche darin.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Elasticsearch-Image in der Version 8.15.0.

  • discovery.type=single-node gibt an, dass ein Single-Node-Cluster betrieben wird (ausreichend für lokale Tests);
  • xpack.security.enabled=false deaktiviert die Sicherheit, sodass keine Benutzernamen und Passwörter erforderlich sind;
  • ES_JAVA_OPTS begrenzt die Java-Speichernutzung.

Der Dienst ist über Port 9200 unter http://localhost:9200 erreichbar.

Kibana

Kibana ist eine Weboberfläche für Elasticsearch. Sie unterstützt die Visualisierung von Logs und die Erstellung von Dashboards.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Kibana-Image.

Port 5601 wird freigegeben, sodass Sie über Ihren Browser unter http://localhost:5601 auf Kibana zugreifen können.

ELASTICSEARCH_HOSTS verweist Kibana auf unseren Elasticsearch-Container, damit Daten abgerufen und angezeigt werden können.

Finale docker-compose.yml

Hier ist die vollständige Docker Compose-Datei mit allen Diensten in der richtigen Reihenfolge verbunden:

docker-compose.yml

docker-compose.yml

copy

Diese docker-compose.yml startet alle Dienste in der richtigen Reihenfolge. Die Flask-Anwendung erzeugt Protokolle, Filebeat sammelt diese und sendet sie an Logstash, Logstash verarbeitet die Protokolle und leitet sie an Elasticsearch weiter, und Kibana stellt eine Weboberfläche zur Anzeige und Analyse der Daten bereit.

Alles, was noch bleibt, ist das System auszuführen und zu testen, was im nächsten Kapitel behandelt wird.

1. Was ist der Hauptzweck von Docker Compose in diesem Setup?

2. Welcher Dienst ist für das Sammeln von Protokolldateien aus der Flask-Anwendung und das Senden an Logstash verantwortlich?

question mark

Was ist der Hauptzweck von Docker Compose in diesem Setup?

Select the correct answer

question mark

Welcher Dienst ist für das Sammeln von Protokolldateien aus der Flask-Anwendung und das Senden an Logstash verantwortlich?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.7

bookKonfiguration der Docker-Compose-Datei

Swipe um das Menü anzuzeigen

Nachdem alle notwendigen Konfigurationen für Filebeat, Logstash und die Flask-Anwendung vorgenommen wurden, ist es an der Zeit, diese zusammenzuführen und als ein einziges System auszuführen. Dafür verwenden wir Docker Compose.

Note
Definition

Docker Compose ist ein Tool, mit dem alle benötigten Container in einer einzigen YAML-Datei definiert und mit einem Befehl gestartet werden können.

Anstatt für jeden Dienst einen separaten docker run-Befehl zu schreiben, werden deren Konfigurationen in docker-compose.yml hinterlegt und alles gemeinsam ausgeführt.

Eine einfache docker-compose.yml-Datei sieht folgendermaßen aus:

docker-compose.yml

docker-compose.yml

copy

Erstellen wir nun Schritt für Schritt eine vollständige Datei und erläutern dabei jeden Container.

Flask-Anwendung

Dies ist Ihre Hauptanwendung, die Protokolle erzeugt.

docker-compose.yml

docker-compose.yml

copy

Dieser Block weist Docker an, den Container aus dem aktuellen Verzeichnis (wo sich Ihre Dockerfile befindet) zu bauen.

Der Container wird flask-app genannt. Die Zeile volumes verbindet den lokalen Ordner ./logs mit /logs im Container. Dadurch werden alle von der Anwendung erstellten Protokolle sowohl im Container als auch auf Ihrem Computer gespeichert.

Die Anwendung läuft im Container auf Port 5000, aber wir ordnen ihn Port 5050 auf Ihrem Rechner zu, sodass Sie über Ihren Browser unter http://localhost:5050 darauf zugreifen können.

Filebeat

Filebeat fungiert als Agent, der Protokolldateien überwacht und neue Einträge an Logstash sendet.

docker-compose.yml

docker-compose.yml

copy

Filebeat wird aus dem offiziellen 8.15.0-Image ausgeführt. Es läuft als root-Benutzer, damit es Berechtigungen zum Lesen von Logdateien hat.

Der Ordner ./logs wird im Nur-Lese-Modus sowie die Konfigurationsdatei filebeat.yml eingebunden. Dies gibt Filebeat an, welche Logs überwacht werden sollen und wohin sie gesendet werden. depends_on stellt sicher, dass Filebeat erst startet, nachdem die Anwendung und Logstash laufen.

Logstash

Logstash empfängt Logs von Filebeat, verarbeitet sie (zum Beispiel durch Parsen von JSON) und leitet sie an Elasticsearch weiter.

docker-compose.yml

docker-compose.yml

copy

Dieser Container verwendet das offizielle Logstash-Image.

Die Konfigurationsdatei logstash.conf wird eingebunden, die Logstash anweist, wie eingehende Logs verarbeitet werden sollen. Der Container startet erst, nachdem Elasticsearch läuft, da ein Ziel für die verarbeiteten Logs benötigt wird.

Port 5044 wird freigegeben, damit Filebeat Daten an Logstash senden kann.

Elasticsearch

Elasticsearch speichert Logs als Dokumente und ermöglicht eine schnelle Suche darin.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Elasticsearch-Image in der Version 8.15.0.

  • discovery.type=single-node gibt an, dass ein Single-Node-Cluster betrieben wird (ausreichend für lokale Tests);
  • xpack.security.enabled=false deaktiviert die Sicherheit, sodass keine Benutzernamen und Passwörter erforderlich sind;
  • ES_JAVA_OPTS begrenzt die Java-Speichernutzung.

Der Dienst ist über Port 9200 unter http://localhost:9200 erreichbar.

Kibana

Kibana ist eine Weboberfläche für Elasticsearch. Sie unterstützt die Visualisierung von Logs und die Erstellung von Dashboards.

docker-compose.yml

docker-compose.yml

copy

Wir verwenden das offizielle Kibana-Image.

Port 5601 wird freigegeben, sodass Sie über Ihren Browser unter http://localhost:5601 auf Kibana zugreifen können.

ELASTICSEARCH_HOSTS verweist Kibana auf unseren Elasticsearch-Container, damit Daten abgerufen und angezeigt werden können.

Finale docker-compose.yml

Hier ist die vollständige Docker Compose-Datei mit allen Diensten in der richtigen Reihenfolge verbunden:

docker-compose.yml

docker-compose.yml

copy

Diese docker-compose.yml startet alle Dienste in der richtigen Reihenfolge. Die Flask-Anwendung erzeugt Protokolle, Filebeat sammelt diese und sendet sie an Logstash, Logstash verarbeitet die Protokolle und leitet sie an Elasticsearch weiter, und Kibana stellt eine Weboberfläche zur Anzeige und Analyse der Daten bereit.

Alles, was noch bleibt, ist das System auszuführen und zu testen, was im nächsten Kapitel behandelt wird.

1. Was ist der Hauptzweck von Docker Compose in diesem Setup?

2. Welcher Dienst ist für das Sammeln von Protokolldateien aus der Flask-Anwendung und das Senden an Logstash verantwortlich?

question mark

Was ist der Hauptzweck von Docker Compose in diesem Setup?

Select the correct answer

question mark

Welcher Dienst ist für das Sammeln von Protokolldateien aus der Flask-Anwendung und das Senden an Logstash verantwortlich?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 5
some-alt