Überwachen von Docker

Letzte Aktualisierung: 11. Oktober 2018


1. Einleitung

In den vergangenen Jahren hat das Containerkonzept die IT-Welt im Sturm erobert. Das wirft natürlich auch Fragen zu der Überwachung solcher Container auf. Check_MK kann ab der Version 1.5.0 Dockercontainer direkt über den Linuxagenten überwachen. Dabei werden nicht nur Rahmendaten, wie der Status des Daemons oder der Container, sondern auch die Container selbst überwacht. Eine vollständige Liste der aktuell überwachbaren Dinge finden Sie wie immer im Katalog der Checkplugins.

Neben den Status- und Inventurinformationen, die Check_MK über den Node (Docker-sprech für: Host auf dem die Container laufen) ermitteln kann, kann Check_MK Detailierte Statusinformationen der Container ermitteln. Hierzu wird im Check_MK jeder Container als eigenständiger Host angelegt, wenn er überwacht werden soll. Seine Daten werden im Huckpackverfahren (piggyback) an diesen Host geliefert. Zukünftig wird das Erstellen und Löschen solcher Hosts automatisiert abgewickelt. Bis dahin müssen diese Hosts manuell oder mit Hilfe eigener Scripte angelegt werden.

2. Einrichtung

2.1. Einrichtung der Dockernode

Bei dem Host, auf dem die Container laufen, brauchen Sie nichts weiter zu tun, als den normalen Linuxagenten einzurichten. Dieser erkennt dann automatisch, ob es sich hier um eine Dockernode handelt.

Fügen Sie die neu erkannten Services wie gewohnt hinzu:

Nachdem Sie die Änderungen aktiviert haben, werden die Rahmendaten von Docker bereits überwacht.

2.2. Einrichtung des Containerhosts

Die Überwachung eines Containers kann auch zwei verschiedene Weisen erfolgen. Die einfachste Methode ist es, die Huckepackdaten zu nutzen, welche von dem Dockerhost zu jedem Container angelegt werden können. Installieren Sie dazu das dazugehörige Plugin auf der Dockernode. Falls Sie die Agent Bakery nutzen, legen Sie dazu eine Regel in {{Piggybacked docker containers}} an. Eine weitere Konfiguration ist nicht erforderlich, damit das Plugin funktioniert. Danach werden die Daten automatisch von Dockernode geholt.

Legen Sie als weiteren Schritt den oder die Container in Check_MK als Host an und setzen Sie in dem Host das Hostmerkmal Check_MK Agent auf No agent und den Merkmal {{IP address family}} auf No IP. Zusätzlich können Sie noch den Dockerhost als Parent setzen. Der Name des Hosts ist die ID des Containers.

Danach werden auch hier automatisch die neuen Services erkannt und müssen nur noch aktiviert werden:

Überwachen des Hoststatus

Da der Hoststatus eines Containers nicht unbedingt über TCP-Pakete oder ICMP geprüft werden kann, muss dieser anders ermittelt werden. Hier bietet sich der Service Docker container status an. Dieser prüft ohnehin, ob der Container läuft, oder nicht und kann daher als sicheres Mittel verwendet werden, um den Hoststatus zu ermitteln. Legen Sie dazu eine Regel in dem Regelset Host Check Command an und setzen die Option Use the status of the service auf den erwähnten Service. Vergessen Sie nicht die Bedingungen so zu setzen, dass sie nur Container betreffen. In unserem Beispiel liegen alle Container in einem gleichnamigen Ordner:

Den Agent direkt im Container betreiben

Gerade für selbst erstellte Dockerimages möchten Sie vielleicht den Agenten selbst in den Container implementieren. In diesem Fall werden die Daten nicht mehr, wie oben beschrieben, von dem Agenten des Dockerhosts geholt. Stattdessen läuft ein separater Agent in jedem Container. Check_MK erkennt vollkommen automatisch, ob in dem Container ein Agent vorhanden ist, so dass die Daten immer nur einmal abgeholt werden.

Dies funktioniert allerdings nur dann, wenn in dem Container auch alle benötigten Befehle vorhanden sind. Speziell bei minimal gebauten Containern auf Basis von Alpine-Linux kann es gut sein, dass elementare Dinge wie die Bash nicht vorhanden sind. In diesem Fall sollten Sie den Container aus der Dockernode heraus überwachen.

Die Verwendung des Regelsets Host Check Command wird in diesem Fall nur benötigt, wenn der Container nicht pingbar ist, funktioniert aber ansonsten exakt genauso, wie oben beschrieben.

3. Diagnosemöglichkeiten

3.1. Diagnose für eine Dockernode

Sollte die Einrichtung nicht klappen, gibt es verschiedene Möglichkeiten der Analyse des Problems. Der Check_MK-Agent unterstützt die Überwachung von Docker erst ab Version 1.5.0. Prüfen Sie daher, dass auf dem Host ein Agent mit dieser oder einer höheren Version installiert ist.

Falls die Version des Agenten auf dem Host passt, prüfen Sie als nächstes, ob die Daten in der Ausgabe des Agenten enthalten ist. Sie können die Ausgabe als Textdatei über den Button Download agent output in der GUI in dem Dropdown des Hosts herunterladen:

Oder Sie durchsuchen direkt den Agent-Cache. Die Ausgabe in dem folgenden Beispiel ist für die Anschaulichkeit auf die Ausgaben zur Node gekürzt:

OMD[mysite]:~$ grep "<<<docker" tmp/check_mk/cache/mydockerhost
<<<docker_node_info>>>
<<<docker_node_disk_usage:sep(44)>>>
<<<docker_node_images>>>
<<<docker_node_network:sep(0)>>>

Werden die Sektionen hier nicht geführt, wird die Dockerinstallation nicht erkannt. Für den Service Docker node info wird der folgende Befehl benutzt. Dieser muss auf dem Hostsystem in exakt dieser Form ausführbar sein. Prüfen Sie dann gegebenenfalls ihre Docker-Installation:

root@linux# docker info --format "{{json .}}" 2>&1

3.2. Diagnose für einen Containerhost

Falls der Containerhost keine Daten erhält, bzw. keine Services erkannt werden, prüfen Sie zuerst, ob die Piggybackdaten zu diesem Host vorhanden sind. Der Name des Hosts muss identisch zu der ID des Containers sein. Alternativ können Sie auch über das Regelset Hostname translation for piggybacked hosts eine manuelle Zuordnung vornehmen. Hier bietet sich allerdings nur die Option Explicit hostname mapping an:

Um zu prüfen, ob zu einer ID Piggybackdaten angelegt werden, können sie das folgende Verzeichnis prüfen:

OMD[mysite]:~$ ls -l tmp/check_mk/piggyback/
76adfc5a7794  f0bced2c8c96  bf9b3b853834

4. Dateien und Verzeichnisse

Pfad Bedeutung
tmp/check_mk/piggyback/ Hier legt WATO die Huckepackdaten ab. Für jeden Host wird ein Unterordner mit seinem Namen erzeugt. Darin befindet sich eine Textdatei mit den Daten des Hosts. Dateiname ist der Host, welcher die Daten angeliefert hat.
tmp/check_mk/cache/ Hier wird die jeweils jüngste Agentenausgabe aller Hosts temporär gespeichert. Der Inhalt einer Datei zu einem Host ist identisch zu dem Befehl cmk -d myserver123.