Was ist Jaeger?

Jaeger ist eine Software, mit der Sie Probleme in miteinander verbundenen Softwarekomponenten, den sogenannten Microservices, überwachen und beheben können. Verschiedene Microservices kommunizieren miteinander, um eine einzelne Softwarefunktion auszuführen. Entwickler benutzen Jaeger, um die Kette von Ereignissen in den Interaktionen der Microservices zu visualisieren und so das Problem zu isolieren, wenn etwas schief läuft. Jaeger wird auch Jaeger Tracing genannt, weil es dem Pfad einer Anforderung durch eine Serie von Microservice-Interaktionen folgt bzw. ihn nachverfolgt.   

Warum ist Jaeger wichtig?

In der Vergangenheit das war Softwaredesign monolithisch. Verschiedene Funktionen wurden in einer einzigen Codebasis zusammengefasst. Bei der Entwicklung einer App für Essensbestellungen wurden zum Beispiel die Speisekarte, die Restaurants und die Bezahlsysteme in einer einzigen Softwareeinheit gebündelt. Diese Art von Softwaredesign machte Lösungen komplexer und die Wartung schwierig. Wenn Entwickler Codeänderungen in einem Bereich vornahmen, wirkte sich dies auf das gesamte System aus, was die Änderungsverwaltung zu einem langwierigen und mühsamen Vorgang machte. Um dieses Problem zu lösen, wurde die Architektur zunehmend modular aufgebaut.

Microservices

Moderne Anwendungen funktionieren als eine Sammlung kleinerer unabhängiger Einheiten, die als Microservices bezeichnet werden. Eine moderne App zur Lebensmittelbestellung könnte zum Beispiel aus diesen Teilen bestehen:

  • Ein Geolocation-Service, der feststellt, wo sich der Kunde befindet 
  • Ein Service der Bestellungen sammelt und sie an die Restaurants schickt  
  • Ein Zahlungs-Gateway mit verschiedenen Zahlungsoptionen

 

Jeder Microservice funktioniert als unabhängige Anwendung und hat Zugriff auf seine eigene Datenbank und Logik. Microservices kommunizieren wie eine Webanwendung über Anforderungen und Antworten miteinander. Ein Microservices-Basissystem wird auch als verteiltes System bezeichnet.

Fehlerbehebung bei der Microservices-Architektur

Aufgrund des komplexen Verhaltens von Microservices ist es schwierig, Probleme in verteilten Systemen zu untersuchen. Beispielsweise kann das Aufgeben einer Essensbestellung in einer modularen App mehrere Anforderungen an verschiedene Microservices auslösen. Diese Anforderungen können gleichzeitig und unabhängig erfolgen und müssen nicht sequentiell sein. Wenn ein Problem mit der Essensbestellung auftritt, müssen Entwickler feststellen, welcher Microservice es verursacht hat. Herkömmliche Ansätze zur Problemverfolgung liefern nur ein Teilbild der Anforderung, was die Fehlersuche bei Microservices mühsam macht.

 

Jaeger ist ein Softwaretool, mit dem IT-Teams Transparenz und Klarheit über die gesamte Ereigniskette gewinnen. Sie können so Probleme schneller lösen und das Kundenerlebnis verbessern.

Wofür wird Jaeger benutzt?

Entwickler benutzen Jaeger, um die Leistung verteilter Systeme auf verschiedene Weise zu verbessern. Im Folgenden geben wir einige Beispiele.

Verteilte Überwachung von Transaktionen

Jaeger verfügt über Funktionen zur Überwachung von Datenbewegungen zwischen Microservices. Die Entwickler können proaktiv vorgehen, um Probleme zu erkennen und zu beheben, bevor sie den Benutzer stören.

Optimierung der Latenzzeit

Jaeger-Analysen können Engpässe in Microservices, die eine Anwendung verlangsamen, aufspüren. Entwickler benutzen Jaeger, um das Verhalten von Microservices zu untersuchen und diese zu beschleunigen.

Ursachenanalyse

In einer Microservice-Architektur kann ein Problem zu weiteren Problemen führen. Entwickler können Jaeger verwenden, um den Ausgangspunkt einer Reihe von zusammenhängenden Problemen in einer Anwendung zu finden.

Serviceabhängige Analyse

Serviceabhängigkeit bedeutet, dass eine Anwendung von mehreren Komponenten abhängt, um zu funktionieren. So ist beispielsweise eine Navigationsanwendung auf ortsbezogene Services in der mobilen Anwendung angewiesen. Die Entwickler benutzen Jaeger, um die komplexen Beziehungen zwischen den verschiedenen Microservices zu verstehen. 

Verteilte Kontextpropagierung

Die verteilte Kontextpropagierung ist die Art und Weise, wie eine Anwendung beschreibende Informationen zusammen mit den Daten weitergibt. Dies hilft den Entwicklern, die Leistung von Microservices als Ganzes zu bewerten. Jaeger versieht zum Beispiel Bestellanforderungen mit dem Namen des Kunden, so dass Entwickler den Pfad der Anforderung mit dem jeweiligen Kunden verknüpfen können. 

Wie funktioniert Jaeger?

Jaeger funktioniert nach den Prinzipien der verteilten Nachverfolgung und benutzt das OpenTracing Framework.

Verteilte Nachverfolgung

Die verteilte Nachverfolgung (Distributed Tracing) ist eine Softwaretechnik zur Überwachung von Ereignis-Nachverfolgungen zwischen Microservices. Sie verfolgt alle Verbindungen und bietet Diagramme und Grafiken zur Visualisierung von Anforderungspfaden in einer Anwendung. Als Tool zur verteilten Nachverfolgung verfolgt Jaeger die Bewegungen von Anforderungen, indem es jeder Anforderung eine eindeutige Kennung zuweist und Informationen sammelt, wenn ein bestimmter Service den Vorgang bearbeitet. 

OpenTracing 

Das OpenTracing ist ein Open-Source bzw. frei verfügbares Framework, das die Standards bereitstellt, um eine genaue, schlüsselfertige verteilte Nachverfolgung in modernen Softwaresystemen zu ermöglichen. So bietet es beispielsweise einen gemeinsamen Standard für die Definition der Struktur der überwachten Informationen, die zwischen den Microservices ausgetauscht werden. Jaeger verwendet OpenTracing, um eine Komplettlösung zum Erfassen, Speichern, Verwalten, Analysieren und Visualisieren von Microservices-Daten bereitzustellen.  

OpenTracing-Datenmodell

Das OpenTracing-Datenmodell bietet die grundlegende Definition, um Daten aus verschiedenen Komponenten zu verbinden. Die beiden Hauptbegriffe, die es benutzt sind Span und Nachverfolgung.

Span 

Ein Span ist eine einzelne logische Arbeitseinheit in einem System der verteilten Nachverfolgung. Jeder Span hat diese Komponenten:

  • Einen Betriebsnamen
  • Eine Anfangszeit und eine Endzeit
  • Tags oder Werte, die Entwicklern helfen, den Span zu analysieren
  • Protokolle, die allevon Microservices generiert Nachrichten speichern
  • Span-Kontext oder zusätzliche Beschreibungen des Spans

Nachverfolgung

Eine Nachverfolgung ist eine Sammlung von einem oder mehreren Spans, die zu demselben Vorgang gehören. Sie stellt die Ereignisse dar, die während eines bestimmten Zeitraums stattfinden. Spans, die zur gleichen Nachverfolgung gehören, haben die gleiche Nachverfolgungs-ID. Eine Nachverfolgung, die erzeugt wird, wenn ein Kunde ein Essen bestellt, ergibt beispielsweise folgende Spans: 

  • Der Kunde gibt eine Bestellung auf
  • Bezahlung wird verarbeitet
  • Bestellliste wird an des Restaurant geschickt
  • Das Essen wird abgeholt
  • Das Essen wurde geliefert

Was sind die Bestandteile von Jaeger?

Die verteilte Nachverfolgungsplattform von Jaeger besteht aus den folgenden Komponenten. 

Jaeger-Client

Der Jaeger-Client enthält sprachspezifische Implementierungen der OpenTracing-API in Programmiersprachen wie Go, JavaScript, Java, Python, Ruby und PHP.

Entwickler benutzen diese APIs, um Jaeger-Spans zu erstellen, ohne den Quellcode für verteilte Nachverfolgung zu schreiben. 

Jaeger-Agenten

Der Jaeger-Agent ist ein Netzwerk-Daemon oder ein Prozess, der kontinuierlich im Hintergrund läuft und Funktionen ausführt, die von anderen Prozessen benötigt werden. Er horcht auf Spans, die der Client über das User Datagram Protocol (UDP) sendet, eine Kommunikationsmethode, die Anwendungen den Austausch von Nachrichten über ein Netzwerk ermöglicht.  

Der Agent verbindet sich mit dem Client in Container-Umgebungen wie Amazon Elastic Kubernetes Service. Die Agentengruppen erstellen Spans in Batches und senden sie an den Kollektor. So kann die Anwendung laufen, ohne aktiv Nachverfolgungsinformationen an das Jaeger-Backend zu senden. 

Jaeger-Kollektor

Ein Jaeger-Kollektor ist eine Softwarekomponente, die Nachverfolgungen vom Jaeger-Kollektor abruft. Sie prüft, verarbeitet und speichert die Nachverfolgungen in der Datenbank.

Speicher

Das Jäger-Nachverfolgungs-System empfängt Spans und speichert sie in einem persistenten Speicher oder einer Datenbank. Persistenter Speicher bedeutet, dass die gespeicherten Daten intakt bleiben, auch wenn der Computer ausgeschaltet wird. Zum Beispiel benutzen Entwickler AWS OpenSearch Service als persistenten Speicher für die Speicherung und Annahme von Spans.

