ELK/Opensearch Stack mit Docker Compose: Logs zentral sammeln

Ein zentraler Logging-Stack wie ELK (Elasticsearch, Logstash, Kibana) oder OpenSearch ermöglicht die Erfassung, Aggregation und Visualisierung von Logs aus unterschiedlichen Systemen und Containern. Mit Docker Compose lässt sich dieser Stack einfach auf Linux aufsetzen, inklusive persistenter Volumes, Netzwerke und konfigurierbarer Ports. Dieses Tutorial zeigt praxisnah, wie ein stabiler, updatefähiger Logging-Stack aufgebaut wird.

Grundkomponenten eines ELK/Opensearch-Stacks

Ein typischer Logging-Stack besteht aus mehreren Diensten:

  • Elasticsearch / OpenSearch: Speicherung und Indexierung von Logs
  • Logstash: Verarbeitung, Parsing und Weiterleitung von Logs
  • Kibana / OpenSearch Dashboards: Visualisierung und Suche der Logs
  • Volumes: Persistente Speicherung von Daten, Konfigurationen und Indizes
  • Netzwerke: Interne Kommunikation zwischen den Services

Volumes für Persistenz

Persistente Volumes sichern Indizes, Konfigurationen und Dashboards, sodass sie auch nach Neustarts der Container erhalten bleiben.

volumes:
  elasticsearch_data:
  logstash_config:
  kibana_data:
  • elasticsearch_data für Indexdaten
  • logstash_config für Pipeline-Konfigurationen
  • kibana_data für Dashboards und User-Einstellungen
  • Persistente Volumes bleiben bestehen, selbst wenn Container neu erstellt oder aktualisiert werden

Netzwerke für interne Kommunikation

Ein separates Netzwerk ermöglicht sichere Kommunikation zwischen Elasticsearch, Logstash und Kibana.

networks:
  logging_net:
  • Alle Services kommunizieren über logging_net
  • Externe Zugriffe erfolgen nur über gemappte Ports für Kibana oder OpenSearch Dashboards

Beispiel: docker-compose.yml für ELK

version: '3.8'

services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.10.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- logging_net

logstash:
image: docker.elastic.co/logstash/logstash:8.10.0
container_name: logstash
volumes:
- logstash_config:/usr/share/logstash/pipeline
ports:
- "5000:5000"
networks:
- logging_net
depends_on:
- elasticsearch

kibana:
image: docker.elastic.co/kibana/kibana:8.10.0
container_name: kibana
ports:
- "5601:5601"
networks:
- logging_net
depends_on:
- elasticsearch

Beispiel: docker-compose.yml für OpenSearch

version: '3.8'

services:
opensearch:
image: opensearchproject/opensearch:2.10.1
container_name: opensearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- elasticsearch_data:/usr/share/opensearch/data
ports:
- "9200:9200"
- "9600:9600"
networks:
- logging_net

opensearch_dashboards:
image: opensearchproject/opensearch-dashboards:2.10.1
container_name: opensearch_dashboards
ports:
- "5601:5601"
networks:
- logging_net
depends_on:
- opensearch

logstash:
image: docker.elastic.co/logstash/logstash:8.10.0
container_name: logstash
volumes:
- logstash_config:/usr/share/logstash/pipeline
ports:
- "5000:5000"
networks:
- logging_net
depends_on:
- opensearch

Erklärungen zur Compose-Datei

  • Elasticsearch / OpenSearch: Container für Speicherung und Indexierung, persistente Speicherung über Volume
  • Logstash: Pipeline-Container für Log-Verarbeitung, Konfiguration über Volume
  • Kibana / OpenSearch Dashboards: Visualisierung der Logs, Port für Webinterface
  • Volumes: Persistente Speicherung der Daten, Dashboards und Pipeline-Konfigurationen
  • Netzwerke: logging_net verbindet alle Services intern
  • depends_on: Sicherstellung der Startreihenfolge

Start und Verwaltung des Logging-Stacks

Starten Sie den Stack mit:

docker-compose up -d

Zum Stoppen und Entfernen aller Container, Netzwerke und Volumes:

docker-compose down -v

Best Practices

  • Volumes für persistente Daten verwenden
  • Netzwerke für interne Kommunikation definieren
  • Versionierte Images nutzen für einfache Rollbacks
  • Backups für Indizes, Pipelines und Dashboards einplanen
  • Monitoring und Alerts in Kibana / OpenSearch Dashboards einrichten
  • Ports nur nach Bedarf öffnen, optional Reverse Proxy für sicheren Zugriff
  • Regelmäßige Updates der Container durchführen
  • Ressourcenlimits setzen (RAM, CPU) für Elasticsearch/OpenSearch

Praxisbeispiele

ELK-Stack starten

docker-compose up -d

OpenSearch-Stack starten

docker-compose up -d

Logs überwachen

docker-compose logs -f elasticsearch
docker-compose logs -f logstash
docker-compose logs -f kibana

Rollback auf vorherige Version

docker service update --image docker.elastic.co/elasticsearch/elasticsearch:8.9.0 elasticsearch_service
docker service update --image opensearchproject/opensearch:2.9.0 opensearch_service

Updatefähigkeit

Versionierte Docker Images ermöglichen einfache Updates für Elasticsearch, Logstash und Kibana bzw. OpenSearch. Persistente Volumes sichern Indizes, Pipelines und Dashboards, sodass diese nach Updates erhalten bleiben.

docker-compose pull
docker-compose up -d

Zusammenfassung

Mit Docker Compose lässt sich ein ELK- oder OpenSearch-Stack auf Linux schnell, sicher und updatefähig betreiben. Persistente Volumes, interne Netzwerke und Best Practices wie Backups, Monitoring und Alerts sorgen für einen stabilen und wartbaren Betrieb. Versionierte Images erleichtern Updates und Rollbacks, wodurch ein zuverlässiges zentrales Logging gewährleistet wird.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles