Tracing-Tool Jaeger: Debugging für Kubernetes-Umgebungen

Per "Durchklingeln" prüft man Datenleitungen – Jaeger leistet Vergleichbares für virtuelle Kubernetes-Umgebungen und erleichtert so die Fehlersuche.

Artikel verschenken
In Pocket speichern vorlesen Druckansicht
Abläufe in virtuellen Umgebungen nachvollziehen
Lesezeit: 21 Min.
Von
  • Martin Gerhard Loschwitz
Inhaltsverzeichnis

Der Dschungel aus Geräten, Protokollen, herstellerspezifischen Features und Konfigurationsdateien lässt nicht nur ungeübte Admins schnell den Überblick verlieren. Das gilt auf dem Netzwerk-Layer 2 ebenso wie eine Etage höher: Kommen noch TCP/IP, BGP und Co. hinzu, macht das die Situation kaum leichter. Da freuen sich Admins und die Entwickler von Anwendungen zunächst, wenn sie sich des Themas in einer virtuellen Umgebung wie einer Cloud oder Kubernetes entledigen können. Doch oft währt die Freude nicht lange: Nur weil man es bei OpenStack, Kubernetes, TCP/IP oder BGP mit virtuellen Netzen zu tun hat, verschwindet die Komplexität auf der Netzwerkebene nicht wie von Geisterhand.

Und es kommt noch schlimmer: Im Fahrwasser der Cloud haben sich schließlich die Microservice-Apps breitgemacht. Die folgen einem simplen Prinzip: Statt eines großen Monolithen bauen Entwickler etliche Kleinstkomponenten. Jede davon erledigt nur eine einzelne Aufgabe. Dabei kommunizieren die zu einer logischen Applikation gehörenden Komponenten permanent miteinander. Erst aus ihrem Zusammenspiel entstehen letztlich die Funktionen, die die Applikation selbst ausmachen.

Damit ergibt sich eine komplett neue Teilaufgabe für die Autoren dieser Apps – und für die Admins, die sie betreiben sollen: Der Austausch von Daten zwischen einzelnen Teilen desselben Programms fand bisher schließlich unter der Haube statt, weitgehend unbemerkt von Nutzern und Admins. Nun aber zeigt sich plötzlich die Notwendigkeit, ein komplexes, umfassendes Netz aus Kommunikationspfaden zu bauen und zu nutzen. Das erhöht die Unübersichtlichkeit des Themas Netzwerk nochmals beträchtlich. Und mehr noch: Innerhalb einer Microservices-Applikation löst ein Fehler in Komponente A möglicherweise den Absturz von Komponente B aus. Die läuft aber eventuell in einem anderen Container auf einem anderen Host. Auch Debugging-Hilfen wie Stack-Traces und In-Memory-Untersuchungen nützen in solchen Szenarien viel weniger als in klassischen Monolithen.