Leitfaden zur Überwachung von Container-Umgebungen

Der Einsatz von Containern hat in den vergangenen Jahren stark an Popularität gewonnen. Schließlich bieten in Containern betriebene Anwendungen zahlreiche Vorteile wie Ressourceneffizienz, Portabilität und bieten Entwickler- und DevOps-Teams so die Möglichkeit, Anwendungen schneller und sicherer zu entwickeln, zu verwalten und bereitzustellen.

Ein Container-Monitoring kann zudem zur Gewährleistung der Zuverlässigkeit, Sicherheit und Leistung von containerisierten Anwendungen beitragen, da besonders der Einsatz von hochgradig verteilten Container-Umgebungen neue Herausforderungen bezüglich der Leistungsüberwachung und Fehlerbehebung mit sich bringt. Die Überwachung der Container kann hier die erforderliche Transparenz bieten und somit dabei helfen, die Vorteile von Container-Umgebungen voll auszuschöpfen.

Checkmk Dashboard zum Monitoring eines Clusters

Was ist Container-Überwachung?

Container-Monitoring umfasst sowohl die Überwachung der Container selbst als auch die der Nodes, auf denen Container laufen. Sie erlaubt es, Metriken bezüglich der Leistung und des Gesundheitszustands von containerisierten Anwendungen zu verfolgen. Die Erkenntnisse aus dem Monitoring können zudem als Grundlage für eine effiziente Skalierung der Container-Umgebung dienen.

Zu den typischen Metriken, die man mit Container-Überwachungstools überprüft, sind unter anderem die Gesamtzahl der Container, die Containerspeicher- und CPU-Auslastung. Dabei können Monitoring-Lösungen, die etwa über eine automatische Service-Erkennung verfügen und Container automatisch zum Monitoring hinzufügen oder wieder löschen können, die Überwachung deutlich vereinfachen. 

Leistungsstarke All-in-One-Überwachungslösungen wie Checkmk liefern alle erforderlichen Erkenntnisse, die einen optimalen Betrieb von statischen und dynamischen IT-Stacks ermöglichen. 

Wer überwacht Container?

Die Dichte von containerisierten Anwendungen und Laufzeiten nimmt immer weiter zu. Sowohl kleine als auch große Unternehmen nutzen Container-Umgebungen im Zuge ihrer Strategien für die Bereitstellung von DevOps-Anwendungen.

Docker ist derzeit die beliebteste Plattform für die Erstellung, Bereitstellung und Verwaltung von Containern. Mehr als 13 Millionen Entwickler nutzen Docker für mehr als 7 Millionen Anwendungen.
Und Kubernetes hat sich schnell zur beliebtesten Plattform für die Verwaltung von containerisierten Workloads und Diensten entwickelt. Bis zum Jahr 2021 haben über 50 Prozent der Unternehmen weltweit Kubernetes eingeführt.

Um einen reibungslosen Betrieb der Container-Umgebung zu gewährleisten, sollten Unternehmen, die Container einsetzen, diese auch überwachen. 
 

Gründe für die Überwachung von Containern

Mit der Container-Überwachung lässt sich die Performance von Container-Umgebungen verfolgen. Mit den durch eine Container-Monitoring-Lösung gelieferten Informationen lassen sich beispielsweise Engpässe und Ressourcenprobleme identifizieren, feststellen, ob Container unter- oder überdimensioniert sind, Probleme und Fehler in Anwendungen frühzeitig erkennen oder sicherstellen, ob die dynamische Skalierung eines Orchestrierungstools ordnungsgemäß funktioniert und die Lasten gleichmäßig auf die Container verteilt ist.

Das Monitoring von Containern sollte zudem immer Teil eines umfassenden Überwachungssystems sein, das einen Überblick über die gesamte IT-Infrastruktur verschafft. Dies ermöglicht es Unternehmen, ein besseres Verständnis über ihre IT zu erhalten und die Leistung von Containern mit der Performance anderer IT-Services zu verknüpfen. Die Überwachung von Containern hilft also nicht nur bei der Bewältigung bestehender und potenzieller Probleme, sondern auch bei der kontinuierlichen Optimierung der Bereitstellung. Dies führt zu einer besseren Performance und Uptime von Applikationen und somit zu einer verbesserten Nutzbarkeit für Anwender:innen.

Herausforderungen beim Container-Monitoring

Die Vorteile für den Betrieb von Containern liegen auf der Hand. Gleichzeitig erfordert das natürliche Verhalten von Containern einen anderen Monitoring-Ansatz als es bei physischer Hardware der Fall ist. Zwar ist das Abrufen der Daten, des Überwachungsstatus und das Setzen von Schwellwerten für beide Deployments gleich, das war es aber auch. Container sind temporär und können eine Lebensdauer von lediglich wenigen Sekunden haben, was das Monitoring von Änderungen erschwert. Container teilen sich zudem Ressourcen, was es wiederum schwierig macht, Rückschlüsse auf den Zustand einer Anwendung und der Container-Performance zu erhalten. 

