Jump to section

Was ist Jaeger?

URL kopieren

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.

Mit Distributed Tracing lässt sich eine ganze Kette an Ereignissen in komplexen Interaktionen zwischen Microservices anzeigen und analysieren.

Die moderne cloudnative Softwareentwicklung basiert auf Microservices, also auf unabhängigen Services, die jeweils verschiedene Kernfunktionen innehaben. Wenn eine Nutzerin oder ein Nutzer eine Anfrage über eine App 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 Entwicklungs- und Engineering-Teams 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 Root Cause Analysis (RCA, Methode zur Problembehebung) durchführen.

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 sammelt, speichert und visualisiert sogenannte „Traces“ (zu Deutsch: Spuren) von verteilten Systemen und bietet Erkenntnisse dahingehend, wie Anfragen ein System durchlaufen, wo Zeit verbracht wird und wo Fehler auftreten.

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. Ein Span ist eine logische Arbeitseinheit in Jaeger, beispielsweise eine Datenbankabfrage oder HTTP-Anfrage. Jeder Span enthält den Namen der Operation sowie Startzeit und Dauer. Spans können verschachtelt und sortiert werden.

Der Prozess bei Jaeger

Jaeger verfolgt die Ausführung einer Operation in einem verteilten System und ordnet bestimmte Routinen mehreren Komponenten von Jaeger zu. 

Das OpenTelemetry-SDK kann in praktisch jeder Programmiersprache verwendet und dann in ein Format exportiert werden, das Jaeger oder eine andere Tracing-Plattform versteht.

Sobald Jaeger ausgeführt wird, folgt es diesem Prozess:

  1. Das Tracing beginnt bei Jaeger mit der Instrumentierung einer Anwendung. Bei der Instrumentierung wird der Code einer Anwendung zur Erzeugung von Traces modifiziert. Die Instrumentierung kann manuell mithilfe von Jaeger Client Libraries erfolgen, die für verschiedene Programmiersprachen verfügbar sind, oder automatisch mithilfe von Middleware und Frameworks, die OpenTracing- oder OpenTelemetry-APIs unterstützen.
  2. Wenn die Anwendung ausgeführt wird, stellen die Traces einen detaillierten Ausführungspfad einer Operation in verschiedenen Microservices bereit. Die einzelnen Traces bestehen aus mehreren Spans. Die Spans wiederum enthalten Informationen wie den Operationsnamen, die Start- und Endzeit sowie Tags aus Schlüssel-Wert-Paaren, die zusätzlichen Kontext bereitstellen (z. B. HTTP-Statuscodes, Fehlermeldungen).
  3. Um Spans zu einem einzigen Trace zu verknüpfen, übergibt Jaeger IDs und anderen Trace-Kontext zwischen Services als Teil von Anfragen und Antworten. Dies wird als Kontextpropagierung bezeichnet. Die einzelnen Spans und Traces verfügen jeweils über eine eindeutige ID, anhand der einzelne Komponenten der Entwicklung einer Anfrage zusammengesetzt werden können.
  4. Spans werden mithilfe von Jaeger Client Libraries gesammelt und an den Jaeger Agent gesendet, der normalerweise zusammen mit der Anwendung oder als Daemonset in Umgebungen wie Kubernetes bereitgestellt wird.
  5. Der Jaeger Collector empfängt die Spans vom Jaeger Agent und speichert sie in einer Backend-Datenbank. Jaeger unterstützt mehrere Storage-Optionen wie Elasticsearch, Cassandra oder Google Cloud Bigtable und ermöglicht so Skalierbarkeit und Flexibilität bei der Verwaltung von Trace-Daten.
  6. Der Service Jaeger Query bietet Nutzenden eine Benutzeroberfläche zum Suchen und Visualisieren von Traces. Mit der Jaeger-UI können Entwicklungs- und Operations-Teams die Details einzelner Traces untersuchen, die Span-Hierarchie und -Timings visualisieren sowie Systemverhalten und -Performance analysieren.
  7. Jaeger Console ist eine Benutzeroberfläche, mit der Sie Ihre Distributed Tracing-Daten visualisieren können, um Erkenntnisse zu Latenzproblemen, Fehleranalysen, Abhängigkeitsanalysen und Performance-Optimierung zu gewinnen.

