Container Monitoring für bessere Leistung und schnellere Deployments

Die Containerisierungstechnologie hat einen drastischen Aufschwung erlebt, seit Docker aus der Taufe gehoben wurde. Als Kubernetes und andere Orchestrierungstools folgten, wurde sie zur State-of-the-Art Technologie.

Natürlich sahen sich viele Unternehmen gezwungen, die Containerisierungstechnologie zu übernehmen. Einige von ihnen waren jedoch nicht darauf vorbereitet, dass das Deployment von containerisierten Anwendungen zwar mit einem Klick erledigt werden kann, einen aber nicht völlig entspannen lässt. 

Wir möchten einige der häufigsten Probleme und deren Bewältigung skizzieren.

Ursprung der Probleme

In den meisten Fällen verwenden Sie die Containerisierungstechnologie mit Kubernetes-Clustern zusammen. Diese Cluster erstrecken sich über mehrere Maschinen innerhalb eines Rechenzentrums oder sogar über mehrere Rechenzentren. Das bedeutet, dass verschiedene Container auf verschiedenen Maschinen, also Hosts, laufen. 

Diese Tatsache schafft einen zusätzlichen Layer in Ihrer IT-Infrastruktur und erhöht deren Komplexität. Orchestrierungstools erleichtern den Entwicklern die Bereitstellung von Containern, aber im Hintergrund vergrößern sie das Chaos. 

Orchestrierungstools weisen Container den Hosts auf der Grundlage der verfügbaren Ressourcen zu. Sie verteilen Container zwischen den Hosts, je nach deren aktueller Kapazität. Es gibt aber keine Karte, keinen Zeitplan oder irgendeine Verbindung zwischen Containern und ihren Hosts.

Wenn eine containerisierte Anwendung in der Produktion läuft und Anzeichen von Problemen aufweist, werden Sie mit zwei wichtigen Fragen konfrontiert:

  • Wie identifiziert man den Container, der Probleme macht?
  • Wie kann man den Host ausfindig machen, auf dem er läuft?

Solche Probleme können zu Ausfallzeiten führen, wenn eine Anwendung komplett nicht ausgeführt werden kann, oder zu Leistungslücken, wenn ein Container die allgemeine Leistung verlangsamt. 

Wenn Sie den Störenfried manuell suchen müssen, kann dies für Ihre Kunden oder andere Endbenutzer der Anwendung, die darauf warten müssen, dass die Anwendung wieder funktioniert, etwas enttäuschend sein.

Um das Problem der Zuweisung von Containern und deren Leistungsproblemen zu lösen, können Sie eine Containerüberwachung einrichten. Sie inkludiert folgende Bestandteile.

Verwaltung der Ressourcen 

Häufig möchte man die Ressourcennutzung durch Docker-Container begrenzen. Dies kann zu Situationen führen, in denen Container Schwierigkeiten bei der Ressourcenzuweisung haben und gleichzeitig einige Hosts nicht ausgelastet sind. 

In diesem Zusammenhang möchten wir zwei wichtige Docker-Metriken erwähnen:

  • Speicherausfallzähler (memory fail counter);
  • gedrosselte CPU-Zeit (throttled CPU time).

Verschiedene Anbieter von Docker-Überwachungstools ermöglichen es Ihnen, kritische Probleme vorzusehen. Sie erfassen und visualisieren einheitliche Metriken, die alle ihren Ursprung in Docker haben. Wir beschreiben kurz, was die beiden oben genannten Metriken bedeuten, um Ihnen ein Gefühl dafür zu vermitteln, warum die Überwachung von Containern wichtig sein kann.

Container Memory Fail Counters

Bei dieser Metrik geht es um die Speicherbegrenzung von Containern. Jeder Container versucht, so viel Speicher zu bekommen, wie zu einem bestimmten Zeitpunkt verfügbar ist. Die Container kämpfen buchstäblich um den Speicher und der Gewinner kennt keine Gnade: Die Verlierer bekommen keinen Speicher und können nicht starten. Um dies zu vermeiden, setzen Sie eine Obergrenze für die Speichernutzung, damit jeder Container zumindest ein wenig Speicher nutzen kann, auch wenn dies für einige von ihnen nicht ausreichen würde.

Wenn das Speicherlimit erreicht ist, ein Container aber mehr benötigt und deshalb ausfällt, wird dies als Memory Fail Counter angezeigt.

Gedrosselte CPU-Zeit

Sie können nicht nur die Speichernutzung begrenzen, sondern auch den CPU-Verbrauch bzw. den CPU-Anteil pro Container. Und genau wie im vorherigen Fall besteht die Gefahr, dass einige Container nicht genug CPU zur Verfügung haben.

Im Gegensatz zu den Zählern für Speicherausfälle, die als Gesamtsumme solcher Ausfälle zu jedem Zeitpunkt angezeigt werden, wird diese Metrik als Dauer des Ausfalls gemessen.

Von der Überwachung zur Fehlerbehebung 

Wie hilft es Ihnen zu wissen, was und wie lange etwas ausfällt? Die Antwort ist, dass Sie die von Ihnen festgelegten Grenzwerte im Auge behalten und diese neu anpassen können, wenn sie für Sie nicht richtig funktionieren: wenn die CPU zu lange gedrosselt wird oder die Anzahl der Speicherfehler sprunghaft ansteigt.

Ziel ist es nicht, die Grenzwerte grob zu erhöhen, da dies nur wieder zu dem alten Problem führt: einige Container verhungern, während andere den vollen Speicher und volle CPU-Auslastung genießen.

Das Ziel ist es, die Protokolle ständig zu analysieren und die wichtigsten Metriken zu beobachten, um ein Gleichgewicht zu finden. Die Suche nach einem solchen Kompromiss ist nicht auf eine einmalige Analyse beschränkt. Die Grenzwerte müssen, dynamisch auf der Grundlage von Live-Daten, neu angepasst werden. 

Wenn es so einfach wäre, bräuchte man nur die Docker-Protokolle zu sammeln. Aber diese Art der Überwachung muss in Echtzeit erfolgen und die Ergebnisse müssen leicht zu erfassen sein. Deshalb ist es besser, Überwachungstools wie NewRelic oder Datadog zu verwenden. NewRelic verfügt über eine grafische Benutzeroberfläche mit verschiedenen Zeitreihendiagrammen. Mit Datadog können Sie Log-Daten in Prometheus, eine Zeitserien-Datenbank, einspeisen und dann in Grafana visualisieren. 

Mit einem dieser Tools können Sie die Trends besser erfassen und Ausfallspitzen vorhersehen, indem Sie die Grenzwerte rechtzeitig ändern.

Fazit

Das Schwierige an containerisierten Anwendungen ist, dass man die Ressourcen verwalten muss, auch wenn man Orchestrierungstools verwendet. Das Gute daran ist, dass Docker zuverlässige Protokollmetriken liefert und dass Sie zwischen einer Vielzahl von Überwachungstools wählen können, die diese Verwaltung erleichtern.

Benötigen Sie eine Person, die sich mit Docker, Containern, Deployments und Kubernetes auskennt? Kontaktieren Sie JCFINCH. Wir haben sicher einen geeigneten Kandidaten in unserer Datenbank.