Die größten Herausforderungen bei der Überwachung von Containern sind:

  • Tracking von Containern über den gesamten Lebenszyklus hinweg.
  • Anpassung des Monitorings an die wachsende Größe der Container-Umgebung.
  • Überprüfung der Ressourcennutzung von einzelnen Container sowie geteilter Ressourcen wie Storage.
  • Festlegung von sinnvollen Schwellwerten für die Alarmierung bei Problemen.

Um diese Herausforderungen zu meistern, erfordert das Container-Monitoring Lösungen, die unter anderem folgende Funktionen haben:

  • Automatische Erkennung, um neue Container zu entdecken und sie der Überwachung hinzuzufügen.
  • Automatische Inventarisierung aller Hardware- und Softwareaspekte von Knoten und Containern.
  • Einfache Skalierbarkeit des Monitorings.
  • Erfassung von Performance-Metriken wie CPU-Auslastung, Memory oder Netzwerkübertragungsraten der einzelnen Container.
  • Visuelle Darstellung von Metriken für eine einfachere Problemerkennung.
  • Unterstützung von Orchestrierungstools wie Kubernetes oder Docker Swarm oder Cloud-Plattformen, auf denen Container gehostet werden.
Screenshot eines Dashboards für das Monitoring eines EKS-Clusters

Wie funktioniert die Überwachung von Containern?

Es gibt zwei Methoden für die Überwachung von Containern. Es ist einerseits möglich, über die Befehlszeile von Orchestrierungsplattformen wie Docker oder Kubernetes auf Logs und Informationen zu den Containern zuzugreifen. So erhält man einen grundlegenden Überblick und kann mittels der Logs mögliche Fehlerursachen analysieren. Der große Nachteil es jedoch, dass die manuelle Überwachung ineffizient und zeitaufwändig ist und man schnell den Überblick verliert. Darüber hinaus beinhaltet diese Methode keine Alarmierung bei Problemen.

Bei der zweiten Variante handelt es sich andererseits um den Einsatz einer Monitoring-Lösung, die speziell für die Überwachung von Containern konzipiert ist und neben allen erforderlichen Einblicken in den Ressourcenverbrauch von Containern auch Funktionen wie historische Datenanalysen, Datenvisualisierung und Alarmierung bietet. 

Wie lassen sich Docker-Container überwachen

Für die Überwachung von Containern eignen sich etwa folgende Befehle auf der Kommandozeile von Docker:
Der Befehl docker stats [OPTIONS] [CONTAINER...] zeigt Echtzeit-Ressourcennutzungsstatistiken für alle laufenden Container an und bietet einen Einblick in CPU-, Speichernutzung, Speicherlimit und Netzwerk-IO-Metriken. Gibt man eine Liste von Container-Namen oder IDs an, die durch ein Leerzeichen getrennt sind, erhält man die Statustiken für die gewünschten Container. 

  • Der Befehl​​​​​​​ docker ps [OPTIONS] zeigt die Liste der laufenden Container an. Der Befehl​​​​​​​ -all zeigt alle Container an. 
  • Mit dem Befehl​​​ docker top CONTAINER [ps OPTIONS] lassen sich die Prozesse eines bestimmten Containers anzeigen.

Alternativ lassen sich Docker-Container auch mit einer Monitoring-Lösung überwachen. Vorteile einer Container-Monitoring-Software sind unter anderem: 

  • Detaillierte Informationen über die Performance und den Ressourcenverbrauch von Docker-Nodes und Containern. Etwa zur CPU-Auslastung, Arbeitsspeichernutzung und Disk-I/O.
  • Visualisierung der wichtigsten Metriken in Dashboards.
  • Kontextinformationen für eine effektive Ursachenanalyse und zur Lösung komplexer Probleme.
  • Speicherung historischer Daten zur Analyse von Entwicklungen oder Änderungen in der Docker-Topologie.
  • Alarmierung über kritische Ereignisse oder Anomalien in der Container-Umgebung.

Checkmk nutzt beispielsweise einen Agenten, um detaillierte Informationen des Docker-Nodes sowie der einzelnen Container zu erhalten. 

Wie lassen sich Kubernetes-Container überwachen

Kubernetes bietet die Möglichkeit, Container über den Metrics-Server zu überwachen. Dieser ermöglicht es, eine Reihe begrenzter Metriken wie CPU- und Memory-Nutzung über die Kubernetes-Metrics-API abzurufen. Mit Kubernetes Dashboard bietet die Container-Plattform zudem eine webbasierte Benutzeroberfläche, die nach der Implementierung eine bequeme Möglichkeit zur Verwaltung und Überwachung der containerisierten Anwendungen in einem Kubernetes-Cluster bietet.

