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 :
cs(Envoi du client) Le client émet une requête et démarre la vie d'une requête
sr(Serveur reçu) Le serveur reçoit la requête et commence à la traiter, sr-cs = Latence du réseau (durée de l'appel de service)
ss(Envoi 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
cr(Client 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
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
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 RESTful:API 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 Web:Interface 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
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
Non.
2
Étape : Ajouter une configuration
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
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
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` );

Non.
2
étape
:
au démarrage
Serveur ZipKin
quand
,
Spécifier les données à enregistrer
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 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