Jaeger bietet Erkenntnisse in Bezug auf das Verhalten von Microservices und Anfragen über ein verteiltes System. Dabei bietet es folgende Vorteile:

  1. Performance-Optimierung: Jaeger kann lokalisieren, wo innerhalb einer Reihe von Microservices Verzögerungen auftreten, visualisieren, wie Services interagieren und voneinander abhängig sind, und die Ressourcenzuteilung optimieren.
  2. Ursachenanalyse (Root Cause Analysis): Jaeger-Traces verfolgen einen Serviceausfall oder ein unerwartetes Ergebnis bis zu seinem Ursprung zurück, um eine schnelle Lösung zu ermöglichen. Darüber hinaus kann Jaeger in Überwachungssysteme integriert werden, sodass Teams Alerts erhalten, wenn ungewöhnliche Muster auftreten, wie z. B. Spitzen bei Latenzzeiten oder Fehlerraten.
  3. Sicherheit und Compliance: Da Traces anzeigen, wie Daten ein System durchlaufen, können sie als eine Art Audit-Trail dienen, der für die Einhaltung gesetzlicher Anforderungen hinsichtlich der Handhabung und Verarbeitung von Daten von entscheidender Bedeutung ist.
  4. Entwicklung und Tests: Entwicklerinnen und Entwickler können Jaeger-Tracing in lokalen Umgebungen durchführen und so Fehler, Latenz- und Abhängigkeitsprobleme erkennen, bevor sie eine Anwendung bereitstellen. 

Red Hat® OpenShift® Observability bietet umfassende Observability-Funktionen, die tiefe Einblicke in die Performance und den Zustand von OpenShift-basierten Anwendungen und Infrastrukturen ermöglichen. Eine Funktion des Observability Stacks von Red Hat ist das Distributed Tracing, das bis 2024 auch Jaeger umfasste. Anfang 2024 hat Red Hat Jaeger und Elasticsearch durch den Tempo-Operator und die Red Hat Version von OpenTelemetry ersetzt.

Der Red Hat Build von OpenTelemetry kann zum Sammeln von Traces in vielen Formaten verwendet werden, nicht nur von Jaeger-Clients, sondern auch von Zipkin und OpenTelemetry Protocol (OTLP). Das ist erst der Anfang, denn mit diesem Kollektor können Sie Ihre Observability-Signale auf umfassende Weise sammeln. Die neuesten Releases von Red Hat für Distributed Tracing umfassen zahlreiche Verbesserungen. Zusätzlich zur Implementierung der automatischen Generierung von Metriken aus Spans wird das Erstellen von Alerts basierend auf diesen Metriken ermöglicht. Um die Integration des Prometheus-Stacks zu unterstützen, haben wir unserem Build die Komponente „Target Allocator“ hinzugefügt, mit der Kunden Prometheus-Endpunkte mühelos und effizient verwalten und skalieren können.

Tempo dient als Ersatz für die Storage- und Visualisierungsfunktionen für Distributed Tracing, die das Jaeger-Produkt bietet. Es erleichtert einfache lokale Deployments zum Experimentieren mit Distributed Tracing oder zur schnellen Fehlerbehebung bei Deployments, die keinen umfangreichen Tracing Storage erfordern, sowie bei großen Deployments. Tempo enthält weiterhin die Jaeger-Benutzeroberfläche und sorgt so für eine reibungslose Visualisierung von Traces.

Mehr über die Komponenten und Funktionen von OpenShift erfahren →

Weiterlesen

ARTIKEL

Wie Microservices die IT-Integration im Gesundheitswesen unterstützen

Microservices unterstützen Entwickler im Gesundheitswesen und anderen Branchen bei der Erstellung von Anwendungen aus lose gekoppelten Services, wodurch Entwicklung, Test, Bereitstellung und Upgrade vereinfacht werden.

ARTIKEL

Was sind Microservices?

Microservices sind ein Architekturkonzept der Anwendungsentwicklung, bei dem Teile einer App unabhängig voneinander und gleichzeitig zusammen fungieren.

ARTIKEL

Was ist ein Service Mesh?

Ein Service Mesh ist eine in eine Anwendung integrierte Infrastrukturschicht, mit der Interaktionen zwischen Services dokumentiert werden, um die Kommunikation zu optimieren und Ausfallzeiten zu vermeiden.