Es ermöglicht Benutzern die Bereitstellung und Fehlerbehebung von Anwendungen und die Verwaltung von Cluster-Ressourcen. Kubernetes Dashboard bietet einen Überblick über alle laufenden Anwendungen im Cluster und ermöglicht es, Kubernetes-Ressourcen wie Deployments, Jobs und DaemonSets zu erstellen und zu ändern. Darüber hinaus erlaubt Kubernetes Dashboard Aktionen wie die Skalierung eines Deployments, die Initiierung eines Rolling Updates, den Neustart eines Pods oder die Bereitstellung neuer Anwendungen. Es liefert zudem Einblicke über die Ressourcen eines Clusters und aufgetretene Fehler.

Kubernetes Dashboard speichert zudem historische Daten, wenn auch was Menge und Umfang angeht in einem begrenzten Rahmen als beispielsweise eine Monitoring-Lösung wie Checkmk. Eine spezielle Kubernetes-Monitoring-Software wie Checkmk kann umfassendere Überwachungsfunktionen bieten.

Checkmk ruft grundlegende Informationen des Clusters über den API-Server ab. Für ein vollumfängliches Bild sorgen der Checkmk Node Collectoer sowie der Checkmk Cluster Collector, der etwa Informationen darüber liefert, wie viel Arbeitsspeicher ein DaemonSet gerade in Anspruch nimmt.

Checkmk überwacht die Cluster, Nodes, Deployments, Pods, DaemonSets und StatefulSets einer Kubernetes-Umgebung und liefert wichtige Metriken wie CPU, Arbeitsspeicher, Dateisysteme, Festplatten-I/O, Kernel-Leistung und Threads. Das Kubernetes-Monitoring mit Checkmk bietet zudem intelligentes Alerting und zahlreiche Kontextinformationen zur Fehlerbehebung. 

Critical alerts of a Kubernetes cluster in Checkmk including details

Welche Funktionen eines Container-Überwachungssystems sind wichtig?

Bei der Evaluierung einer Container-Monitoring-Lösung gibt es folgende Aspekte, die man berücksichtigen sollte: 

  • Echtzeit-Monitoring aller wichtigen Metriken in der Container-Umgebung zur sofortigen Erkennung problematischer Zustände der vorhandenen Anwendungen oder Identifizierung von CPU- oder Arbeitsspeicherengpässen, Instabilitäten oder starker Verbraucher.
  • Unterstützung des Monitorings sämtlicher Bestandteile der eingesetzten Container-Plattform, wie beispielsweise Cluster, Nodes, Deployments, Pods, DaemonSets und StatefulSet bei Kubernetes.
  • Präzises Alerting bei wahren Problemen inklusive präziser Informationen zu den Ursachen.
  • Visualisierung von Daten, zur einfacheren Analyse von dynamischen Zusammenhängen. 

Fazit

Der weit verbreitete Einsatz und das Wachstum von Containern ist ein Beweis für deren Vorteile für Entwickler-Teams, Unternehmen und Benutzer:innen. Das Monitoring spielt hierbei eine kritische Rolle um die Verfügbarkeit, Leistung und Sicherheit von containerisierten Workloads zu gewährleisten.

Dabei kommt es darauf an, eine Monitoring-Lösung wie Checkmk einzusetzen, das die speziellen Anforderungen von Container-Anwendungen bewältigen kann.

FAQ

Was sind Docker-Container-Logs?

Docker erzeugt automatisch Ausgabe- und Fehlermeldungen für Container. Docker-Container-Logs fassen diese Meldungen zusammen. Sie können Docker-Container-Logs analysieren, um die Leistung und die Gesundheit Zustand von Containern zu überprüfen.

Was ist Container-Ressourcen-Monitoring?

Die Überwachung von Container-Ressourcen bezieht sich auf das Monitoring von Host-Ressourcen (CPU, Arbeitsspeicher, Netzwerk, Speicher usw.), die ein Container während seiner Lebensdauer verwendet. Sie können die Ressourcennutzung einzelner Container und die Gesamtressourcennutzung aller auf einem Node laufenden Container überwachen. Der Vorteil der Container-Ressourcenüberwachung besteht darin, dass Sie proaktiv handeln können. Anstatt auf die Nichtverfügbarkeit von Ressourcen zu reagieren, die zu einer Leistungsverschlechterung führt, können Sie rechtzeitig Ressourcen hinzufügen oder freigeben, sodass die Leistung Ihrer Container und Anwendungen nicht beeinträchtigt wird.

Was bedeutet es, wenn wir sagen, dass Container von Natur aus "ephemer" sind?

Die "ephemere" Natur von Containern bezieht sich auf die Tatsache, dass die Bereitstellung und Zerstörung eines Containers ein schneller Prozess ist. Nach dem Start bleibt ein Container so lange wie nötig bestehen und wird dann von der Container-Orchestrierung zerstört.