Sleuth – Linkverfolgung
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1 Einführung in die Linkverfolgung
Beim Microservice-Aufbau großer Systeme wird ein System in viele Module aufgeteilt. Diese Module sind für unterschiedliche Funktionen verantwortlich und werden zu einem System kombiniert, das letztendlich umfangreiche Funktionalität bieten kann. In dieser Architektur umfasst eine Anfrage häufig mehrere Dienste. Internetanwendungen basieren auf verschiedenen Sätzen von Softwaremodulen. Diese Softwaremodule können von verschiedenen Teams entwickelt, mit unterschiedlichen Programmiersprachen implementiert und auf Tausenden von Servern in mehreren verschiedenen Rechenzentren verteilt sein, was bedeutet, dass es auch einige Probleme geben wird mit dieser architektonischen Form:
- Wie findet man Probleme schnell?
- Wie kann der Umfang der Auswirkungen des Fehlers ermittelt werden?
- Wie kann man Dienstabhängigkeiten und die Rationalität von Abhängigkeiten klären?
- Wie lassen sich Verbindungsleistungsprobleme und die Kapazitätsplanung in Echtzeit analysieren?

Die verteilte Linkverfolgung (Distributed Tracing) dient dazu, eine verteilte Anforderung an einen aufrufenden Link wiederherzustellen, eine Protokollierung durchzuführen, die Leistung zu überwachen und den Aufrufstatus einer verteilten Anforderung zentral anzuzeigen. Zum Beispiel die auf jedem Serviceknoten verbrachte Zeit, welche Maschine die Anfrage erreicht, der Anfragestatus jedes Serviceknotens usw.
Zu den gängigen Link-Tracing-Technologien gehören die folgenden:
- Katze Open Source von Dianping und basierend aufJava Die entwickelte Echtzeit-Anwendungsüberwachungsplattform umfasst Echtzeit-Anwendungsüberwachung und Geschäftsüberwachung. integriert Die Lösung besteht darin, die Überwachung durch das Vergraben von Code zu implementieren, z. B. durch Interceptoren, Filter usw. Sehr aufdringlich für den Code, Integration höhere Kosten. Das Risiko ist größer.
- zipkin Darauf ankommenÞjórsárdenDas Open-Source-Distributed-Tracking-System des Unternehmens wird verwendet, um Zeitdaten von Diensten zu sammeln, um Mikro- zu lösen. Zu den Latenzproblemen in der Servicearchitektur gehören: Datenerfassung, -speicherung, -suche und -präsentation.Dieses Produkt vereintFrühlingswolken-DetektivEs ist relativ einfach zu bedienen und leicht zu integrieren, seine Funktionen sind jedoch relativ einfach.
- genau lokalisieren Genau lokalisieren Es handelt sich um ein koreanisches Open-Source-Tool zur Anrufkettenanalyse und Anwendungsüberwachung, das auf Bytecode-Injection basiert.MerkmaleEs unterstützt eine Vielzahl von Plug-Ins.BenutzeroberflächeLeistungsstarke Funktionen, kein Code-Einbruch auf der Zugriffsseite.
- Himmelsspaziergang
SkyWalking Es handelt sich um ein lokales Open-Source-Tool zur Anrufkettenanalyse und Anwendungsüberwachung, das auf Bytecode-Injection basiert.Das Merkmal ist, dass es viele unterstütztArt Plug-in,Benutzeroberfläche Die Funktion ist stark und es gibt keinen Codeeinbruch auf der Zugriffsseite.Bereits beigetretenApacheInkubator. - Detektiv
SpringCloud Bietet Link-Tracking-Lösungen in verteilten Systemen.
Beachten:
SpringCloud Alibaba
Der Technologie-Stack bietet keine eigene Link-Tracking-Technologie, die wir nutzen können
Detektiv +
Zinkin
So erstellen Sie eine Link-Tracking-Lösung
2 DetektivErste Schritte
2.1 Detektiveinführen
Die Hauptfunktion von SpringCloud Sleuth besteht darin, Tracking-Lösungen in verteilten Systemen bereitzustellen.es lehnt sich stark an
Google
Elegant
Lassen Sie uns zunächst das Design von verstehen
Detektiv
Begriffe und verwandte Konzepte in .
- Verfolgen
von einer GruppeTrace-IDidentischSpanne Zu einer Baumstruktur verkettet.Um die Anforderungsverfolgung zu implementieren, wenn eine Anforderung im verteilten System eintrifftFür den Eingabeendpunkt muss das Service-Tracking-Framework lediglich eine eindeutige Kennung für die Anforderung erstellen (d. h.Trace-ID), während im verteilten System Bei der Zirkulation innerhalb des Systems übergibt das Framework diesen eindeutigen Wert immer so lange, bis die gesamte Anfrage zurückgegeben wird.Dann können wir dies nur verwendenEine Kennung verbindet alle Anfragen zu einem vollständigen Anfragelink. - Spanne Stellt einen grundlegenden Satz von Arbeitseinheiten dar.Um die Verzögerung jeder Verarbeitungseinheit zu zählen, wenn die Anforderung jede Dienstkomponente erreichtZeit, auch durch eine eindeutige Kennung (SpanId ), um seinen Anfang, seinen spezifischen Prozess und sein Ende zu markieren.passierenSpanIdder Anfang und das Ende vonEndzeitstempel, den Sie zählen könnenSpanne Zusätzlich zur Aufrufzeit können wir auch den Namen der Veranstaltung erfahren.Informationen anfordern usw.Metadaten.
- Anmerkung
Verwenden Sie es, um Ereignisse über einen bestimmten Zeitraum aufzuzeichnen. Wichtige Hinweise für den internen Gebrauch:
cs(Client senden) Der Client gibt eine Anfrage aus und startet die Lebensdauer einer Anfrage
Herr(Server empfangen) Der Server empfängt die Anfrage und beginnt mit der Verarbeitung. Herr-cs = Netzwerklatenz (Zeit für Serviceanruf)
ss(Server Senden) Der Server hat die Verarbeitung abgeschlossen und kann an den Client gesendet werden.ss - sr = Bearbeitungszeit auf dem Server anfordern
cr(Kunde erhalten) Der Client erhält die Antwort vom Server und die Anfrage endet. cr - sr =Gesamtzeit angefordert

2.2 DetektivErste Schritte
Microservice-Name
, Trace-ID, Span-ID,
Ob die Link-Tracking-Ergebnisse an eine Drittanbieterplattform ausgegeben werden sollen
[API-Gateway,3977125f73391553,3977125f73391553,false]
[Service-Bestellung,3977125f73391553,57547b5bf71f8242,falsch]
[Dienstleistungsprodukt,3977125f73391553,449f5b3f3ef8d5c5,false]
Als nächstes integrieren Sie frühere Projektfälle
Detektiv
, Vervollständigen Sie das Schreiben des Einführungsfalls.
Ändern Sie die Einführung des übergeordneten Projekts
Detektiv
verlassen
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
Nachdem wir den Microservice gestartet und die Schnittstelle aufgerufen haben, können wir dies auf der Konsole beobachten
Detektiv
Die Protokollausgabe von
wo c61d4a753370cbeb ist
Trace-ID
, 0e06445e055ed94f ist
SpanId gibt es eine globale TraceId, die nacheinander aufgerufen wird, um die aufrufenden Links aneinanderzureihen. Durch sorgfältige Analyse der Protokolle jedes Mikrodienstes ist es nicht schwer, den spezifischen Prozess der Anfrage zu erkennen.
Das Anzeigen von Protokolldateien ist keine gute Methode. Wenn es immer mehr Mikrodienste gibt, kann Zipkin die Protokolle für die visuelle Anzeige und den Volltextabruf zusammenfassen.
3 ZipkinIntegration
3.1 ZipKineinführen
Zipkin ist
Þjórsárden
Ein Open-Source-Projekt basierend auf
Es wurde von Google Dapper implementiert und dient der Erfassung von Zeitdaten von Diensten, um Latenzprobleme in der Microservice-Architektur, einschließlich Daten, zu lösen
Sammeln, speichern, suchen und anzeigen
。
Wir können damit Tracking-Daten von Anforderungslinks auf jedem Server sammeln und die bereitgestellte REST-API-Schnittstelle verwenden, um uns bei der Abfrage der Tracking-Daten zu unterstützen, um das Überwachungsprogramm des verteilten Systems zu implementieren und so den Verzögerungsanstieg umgehend zu erkennen Sie können Probleme auf hoher Ebene erkennen und die Ursache für Systemleistungsengpässe ermitteln.
Zusätzlich zur entwicklungsorientierten API
Neben der Benutzeroberfläche bietet es auch Komfort
UI-Komponenten helfen uns, intuitiv nach Tracking-Informationen zu suchen und Anfrage-Link-Details zu analysieren. Beispielsweise können wir die Bearbeitungszeit jeder Benutzeranfrage innerhalb eines bestimmten Zeitraums usw. abfragen.
Zipkin bietet steckbaren Datenspeicher:
In Erinnerung
、
MySQL
、
Kassandra
sowie
Elasticsearch
。

Das Bild oben zeigt
Zipkin
Infrastruktur, die hauptsächlich besteht aus
4
Bestehend aus Kernkomponenten:
- Kollektor: Collector-Komponente, die hauptsächlich dazu dient, von externen Systemen gesendete Tracking-Informationen zu verarbeiten und diese Informationen in umzuwandeln Zipkinintern verarbeitet SpanneFormat zur Unterstützung der anschließenden Speicherung, Analyse, Anzeige und anderer Funktionen.
- Lagerung: Speicherkomponente, die hauptsächlich die vom Collector empfangenen Tracking-Informationen verarbeitet. Standardmäßig werden diese Informationen im Speicher gespeichert.Wir können diese Speicherstrategie auch ändern, um Tracking-Informationen in der Datenbank zu speichern, indem wir andere Speicherkomponenten verwenden.
- RESTful API:API Komponente, die hauptsächlich zur Bereitstellung einer externen Zugriffsschnittstelle verwendet wird.Zeigen Sie beispielsweise Tracking-Informationen dem Kunden oder extern anSystemzugriff zur Überwachung etc.
- Web-Benutzeroberfläche:Benutzeroberfläche Komponente, basierend aufAPI Die von der Komponente implementierte Anwendung der oberen Schicht.passierenBenutzeroberflächeKomponentenbenutzer können bequem und intuitiv Abfragen und Analysen durchführenAnalysieren Sie Tracking-Informationen.
Zipkin ist in zwei Enden geteilt, eines ist
Zipkin
Auf der Serverseite ist einer
Zipkin-Client, der Client ist die Anwendung von Microservices. Der Client konfiguriert den Server
URL
Die Adresse wird im Microservice konfiguriert, sobald ein Anruf zwischen Diensten erfolgt.
Der Zuhörer von Sleuth hört zu und generiert entsprechendes
Verfolgen
Und
Spanne
Informationen werden an den Server gesendet.
3.2 ZipKinServerinstallation
NEIN.
1
Schritt
:
herunterladen
ZipKin
von
Krug
Tasche
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
Besuchen Sie die URL oben, um eine zu erhaltenKrugTasche, das ist esZipKinserverseitigKrugTasche
NEIN.
2
Schritt
:
Geben Sie über die Befehlszeile den folgenden Befehl ein, um zu starten
ZipKin Server
java -jar zipkin-server-2.12.9-exec.jar
NEIN.
3
Schritt: Zugriff über Browser
http://localhost:9411
Zugang

3.3 ZipkinClient-Integration
ZipKin-Client und
Detektiv
Die Integration ist sehr einfach. Fügen Sie einfach die Abhängigkeiten und die Konfiguration zum Microservice hinzu.
NEIN.
1
Schritt: Abhängigkeiten für jeden Microservice hinzufügen
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
NEIN.
2
Schritt: Konfiguration hinzufügen
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
NEIN.
3
Schritt
:
Greifen Sie auf die Microservice-Schnittstelle zu
http://localhost:7000/order-serv/order/prod/1
NEIN.
4
Schritt
:
Zugang
zipkin
von
Benutzeroberfläche
Schnittstelle, Beobachtungseffekt

NEIN.
5
Schritt: Klicken Sie auf einen der Datensätze, um den detaillierten Verlauf eines Besuchs anzuzeigen.

4 ZipKinDatenpersistenz
Zipkin Server speichert Tracking-Dateninformationen standardmäßig im Speicher, diese Methode ist jedoch nicht für Produktionsumgebungen geeignet.
Zipkin unterstützt die Speicherung von Tracking-Daten
MySQL
Datenbank bzw
elastische Suche
Mitte.
4.1 verwendenMySQLImplementieren Sie Datenpersistenz
NEIN.
1
Schritt
:
erstellen
MySQL
Datenumgebung
NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`name` VARCHAR ( 255 ) NOT NULL,
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
`a_timestamp` BIGINT COMMENT 'Used to implement TTL;
Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
`endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
`endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
Binary/Annotation.endpoint is null'
) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
NOT EXISTS zipkin_dependencies ( `day` DATE NOT NULL, `parent` VARCHAR ( 255 ) NOT NULL, `child` VARCHAR ( 255 ) NOT NULL, `call_count` BIGINT ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
SET = utf8 COLLATE utf8_general_ci;
ALTER TABLE zipkin_dependencies ADD UNIQUE KEY ( `day`, `parent`, `child` );

NEIN.
2
Schritt
:
am Anfang
ZipKin Server
Wann
,
Die angegebenen Daten werden gespeichert
MySQL
Information
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root -
4.2 verwendenelastische SucheImplementieren Sie Datenpersistenz
NEIN.
1
Schritt
:
herunterladen
elastische Suche
Download-Link:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
NEIN.
2
Schritt
:
Start-up
elastische Suche
Besuchen Sie: localhost:9200
Wenn Sie eine Visualisierung benötigen, können Sie Kibana installieren
NEIN.
3
Schritt
:
am Anfang
ZipKin Server
Bei der Angabe der zu speichernden Daten
elastische Suche
Information
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200
Zur visuellen Verwendung von Elasticsearch können Sie sich auf Folgendes beziehen:Installation und Verwendung von Elasticsearch unter Windows sowie Installation des kibana_windowskibanna-CSDN-Blogs