Zentralisiertes Logging für Docker Applikationen mit dem Elastic Stack

2019-05-21-docker

In verteilten Applikationen besteht oft das Problem, dass Log-Daten über mehrer Server verteilt gespeichert sind.

Man kann eine Docker Applikation auch als verteilte Applikation betrachten. Die einzelnen Docker Container bilden dabei die verteilten Server. Die Container erzeugen unter Umständen lokale Log-Dateien, die nur innerhalb der Container verfügbar sind.

Die Analyse der Daten ist dadurch schwierig und zeitintensiv.

Magento 2 und Typo3 – Docker in Production

Viele Entwickler setzen Docker gerne zur Entwicklung ein. In den meisten Fällen wahrscheinlich aus 3 Gründen

  • Eine saubere und kontrollierte Umgebung ohne Betriebssystem Einflüsse
  • Nähe der Umgebung zum Produktiv-Server
  • Weil es scheinbar cooler ist als mit einer Virtuellen Maschine zu arbeiten

Der letzte Punkt ist auf jeden Fall Geschmacksache. Betreibt man Docker in einer Produktivumgebung kommen andere Schwerpunkte zum tragen, nämlich

  • Sicherheitsrelevante Isolierung der Services untereinander
  • Einfache Transportierbarkeit der Anwendung von der lokalen Umgebung auf den Produktiv-Server
  • Leichtgewichtiger als Virtuelle Maschinen
  • Teilweise höhere Performance als Virtuelle Maschinen

Wir betreiben bei einem unserer Kunden Typo3 und Magento 2 in einer Docker Applikation im Produktivbetrieb. Die folgende Liste zeigt die wesentlichen Services die dort laufen:

  • NGINX Reverse-Proxy
  • 2 mal Varnish Caching Server für Typo3 bzw. Magento
  • 2 mal NGINX Webserver für Typo3 bzw. Magento
  • Diverse Redis Container für Caching und Sessions
  • RabbitMQ zur asynchronen Abarbeitung von Magento Aufgaben
  • 2 mal PHP-FPM für Typo3 bzw. Magento
  • 2 mal Cron Container
  • 2 mal MySQL Datenbank Container

Aufbereiten und analysieren von Logfiles mit Kibana

Die Docker-App die für das Aufbereiten und die Analyse der Logfiles zuständig ist, läuft parallel zur oben aufgeführten Docker-App, und besteht aus folgenden Services:

  • Filebeat
  • Logstash
  • Elasticsearch
  • Kibana

4 Services nur für Logfile Analyse? Hört sich komplex an … ist es auch.

Um zu verstehen warum wir das alles brauchen, müssen wir uns die einzelnen Services kurz ansehen.

Filebeat

Filebeat überwacht Log-Dateien die auf der Festplatte liegen und schickt die Daten an Logstash. In unserem konkreten Fall kommen die Log-Dateien vom Docker Daemon.

Logstash

Über Filter-Pipelines kann Logstash einen Eingabe-Datenstrom einlesen, verarbeiten und in strukturierter Form an Elasticsearch ausgeben. Den Eingabe-Datenstrom erhält Logstash von Filebeat.

Elasticsearch

Im Elasticsearch Index sind unsere Log-Daten in strukturierter Form gespeichert und aufbereitet.

Kibana

Wir nutzen Kibana zur Analyse unserer Logfiles. Wir erhalten mit diesem Werkzeug ein optisch ansprechendes User Interface das mit div. Filtern und Dashboards eine rasche Analyse der Daten ermöglicht. Kibana bezieht seine Daten aus Elasticsearch.

Docker Logfiles

Docker Images schreiben als Best-Practice alle Logging-Daten auf die Devices /dev/stdout und /dev/stderr. Allgemeines Logging auf stdout, Fehler auf stderr.

Alles was auf diesen zwei Devices landet, schreibt der Docker Daemon als JSON-Daten auf die Festlatte des Docker Hosts (vorausgesetzt man hat das nicht anders konfiguriert). Pro Container wird ein Logfile erzeugt.

Wenn wir jetzt Filebeat schlau konfigurieren, sodass es die JSON-Daten an Logstash übergibt, haben wir gewonnen.

Absolut hilfreich sind diese beiden GitHub Projekt

Kombiniert man beide Projekte in eine docker-compose Datei, lässt sich die Logging Applikation hochfahren und man kann sofort experimentieren.

 

Rating: 3.3/5. Von 8 Bewertungen.
Bitte warten...

Hinterlasse einen Fingerabdruck für die Ewigkeit: Ein Kommentar bei LimeSoda!

(*) Pflichtfeld

Bewirb dich bei uns!

LimeSoda.
Digitalagentur in Wien.

Bewirb dich jetzt!
Tom

Verpasse nicht den nächsten Blog-Post von Thomas!

Jetzt zum LimeSoda-Newsletter anmelden