Überwachen von Docker

Check_MK Manual
Letzte Aktualisierung: 11. Oktober 2018

Suche im Handbuch

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 Docker-Container direkt über den Linux-Agenten überwachen. Dabei werden nicht nur Rahmendaten, wie der Status des Daemons oder des Containers, 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 die Node (Docker-Sprech für: Host, auf dem die Container laufen) ermitteln kann, kann Check_MK detaillierte Statusinformationen der Container ermitteln. Hierzu wird in 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 Skripte angelegt werden.

2. Einrichtung

2.1. Einrichtung der Docker-Node

Bei dem Host, auf dem die Container laufen, brauchen Sie nichts weiter zu tun, als den normalen Linux-Agenten einzurichten. Dieser erkennt dann automatisch, ob es sich hier um eine Docker-Node 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 auf zwei verschiedene Weisen erfolgen. Die einfachste Methode ist es, die Huckepackdaten zu nutzen, welche von dem Docker-Host zu jedem Container angelegt werden können. Installieren Sie dazu das dazugehörige Plugin auf der Docker-Node. 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 der Docker-Node 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 das Merkmal IP address family auf No IP. Zusätzlich können Sie noch den Docker-Host 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 Sie 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 Docker-Images 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 Docker-Hosts 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.

Das 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 Docker-Node 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 so wie oben beschrieben.

3. Diagnosemöglichkeiten

3.1. Diagnose für eine Docker-Node

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, ob 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 sind. 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 Docker-Installation 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.