Partage de technologie

Détective - suivi des liens

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1 Introduction au traçage des liens

  Dans la construction de microservices de grands systèmes, un système est divisé en plusieurs modules. Ces modules sont responsables de différentes fonctions et sont combinés en un système qui peut finalement fournir de riches fonctionnalités. Dans cette architecture, une requête implique souvent plusieurs services. Les applications Internet sont construites sur différents ensembles de modules logiciels. Ces modules logiciels peuvent être développés par différentes équipes, peuvent être implémentés à l'aide de différents langages de programmation et peuvent être distribués sur des milliers de serveurs dans plusieurs centres de données différents, ce qui signifie qu'il y aura également quelques problèmes avec cette forme architecturale :

  • Comment trouver rapidement des problèmes ?
  • Comment déterminer l’ampleur de l’impact de la panne ?
  • Comment trier les dépendances de service et la rationalité des dépendances ?
  • Comment analyser les problèmes de performances des liaisons et la planification de la capacité en temps réel ?

Le traçage de lien distribué (Distributed Tracing) consiste à restaurer une requête distribuée sur un lien appelant, à effectuer la journalisation, la surveillance des performances et à afficher de manière centralisée l'état d'appel d'une requête distribuée. Par exemple, le temps passé sur chaque nœud de service, la machine atteinte par la requête, l'état de la demande de chaque nœud de service, etc.

Les technologies courantes de traçage de liens sont les suivantes :
  • chat Open source par Dianping et basé surJava La plateforme de surveillance des applications en temps réel développée comprend la surveillance des applications en temps réel et la surveillance des activités. intégré La solution consiste à mettre en œuvre une surveillance via l’enfouissement de code, comme des intercepteurs, des filtres, etc. Très intrusif dans le code, intégration coût plus élevé. Le risque est plus grand.
  • zipkin Dépend deTwitterLe système de suivi distribué open source et open source de la société est utilisé pour collecter des données temporelles de services afin de résoudre les micro- Les problèmes de latence dans l'architecture de service incluent : la collecte, le stockage, la recherche et la présentation des données.Ce produit combinedétective des nuages ​​printaniersIl est relativement simple à utiliser et facile à intégrer, mais ses fonctions sont relativement simples.
  • localiser Localiser Il s'agit d'un outil coréen d'analyse de la chaîne d'appels et de surveillance des applications open source basé sur l'injection de bytecode.CaractéristiquesIl prend en charge une variété de plug-ins.Interface utilisateurFonctions puissantes, aucune intrusion de code du côté de l'accès.
  • marcher dans le ciel
    Randonnée dans le ciel Il s'agit d'un outil local d'analyse de la chaîne d'appels open source et de surveillance des applications basé sur l'injection de bytecode.La particularité est qu'il prend en charge de nombreuxune sorte de plug-in,Interface utilisateur La fonction est puissante et il n’y a aucune intrusion de code du côté de l’accès.Déjà rejointApacheincubateur.
  • Détective
    Nuage de printemps Fournit des solutions de suivi des liens dans les systèmes distribués. 
Avis: SpringCloud Alibaba La pile technologique ne fournit pas sa propre technologie de suivi des liens, nous pouvons utiliser Détective +
Zinc Pour créer une solution de suivi des liens

2 Détectivecommencer

2.1 Détectiveintroduire

La fonction principale de SpringCloud Sleuth est de fournir des solutions de suivi dans les systèmes distribués.il emprunte beaucoup à Google
Pimpant Comprenons d’abord la conception de Détective termes et concepts associés dans .
  • Tracer
    par un groupeIdentifiant de traceidentiquePortée Concaténé pour former une structure arborescente.Afin de mettre en œuvre le suivi des demandes, lorsqu'une demande arrive au système distribuépoint de terminaison d'entrée, le cadre de suivi des services n'a besoin que de créer un identifiant unique pour la demande (c'est-à-direIdentifiant de trace), alors que dans le système distribué Lors de sa circulation dans le système, le framework continue toujours de transmettre cette valeur unique jusqu'à ce que la totalité de la requête soit renvoyée.Ensuite, nous pouvons utiliser ceci uniquementUn identifiant relie toutes les demandes entre elles pour former un lien de demande complet.
  • Portée Représente un ensemble de base d’unités de travail.Afin de compter le délai de chaque unité de traitement, lorsque la requête atteint chaque composant du servicetemps, également via un identifiant unique (ID de la portée ) pour marquer son début, son processus spécifique et sa fin.passerID de la portéele début et la fin deHorodatage de fin, vous pouvez compter leportée En plus de l'heure d'appel, nous pouvons également obtenir le nom de l'événement.Demander des informations, etc.métadonnées.
  • Annotation
    Utilisez-le pour enregistrer des événements sur une période donnée. Notes importantes à usage interne :
    csEnvoi du client) Le client émet une requête et démarre la vie d'une requête
    srServeur reçu) Le serveur reçoit la requête et commence à la traiter, srcs = Latence du réseau (durée de l'appel de service)
    ssEnvoi du serveur) Le serveur a terminé le traitement et est prêt à être envoyé au client,ss-sr = Temps de traitement des demandes sur le serveur
    crClient reçu) Le client reçoit la réponse du serveur et la requête se termine. cr-sr =temps total demandé

2.2 Détectivecommencer

