© Excellent backgrounds/Shutterstock.com
Kolumne: Docker rockt Java

Docker-Logging-Plug-ins verwenden


Log-Events einsammeln, auswerten und visualisieren ist eine tägliche Herausforderung. Die Anzahl der vermeintlichen Lösungen für Docker-Container wächst stetig. Die Analyse der Logs ist unerlässlich im Fehlerfall und zur kontinuierlichen Verbesserung der Systeme. In diesem Artikel werden verschiedene Möglichkeiten zum Einsammeln von Log-Events für Docker-Container vorgestellt.

In der Docker Engine können die Ausgaben aller Container unterschiedlich bereitgestellt werden. Traditionell werden die Log-Events von stdout und stderr jedes Containers in eine Datei geschrieben. Der Docker Daemon erledigt diese Umlenkung beim Start jedes Containers. Die Ausgaben können mit der Docker-CLI, genauer dem HTTP-Docker-API, jederzeit auch rückwirkend abgerufen werden. Seit der Version 1.7 kann die Ausgabe auf einen Zeitausschnitt beschränkt werden. Leider funktioniert diese Option aktuell nur in der experimentellen Version für Docker 1.8 [1], [2]. Wenn die eigene Software also alle Ausgaben zeilenweise in die Konsole schreibt, können die Ausgaben eines Docker-Hosts also zentral „beauskunftet“ und eingesammelt werden.

Listing 1: Ausgaben eines Docker-Hosts einsehen

$ docker run --name logger -d \ busybox /bin/sh -c \ 'while true; do >&2 echo "hello world"; sleep 1; done;' $ docker logs -t -f --since 5m logger

Docker Syslog Driver

Seit der Docker-Version 1.7 können die Log-Events auch alternativ zu einem bestehenden Syslog Daemon gesendet werden (Abb. 1). Dieser Syslog-Service kann natürlich am besten in einem Container verpackt und gestartet werden (Listing 2). Damit die Speicherung effizient bleibt, werden die Log-Events in einem Volume im Container gestartet (Listing 3). Natürlich kann alternativ ein Data-Container oder ein Host-Filesystem als Volume definiert werden. Die Installation beruht auf dem Standard-Debian rsyslog. Es werden nur die UDP- und TCP-Module aktiviert und der Zeitstempel konfiguriert. Mit der Umstellung werden nun alle Events in eine Datei gelenkt oder können zu einem zentralen Log-Server weitergeleitet werden.

Listing 2: Docker-Container für rsyslog ­bauen und verwenden

$ mkdir -p rsyslog $ cd rsyslog $ cat >Dockerfile <<EOF FROM debian:8 MAINTAINER Peter Rossbach <peter.rossbach@bee42.com> @PRossbach RUN DEBIAN_FRONTEND=noninteractive apt-get update \ && apt-get -y -q install rsyslog \ && rm -rf /var/lib/{apt,dpkg,cache,log}/ RUN sed 's/#$ModLoad imudp/$ModLoad imudp/' -i /etc/rsyslog.conf \ && sed 's/#$UDPServerRun 514/$UDPServerRun 514/' -i /et...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang