Technologieaustausch

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:
    csClient senden) Der Client gibt eine Anfrage aus und startet die Lebensdauer einer Anfrage
    HerrServer empfangen) Der Server empfängt die Anfrage und beginnt mit der Verarbeitung. Herrcs = Netzwerklatenz (Zeit für Serviceanruf)
    ssServer Senden) Der Server hat die Verarbeitung abgeschlossen und kann an den Client gesendet werden.ss - sr = Bearbeitungszeit auf dem Server anfordern
    crKunde 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
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
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 APIAPI 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ächeBenutzeroberflä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
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
NEIN. 2 Schritt: Konfiguration hinzufügen
  1. # sleuth 和 zipkin 相关配置
  2. spring:
  3. zipkin:
  4. base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
  5. discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
  6. sleuth:
  7. sampler:
  8. probability: 1.0 #采样的百分比
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
  1. CREATE TABLE
  2. IF
  3. NOT EXISTS zipkin_spans (
  4. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  5. means the trace uses 128 bit traceIds instead of 64 bit',
  6. `trace_id` BIGINT NOT NULL,
  7. `id` BIGINT NOT NULL,
  8. `name` VARCHAR ( 255 ) NOT NULL,
  9. `parent_id` BIGINT,
  10. `debug` BIT ( 1 ),
  11. `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
  12. query and to implement TTL',
  13. `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
  14. and maxDuration query'
  15. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  16. SET = utf8 COLLATE utf8_general_ci;
  17. ALTER TABLE zipkin_spans ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'ignore insert on duplicate';
  18. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id`, `id` ) COMMENT 'for joining with zipkin_annotations';
  19. ALTER TABLE zipkin_spans ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for
  20. getTracesByIds';
  21. ALTER TABLE zipkin_spans ADD INDEX ( `name` ) COMMENT 'for getTraces and
  22. getSpanNames';
  23. ALTER TABLE zipkin_spans ADD INDEX ( `start_ts` ) COMMENT 'for getTraces
  24. ordering and range';
  25. CREATE TABLE
  26. IF
  27. NOT EXISTS zipkin_annotations (
  28. `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
  29. means the trace uses 128 bit traceIds instead of 64 bit',
  30. `trace_id` BIGINT NOT NULL COMMENT 'coincides with
  31. zipkin_spans.trace_id',
  32. `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  33. `a_key` VARCHAR ( 255 ) NOT NULL COMMENT 'BinaryAnnotation.key or
  34. Annotation.value if type == -1',
  35. `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
  36. than 64KB',
  37. `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
  38. Annotation',
  39. `a_timestamp` BIGINT COMMENT 'Used to implement TTL;
  40. Annotation.timestamp or zipkin_spans.timestamp',
  41. `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
  42. null',
  43. `endpoint_ipv6` BINARY ( 16 ) COMMENT 'Null when Binary/Annotation.endpoint
  44. is null, or no IPv6 address',
  45. `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
  46. is null',
  47. `endpoint_service_name` VARCHAR ( 255 ) COMMENT 'Null when
  48. Binary/Annotation.endpoint is null'
  49. ) ENGINE = INNODB ROW_FORMAT = COMPRESSED CHARACTER
  50. SET = utf8 COLLATE utf8_general_ci;
  51. ALTER TABLE zipkin_annotations ADD UNIQUE KEY ( `trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp` ) COMMENT 'Ignore insert on duplicate';
  52. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id`, `span_id` ) COMMENT 'for joining with zipkin_spans';
  53. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id_high`, `trace_id` ) COMMENT 'for getTraces/ByIds';
  54. ALTER TABLE zipkin_annotations ADD INDEX ( `endpoint_service_name` ) COMMENT 'for getTraces and getServiceNames';
  55. ALTER TABLE zipkin_annotations ADD INDEX ( `a_type` ) COMMENT 'for getTraces';
  56. ALTER TABLE zipkin_annotations ADD INDEX ( `a_key` ) COMMENT 'for getTraces';
  57. ALTER TABLE zipkin_annotations ADD INDEX ( `trace_id`, `span_id`, `a_key` ) COMMENT 'for dependencies job';
  58. CREATE TABLE
  59. IF
  60. 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
  61. SET = utf8 COLLATE utf8_general_ci;
  62. 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
  1. java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --
  2. MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root -
  3. -MYSQL_PASS=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