Nom du microservice , traceId, identifiant espagnol, S'il faut afficher les résultats du suivi des liens vers une plate-forme tierce
[passerelle API,3977125f73391553,3977125f73391553,false]
[ordre de service,3977125f73391553,57547b5bf71f8242,false]
[service-produit,3977125f73391553,449f5b3f3ef8d5c5,false]
Ensuite, intégrez les cas de projets précédents Détective , terminer la rédaction du cas introductif.
Modifier l'introduction du projet parent Détective compter sur
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
Après avoir démarré le microservice et appelé l'interface, on peut observer sur la console détective La sortie du journal de
où se trouve c61d4a753370cbeb Identifiant de trace , 0e06445e055ed94f est SpanId, il existe un TraceId global appelé en séquence pour enchaîner les liens appelants. En analysant soigneusement les logs de chaque microservice, il n'est pas difficile de voir le processus spécifique de la requête.

L'affichage des fichiers journaux n'est pas une bonne méthode. Lorsqu'il y a de plus en plus de microservices, il y aura de plus en plus de fichiers journaux qui pourront regrouper les journaux et effectuer un affichage visuel et une récupération de texte intégral.

3 ZipkinsL'intégration

3.1 ZipKinintroduire

Zipkin est Twitter Un projet open source basé sur Mis en œuvre par Google Dapper, il est dédié à la collecte de données de synchronisation des services pour résoudre les problèmes de latence dans l'architecture des microservices, y compris les données Collecter, stocker, rechercher et afficher

Nous pouvons l'utiliser pour collecter des données de suivi des liens de requête sur chaque serveur et utiliser l'interface API REST qu'il fournit pour nous aider à interroger les données de suivi afin de mettre en œuvre le programme de surveillance du système distribué, afin de découvrir rapidement l'augmentation du délai dans le système. Problèmes de haut niveau et identifier la source des goulots d’étranglement des performances du système.
En plus de l'API orientée développement En plus de l'interface, il fournit également des fonctionnalités pratiques Les composants de l'interface utilisateur nous aident à rechercher intuitivement des informations de suivi et à analyser les détails du lien de la demande. Par exemple, nous pouvons interroger le temps de traitement de chaque demande d'utilisateur sur une certaine période.
Zipkin fournit un stockage de données enfichable : En mémoire MySQL Cassandre ainsi que Recherche élastique

L'image ci-dessus montre Zipkin infrastructures, qui se composent principalement de 4 Composé de composants de base :
  • Collectionneur: Composant collecteur, qui est principalement utilisé pour traiter les informations de suivi envoyées par des systèmes externes et convertir ces informations en Zipkintraité en interne Portéeformat pour prendre en charge le stockage, l'analyse, l'affichage et d'autres fonctions ultérieures.
  • Stockage: Composant de stockage, qui traite principalement les informations de suivi reçues par le collecteur. Par défaut, ces informations seront stockées en mémoire.Nous pouvons également modifier cette stratégie de stockage pour stocker les informations de suivi dans la base de données en utilisant d'autres composants de stockage.
  • API RESTfulAPI Composant principalement utilisé pour fournir une interface d'accès externe.Par exemple, afficher des informations de suivi au client ou à des tiersAccès au système pour la surveillance, etc.
  • Interface WebInterface utilisateur composant, basé surAPI L'application de couche supérieure implémentée par le composant.passerInterface utilisateurLes utilisateurs de composants peuvent interroger et analyser de manière pratique et intuitiveAnalysez les informations de suivi.
Zipkin est divisé en deux extrémités, l'une est Zipkin Côté serveur, l'un est Client Zipkin, le client est l'application de microservices. Le client configurera le serveur URL L'adresse sera configurée dans le microservice une fois qu'un appel entre les services aura lieu. L'auditeur de Sleuth écoute et génère les Tracer et Portée Les informations sont envoyées au serveur.

3.2 ZipKinInstallation du serveur

Non. 1 étape : télécharger ZipKin de pot Sac
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

 Visitez l'URL ci-dessus pour obtenir unpotSac, ça y estZipKindu côté serveurpotSac

Non. 2 étape : Via la ligne de commande, entrez la commande suivante pour démarrer Serveur ZipKin
java -jar zipkin-server-2.12.9-exec.jar

Non. 3 Étape : Accès via le navigateur http://localhost:9411 accéder

3.3 ZipkinIntégration client

Client ZipKin et Détective L'intégration est très simple, il suffit d'ajouter ses dépendances et sa configuration dans le microservice.

Non. 1 Étape : Ajouter des dépendances sur chaque microservice
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
Non. 2 Étape : Ajouter une configuration
  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 #采样的百分比
Non. 3 étape : Accéder à l'interface du microservice
http://localhost:7000/order-serv/order/prod/1

Non. 4 étape : accéder fermeture éclair de Interface utilisateur interface, effet d'observation

Non. 5 Étape : Cliquez sur une des fiches pour observer le parcours détaillé d'une visite.

4 ZipKinPersistance des données

Zipkin Server enregistre par défaut les informations sur les données de suivi dans la mémoire, mais cette méthode ne convient pas aux environnements de production. Zipkin prend en charge les données de suivi persistantes pour mysql base de données ou recherche élastique milieu.

4.1 utilisermysqlImplémenter la persistance des données

Non. 1 étape : créer mysql environnement de données
  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` );
Non. 2 étape : au démarrage Serveur ZipKin quand , Spécifier les données à enregistrer 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 utiliserrecherche élastiqueImplémenter la persistance des données

Non. 1 étape : télécharger recherche élastique
lien de téléchargement: https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4

 

Non. 2 étape : démarrer recherche élastique

 

Visite : localhost : 9200

Si vous avez besoin de visualisation, vous pouvez installer Kibana

Non. 3 étape : au démarrage Serveur ZipKin Lors de la spécification des données à enregistrer recherche élastique Information
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200

Quant à l’utilisation visuelle d’elasticsearch, vous pouvez vous référer à :Installation et utilisation d'Elasticsearch sous Windows, et installation du blog kibana_windowskibanna-CSDN