Überblick
Jaeger ist eine Open Source-Software, mit der Transaktionen zwischen verteilten Services verfolgt werden können. Jaeger wird zur Überwachung und Fehlerbehebung in komplexen Microservice-Umgebungen eingesetzt.
Was versteht man unter Distributed Tracing?
Mit Distributed Tracing lässt sich eine ganze Kette an Ereignissen in komplexen Interaktionen zwischen Microservices anzeigen und analysieren.
Die moderne cloudnative Softwareentwicklung setzt auf Microservices, also auf unabhängige Services, die jeweils verschiedene Kernfunktionen liefern. Wenn ein Nutzer über eine App eine Anfrage sendet, antworten viele Einzelservices, um das Ergebnis zu liefern.
Durch einen einzelnen Aufruf innerhalb einer App können Dutzende von Services aufgerufen werden, die miteinander interagieren. Wie können Entwickler und IT-Experten ein Problem isolieren, wenn etwas nicht wie geplant funktioniert oder eine Anfrage zu langsam ausgeführt wird? Dazu ist eine Überwachung aller Verbindungen notwendig.
Und genau das ist die Funktion von Distributed Tracing. Diese „verteilte Verfolgung" wird häufig im Rahmen eines Service Mesh ausgeführt, mit dem Microservices verwaltet und beobachtet werden.
Jaeger nutzt Distributed Tracing, um den Weg einer Anfrage durch die verschiedenen Microservices zu verfolgen. Dabei wird der gesamte Prozessfluss visualisiert.
Organisierte Informationen zu Transaktionen können für ein Debugging und optimierte Prozesse sehr nützlich sein. Jaeger umfasst außerdem Tools, die verteilte Transaktionen überwachen, die Performance und Latenzzeiten optimieren und eine RCA (Root Cause Analysis) durchführen.
Die Open Source Community von Jaeger
Als Open Source-Projekt profitiert auch Jaeger von einer Community, in der Hunderte von Programmiererinnen und Programmierern ihre Beiträge leisten. Jaeger basiert auf OpenTracing-APIs und -Instrumentierung, die anbieterneutral sind.
Das Personenbeförderungsunternehmen Uber hat Jaeger im Jahr 2015 als Open Source-Projekt entwickelt. 2017 wurde es dann als Cloud Native Computing Foundation (CNCF) Inkubationsprojekt angenommen, und 2019 erhielt es Graduiertenstatus.
Jaeger-Terminologie und -Komponenten
Jaeger stellt Ausführungsanfragen als Traces dar. Mit den Traces wird der Daten-/Ausführungspfad in einem System angezeigt.
Traces bestehen aus einem oder mehreren Spans. Spans sind die logischen Arbeitseinheiten von Jaeger. Jeder Span enthält den Namen der Operation sowie Startzeit und Dauer. Spans können verschachtelt und sortiert werden.
Jaeger enthält mehrere Komponenten, die zusammenarbeiten, um Spans und Traces zu erfassen, zu speichern und zu visualisieren.
Jaeger Client: enthält sprachspezifische Implementierungen der OpenTracing API für Distributed Tracing. Diese können manuell oder mit einer Vielfalt an Open Source Frameworks verwendet werden.
Jaeger Agent: ein Netzwerk-Daemon, der per User Datagram Protocol gesendete Spans erfasst. Der Agent muss auf dem gleichen Host installiert sein wie die instrumentierte Anwendung. Dies erfolgt üblicherweise per Sidecar in Container-Umgebungen wie Kubernetes.
Jaeger Collector: empfängt Spans und platziert sie in einer Bearbeitungswarteschlange.
Kollektoren erfordern am Backend persistenten Storage, weshalb Jaeger auch einen plugin-fähigen Mechanismus für Span Storage enthält.
Query: ein Service, mit dem Traces aus dem Storage abgerufen werden.
Jaeger Console: eine Benutzeroberfläche, mit der Sie Ihre Distributed Tracing-Daten anzeigen können.
Jaeger und Red Hat
Jaeger wird standardmäßig im Rahmen des Red Hat® OpenShift® Service Mesh installiert, das eine Implementierung des Open Source Service Mesh Istio umfasst.
Diese Distributed Tracing-Implementierung bietet eine Reihe von Vorteilen. Jaeger lässt sich mit Kiali integrieren, einer Beobachtungskonsole für Istio. Das Jaeger Backend wurde für hohe Skalierbarkeit ohne Single Points of Failure konzipiert. Mit Jaeger lassen sich Daten von unterschiedlichen Komponenten zu einem kompletten End-to-End-Trace verknüpfen. Dazu bietet die Lösung Abwärtskompatibilität mit Zipkin.