LimeSoda Blog

Zentralisiertes Logging für Docker Applikationen mit dem Elastic Stack

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

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

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:

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:

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.