Container? Kann Checkmk natürlich monitoren. Das Vorgehen? Simpel, aber nicht unbedingt intuitiv – ein paar Konzepte von Checkmk und Docker müssen schon bekannt sein.
Wie Checkmk mit dem Docker-Plugin Container, Images und Volumes überwacht – inklusive Piggyback-Prinzip und Praxis-Tipps.
(Bild: Lang | Checkmk)
Wenn Sie interessiert genug sind, um Ihre Infrastruktur zu überwachen, werden Sie auch Container nutzen. Selbst viele Consumer-Produkte wie Medienserver werden mittlerweile als simple, fertig konfigurierte Docker-Kisten angeboten.
Nun kümmert sich Checkmk sowohl um Hosts als auch deren Services. Docker-basierte Anwendungen liegen im Grunde irgendwo dazwischen. Es sind keine kompletten virtuellen Maschinen, haben oft bis aufs Skelett abgespeckte Betriebssysteme als Basis und fungieren im Grunde doch nur als Service/Anwendungsprogramm.
Und obendrein sind sie auch noch auf den Docker-Node angewiesen. Selbst wenn ein Container also zum Beispiel ein komplettes Ubuntu beinhalten sollte, unter dem natürlich der reguläre Checkmk-Agent laufen kann, würde diese Art des Monitorings der Sache nicht gerecht. Denn tendenziell wollen Sie ja wissen, welche Container überhaupt existieren, wie viel Speicherplatz diese und zugehörige Images sowie Volumes einnehmen, und so weiter.
Noch schlimmer: In größeren Umgebungen sind Container häufig flüchtig, werden automatisch erzeugt und gelöscht. Da diesem Umstand nur die kommerziellen Versionen Rechnung zollen, wird er am Ende des Artikels nur kurz abgehandelt.
Piggyback-Prinzip für Container-Monitoring
Das Konzept zum Überwachen von (unter anderem) Containern hört in Checkmk auf den Namen Piggyback. Das meint: Daten von Hosts, auf denen kein Checkmk-Agent läuft oder die als Container von einem Node abhängig sind, nicht von den Hosts selbst kommen, sondern von einem regulären Host mit regulärem Agenten, der diese Daten dann huckepack mit zum Checkmk-Server nimmt.
Mal ganz konkret: Der Host „mein-docker-server“ fungiert als Docker-Node. Auf „mein-docker-server“ läuft ein ganz normaler Checkmk-Agent – mit dem zugehörigen Docker-Plugin. Das Plugin kann die API von Docker nutzen, um Informationen zu vorhandenen Containern, Volumes und Images zu bekommen. Mehr noch: Daten zur CPU-Nutzung, RAM- und Dateisystemauslastung der einzelnen Container können ebenso direkt vom Node-Agenten berechnet werden.
Die Einrichtung ist simpel: Es muss das Agenten-Plugin „mk_docker.py“ konfiguriert und ausgerollt werden. In Checkmk ist es unter „Setup/Agents/Other operating systems/Plugins“ zu finden. Die Installation auf dem Docker-Host:
So weit so gut. Der Agent auf dem Node erzeugt also Daten für seine Container und schickt sie samt seiner eigenen Daten an Checkmk. Nun kennt Checkmk freilich den Host „mein-docker-server“, aber von den 20 Containern, zu denen dieser Host Piggyback-Daten mitliefert, hat es vermutlich noch nie gehört.
Für jeden überwachten Container muss eben auch ein Host in Checkmk existieren.
Abbildung 1: Container-IDs dienen als Namen für ihre Hosts – ausgeliefert vom Agenten auf dem Docker-Node via Piggyback.
(Bild: Lang | Checkmk)
Diese Hosts müssen manuell angelegt werden – und jetzt wird es pingelig: Mit genau dem Namen, der auch huckepack übermittelt wird. Standardmäßig ist das die 12-stellige ID eines Containers. Sie haben zwei Möglichkeiten, die exakten Namen zu erfahren und beim Anlegen von Hosts zu nutzen: Zum einen liefert Docker diese Informationen natürlich selbst, sobald man die laufenden Container auflisten lässt („docker ps“). Zum anderen finden sie sich aber auch auf dem Checkmk-Server. Im Instanz-Verzeichnis werden unter „~/tmp/check_mk/piggyback“ Ordner mit eben diesen Namen/IDs angelegt, für jeden gefundenen Container. Und nimmt man die Namen aus diesem Verzeichnis, darf man sich auch sicher sein, dass es die richtigen sind (siehe Abbildung 1).
Also nochmal das Prozedere soweit:
Docker-Node wird per Agent überwacht
Agent wird mit dem Docker-Plugin erweitert
Docker-Plugin bekommt via Docker-API Informationen zu Containern
Agent liefert die Container-Daten huckepack an Checkmk
In Checkmk werden Hosts mit den Namen der Container-IDs angelegt
Checkmk ordnet die Huckepack-Daten vom Node den Containern zu
Bis hierhin bekämen Sie schon einige Daten pro Container: Uptime, CPU-Nutzung, RAM- und Dateisystemauslastung sowie den „Docker container status“ – das alles allerdings für Hosts mit wenig aussagekräftigen Namen (siehe Abbildung 2). Es fehlen für den Alltag noch ein paar Schritte.
Abbildung 2: Die Standarddaten, die das Docker-Plugin dem Agenten für Container mit auf den Weg gibt.
(Bild: Lang | Checkmk)
Zusätzliche Konfiguration
Die Berechnung von CPU, RAM- und Festplattennutzung vieler Container ist einigermaßen rechenaufwändig. Wenn diese Daten nicht benötigt werden, können sie ausgeschlossen werden. Auf dem Docker-Host benötigt die Datei „/etc/check_mk/docker.cfg“ dafür entsprechende Einträge:
Weitere ausschließbare Daten finden sich in den Konfigurationsbeispielen im Instanzverzeichnis unter „~/share/check_mk/agents/cfg_examples“.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Ebenfalls eine denkbare Option in dieser Config-Datei:
container_id: name
Damit würde statt der Container-ID der Container-Name verwendet – entsprechen könnten die Container-Hosts in Checkmk zum Beispiel „mein-container-1“ statt „abc123def456ghi“ heißen.
Abbildung 2: Die Standarddaten, die das Docker-Plugin dem Agenten für Container mit auf den Weg gibt.
(Bild: Lang | Checkmk)
Der Vollständigkeit halber: Checkmk bietet auch eine Funktion „Host name translation for piggybacked hosts“ an. Damit lassen sich Hostnamen wie „abc123def456ghi“ per Regel umbenennen – etwa einzeln und direkt in „mein-umbenannter-host“ oder auch gesammelt via Regex in „container_ abc123def456ghi“ und so weiter (siehe Abbildung 3).
Wichtig dabei: Die Regel muss dem Docker-Host zugeordnet werden, nicht dem Container-Host. Zudem muss auch der umbenannte Container-Host überhaupt erst angelegt werden! Dafür steht dieser dann nebst allen anderen in diversen Docker-Ansichten zur Verfügung, die über das Monitor-Menü erreichbar sind (siehe Abbildungen 4 und 5).
Abbildung 4: Alle Docker-Container in der Übersicht.
(Bild: Lang | Checkmk)
Abbildung 5: Auch verfügbare Docker-Images lassen sich separat anzeigen.
(Bild: Lang | Checkmk)
Und noch eine letzte Konfiguration könnte nützlich sein: Was ist eigentlich mit dem Host-Status eines Container-Hosts? Standardmäßig pingt Checkmk Hosts einfach an, Container dürften sehr regelmäßig aber gar nicht direkt erreichbar sein. Der Docker-Node spendiert den Containern allerdings den bereits erwähnten Service „Docker container status“ – der nichts weiter tut, als zu vermelden, ob der Container nun läuft oder nicht. Und erfreulicherweise kann eben dieser Service statt des Standard-Pings genutzt werden, um den Host-Status des Containers zu ermitteln (über die Regel „Host check command“).
Praxistipps
In vielen Fällen bietet es sich an, die Container in einen separaten Ordner zu verfrachten. Das ist nicht nur für die menschlichen Nutzer übersichtlich, sondern kann auch bei der Konfiguration helfen. So lassen sich etwa Regeln einfach für Ordner setzen. Und die Service-Erkennung lässt sich so ganz fix für alle Container-Hosts auf einmal ausführen.
Sie nutzen eine fixe Anzahl an Containern? Dann könnte es sich auch lohnen, hier die genaue Anzahl überwachen zu lassen. Dafür gibt es die Regel „Docker node container levels“.
Docker ist durchaus bekannt dafür, selbst Probleme bezüglich RAM- und Dateisystemauslastung zu verursachen, letztere gerne im Zusammenhang mit Cache-Dateien. Da der Docker-Node sowieso mit dem regulären Checkmk-Agenten überwacht wird, sollten Sie darüber nachdenken, Alarme und Benachrichtigungen speziell dafür einzurichten.
Und zu guter Letzt: Das Docker-Agenten-Plugin benötigt auf dem Docker-Node die Python-Bibliothek Docker. Dokumentation und Checkmk-Oberfläche sind hier leider nicht ganz synchron und Ubuntu meldet in der Version 24.04 wiederum eigene Problemchen an. Die Installation von Plugin und Bibliothek auf dem Docker-Node funktioniert im Prinzip aber genau so:
Sollte auf dem System aber tatsächlich systemweit bereits eine Docker-Python-Bibliothek laufen, sollten Sie die Pip-Flag „break-system-packages“ besser Ernst nehmen.
Flüchtige Container
Es bleibt ein großes Problem: Häufig werden Container als Cloud-Instanzen verwendet, automatisch generiert, verschoben, geklont, gelöscht – sie sind flüchtig. Nun können Sie freilich Mitarbeiter damit beauftragen, den lieben langen Tag Hosts zu erstellen und löschen. Ganz praktikabel ist das aber nicht.
Für eine solche Infrastruktur lohnt sich dann doch der Griff zur kommerziellen Version: Hier kann Checkmk all diese Hosts vollautomatisch erstellen und bei Bedarf auch wieder löschen. So ist die gesamte Container-Flotte immer auf dem neuesten Stand. Nun, auch Verteilung/Installation/Konfiguration von Agent und Plugins wird einfacher, aber das ist in der Open-Source-Version auch kein Hexenwerk.