Aufnehmer

Eine Möglichkeit, Jaeger bereitzustellen, besteht darin, Nachverfolgungsdaten an Kafka zu senden, ein verteiltes System für Anwendungen zum Speichern und Abrufen von Informationsströmen. Ein Erfasser ist ein Modul, das Nachverfolgungsdaten aus Kafka liest und sie separat speichert. 

Abfrage

Der Abfrage-Service ruft Nachverfolgungsinformationen aus der Datenbank ab. Entwickler benutzen Abfragen, um Nachverfolgungen mit bestimmten Zeiten, Tags, Dauer und Vorgänge zu finden. 

Jaeger-Konsole

Die Jaeger-Konsole ist ein Softwareprogramm mit einer Benutzeroberfläche, die Sie zum Anzeigen und Analysieren von Nachverfolgungen verwenden können. Es zeigt die Nachverfolgungsdaten in Diagrammen und Tabellen an. 

Wie benutzen Entwickler Jaeger?

Wenn Entwickler eine Anwendung entwickeln, benutzen sie die Jaeger-Client-Bibliotheken, um Spans zu erstellen. Indem sie dem Programm Codes hinzufügen, um Nachverfolgungen zu erzeugen, schaffen sie eine so genannte instrumentierte Anwendung. Die instrumentierte Anwendung erzeugt automatisch die folgenden Daten:

 

  1. Spans mit Span-ID, Nachverfolgungs-ID, Tags, Protokolle und Span-Kontext 
  2. Nachverfolgungen für jede Anforderung

 

Entwickler benutzen die Jaeger-Konsole, um diese verteilten Nachverfolgungsdaten zu suchen, zu filtern, zu visualisieren und zu analysieren. Sie können die Jaeger UI-Software verwenden, um detaillierte Informationen wie die Dauer des Vorgangs, Fehler und Protokolle der Microservices anzuzeigen. 

Was sind Jaeger-Stichprobenstrategien?

Eine instrumentierte Anwendung überträgt automatisch Nachverfolgungsdaten, wenn die Anwendung ausgeführt wird. Sie können diese Nachverfolgungsdaten verwenden, um die Anwendungsleistung zu messen. Sie werden auch als Telemetriedaten bezeichnet. Um zu verhindern, dass das Jaeger-Backend mit zu vielen Telemetriedaten überlastet wird, können Sie die Daten filtern oder Stichproben nehmen, indem Sie in Ihrer Jaeger-Implementierung Stichprobenstrategien konfigurieren. Dies sind einige Stichprobenstrategien:

  • Bei der konstanten Stichprobe wird für alle Arten von Nachverfolgungen die gleiche Anzahl von Proben genommen.
  • Bei der probabilistischen Stichprobe werden Stichproben nach dem Zufallsprinzip gezogen, bis ein bestimmter Prozentsatz erreicht ist.
  • Bei der ratenbegrenzten Stichprobe wird eine bestimmte Anzahl von Abtastungen pro Sekunde abgerufen.
  • Die adaptive Stichprobe passt die Abtastrate automatisch an, um eine bestimmte Anzahl von Nachverfolgungen für eine bestimmte Dauer zu erhalten.

Was ist AWS App Mesh?

AWS App Mesh ist ein Service-Mesh oder eine Software-Infrastruktur, die Ihnen die Arbeit abnimmt, so dass Sie verteilte Systeme, die auf Microservices basieren, einfacher verwalten können. AWS App Mesh erfüllt die folgenden Aufgaben: 

  • Bietet End-to-End-Transparenz und hohe Verfügbarkeit für Ihre Anwendungen.
  • Konfiguriert jeden Service für den Export von Überwachungsdaten und implementiert eine einheitliche Kommunikationssteuerungslogik in Ihrer Anwendung. 
  • Ermöglicht die Kontrolle des Netzwerkverkehrs, damit Entwickler sichere Cloud-Anwendungen erstellen können. 

Sie können AWS App Mesh als eigenständige Lösung für Ihre Anforderungen an die verteilte Verfolgung verwenden. Es unterstützt auch mehrere Tools von Drittanbietern wie Jaeger, die Sie zur Überwachung, Protokollierung oder Verfolgung der Kommunikation von Microservices verwenden können.

Beginnen Sie noch heute mit den ersten Schritten von Jaeger auf App Mesh, indem Sie ein AWS-Konto erstellen.

Jaeger – Nächste Schritte auf AWS

Zusätzliche produktbezogene Ressourcen ansehen
Weitere Informationen zu AWS App Mesh 
Registrieren Sie sich für ein kostenloses Konto

Sie erhalten sofort Zugriff auf das kostenlose Kontingent von AWS. 

Registrieren 
Beginnen Sie mit der Entwicklung in der Konsole

Beginnen Sie mit der Entwicklung mit AWS in der AWS-Managementkonsole.

Anmeldung