Detective: seguimiento de enlaces
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1 Introducción al seguimiento de enlaces
En la construcción de microservicios de sistemas grandes, un sistema se divide en muchos módulos. Estos módulos son responsables de diferentes funciones y se combinan en un sistema que, en última instancia, puede proporcionar una rica funcionalidad. En esta arquitectura, una solicitud suele implicar varios servicios. Las aplicaciones de Internet se basan en diferentes conjuntos de módulos de software. Estos módulos de software pueden ser desarrollados por diferentes equipos, implementados utilizando diferentes lenguajes de programación y pueden distribuirse en miles de servidores en múltiples centros de datos diferentes, lo que significa que también habrá algunos problemas. con esta forma arquitectónica:
- ¿Cómo encontrar problemas rápidamente?
- ¿Cómo determinar el alcance del impacto de la falla?
- ¿Cómo clasificar las dependencias de servicios y la racionalidad de las dependencias?
- ¿Cómo analizar los problemas de rendimiento del enlace y la planificación de capacidad en tiempo real?

El seguimiento de enlaces distribuidos (rastreo distribuido) consiste en restaurar una solicitud distribuida a un enlace de llamada, realizar registros, monitorear el rendimiento y mostrar centralmente el estado de llamada de una solicitud distribuida. Por ejemplo, el tiempo dedicado a cada nodo de servicio, a qué máquina llega la solicitud, el estado de la solicitud de cada nodo de servicio, etc.
Las tecnologías de seguimiento de enlaces comunes incluyen las siguientes:
- gato De código abierto por Dianping y basado enJava La plataforma de monitoreo de aplicaciones en tiempo real desarrollada incluye monitoreo de aplicaciones en tiempo real y monitoreo comercial. integrado La solución es implementar el monitoreo mediante el enterramiento de código, como interceptores, filtros, etc. Muy intrusivo para el código, integración. mayor costo. El riesgo es mayor.
- cremallera Depender deGorjeoEl sistema de seguimiento distribuido de código abierto de la empresa se utiliza para recopilar datos de sincronización de servicios para resolver micro- Los problemas de latencia en la arquitectura de servicios incluyen: recopilación, almacenamiento, búsqueda y presentación de datos.Este producto combinadetective de nubes de primaveraEs relativamente sencillo de usar y de integrar, pero sus funciones son relativamente sencillas.
- determinar con precisión Determinar con precisión Es una herramienta coreana de análisis de cadena de llamadas y monitoreo de aplicaciones de código abierto basada en inyección de código de bytes.CaracterísticasAdmite una variedad de complementos.Interfaz de usuarioFunciones potentes, sin intrusión de código en el extremo del acceso.
- Caminar por el cielo
Caminar por el cielo Es una herramienta local de análisis de cadena de llamadas y monitoreo de aplicaciones de código abierto basada en la inyección de código de bytes.La característica es que soporta muchostipo de complemento,Interfaz de usuario La función es sólida y no hay intrusión de código en el extremo del acceso.Ya me uníapacheincubadora. - Detective
Nube de primavera Proporciona soluciones de seguimiento de enlaces en sistemas distribuidos.
Aviso:
SpringCloud Alibaba
La pila de tecnología no proporciona su propia tecnología de seguimiento de enlaces, podemos usar
Detective +
Zinc
Para crear una solución de seguimiento de enlaces
2 detectiveempezando
2.1 Detectiveintroducir
La función principal de SpringCloud Sleuth es proporcionar soluciones de seguimiento en sistemas distribuidos.toma prestado mucho de
Google
Apuesto
Primero entendamos el diseño de
Detective
términos y conceptos relacionados en .
- Rastro
por un grupoIdentificación de seguimientoidénticoDurar Concatenados para formar una estructura de árbol.Para implementar el seguimiento de solicitudes, cuando llega una solicitud al sistema distribuidopunto final de entrada, el marco de seguimiento de servicios solo necesita crear un identificador único para la solicitud (es decir,Identificación de seguimiento), mientras que en el sistema distribuido Cuando circula dentro del sistema, el marco siempre sigue pasando este valor único hasta que se devuelve la solicitud completa.Entonces podemos usar esto soloUn identificador conecta todas las solicitudes para formar un enlace de solicitud completo. - Durar Representa un conjunto básico de unidades de trabajo.Para contar el retraso de cada unidad de procesamiento, cuando la solicitud llega a cada componente del serviciotiempo, también a través de un identificador único (Identificación de Span ) para marcar su inicio, proceso específico y final.aprobarIdentificación de Spanel principio y el final deMarca de tiempo final, puede contar ladurar Además de la hora de llamada, también podemos obtener el nombre del evento.Solicitar información, etc.metadatos.
- Anotación
Úselo para registrar eventos durante un período de tiempo. Notas importantes para uso interno:
cs(Cliente Envía) El cliente emite una solicitud y comienza la vida de una solicitud.
Sr.(Servidor recibido) El servidor recibe la solicitud y comienza a procesarla, Sr.-cs = Latencia de red (tiempo de llamada de servicio)
es(Servidor Enviar) El servidor ha completado el procesamiento y está listo para ser enviado al cliente,ss-sr= Solicitar tiempo de procesamiento en el servidor
Cr(Cliente recibido) El cliente recibe la respuesta del servidor y la solicitud finaliza. cr - sr =tiempo total solicitado

2.2 Detectiveempezando
Nombre del microservicio
, traceId, spanid,
Si enviar los resultados del seguimiento de enlaces a una plataforma de terceros
[puerta de enlace de API,3977125f73391553,3977125f73391553,falso]
[orden de servicio,3977125f73391553,57547b5bf71f8242,false]
[servicio-producto,3977125f73391553,449f5b3f3ef8d5c5,false]
A continuación, integre a través de casos de proyectos anteriores.
Detective
, complete la redacción del caso introductorio.
Modificar la introducción del proyecto principal
Detective
confiar
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
Después de iniciar el microservicio y llamar a la interfaz, podemos observar en la consola.
detective
La salida del registro de
donde c61d4a753370cbeb es
Identificación de seguimiento
, 0e06445e055ed94f es
SpanId, hay un TraceId global llamado en secuencia para unir los enlaces de llamada. Al analizar cuidadosamente los registros de cada microservicio, no es difícil ver el proceso específico de la solicitud.
Ver archivos de registro no es un buen método. Cuando haya más y más microservicios, habrá más y más archivos de registro que Zipkin podrá agregar para visualización visual y recuperación de texto completo.
3 cremallerasIntegración
3.1 ZipKinintroducir
Zipkin es
Gorjeo
Un proyecto de código abierto basado en
Implementado por Google Dapper, se dedica a recopilar datos de tiempo de servicios para resolver problemas de latencia en la arquitectura de microservicios, incluidos los datos.
Recopilar, almacenar, buscar y mostrar
。
Podemos usarlo para recopilar datos de seguimiento de enlaces de solicitud en cada servidor y usar la interfaz API REST que proporciona para ayudarnos a consultar los datos de seguimiento para implementar el programa de monitoreo del sistema distribuido, a fin de descubrir rápidamente el aumento del retraso en el sistema. problemas de alto nivel e identificar la fuente de los cuellos de botella en el rendimiento del sistema.
Además de la API orientada al desarrollo
Además de la interfaz, también proporciona una cómoda
Los componentes de la interfaz de usuario nos ayudan a buscar intuitivamente información de seguimiento y analizar los detalles del enlace de solicitud. Por ejemplo, podemos consultar el tiempo de procesamiento de cada solicitud de usuario dentro de un cierto período de tiempo, etc.
Zipkin proporciona almacenamiento de datos conectable:
En memoria
、
MySQL
、
Casandra
así como
Búsqueda elástica
。

La imagen de arriba muestra
Cremallera
infraestructura, que consiste principalmente en
4
Compuesto por componentes principales:
- Coleccionista: Componente recopilador, que se utiliza principalmente para procesar información de seguimiento enviada desde sistemas externos y convertir esta información en Cremalleraprocesado internamente Durarformato para soportar el almacenamiento posterior, análisis, visualización y otras funciones.
- Almacenamiento: Componente de almacenamiento, que procesa principalmente la información de seguimiento recibida por el recopilador. De forma predeterminada, esta información se almacenará en la memoria.También podemos modificar esta estrategia de almacenamiento para almacenar información de seguimiento en la base de datos utilizando otros componentes de almacenamiento.
- API RESTful:API Componente, que se utiliza principalmente para proporcionar una interfaz de acceso externo.Por ejemplo, mostrar información de seguimiento al cliente o a proveedores externos.Acceso al sistema para monitoreo, etc.
- Interfaz de usuario web:Interfaz de usuario componente, basado enAPI La aplicación de capa superior implementada por el componente.aprobarInterfaz de usuarioLos usuarios de componentes pueden consultar y analizar de forma cómoda e intuitivaAnalizar la información de seguimiento.
Zipkin se divide en dos extremos, uno es
Cremallera
En el lado del servidor, uno es
Cliente Zipkin, el cliente es la aplicación de microservicios. El cliente configurará el servidor.
URL
La dirección se configurará en el microservicio una vez que se produzca una llamada entre servicios.
El oyente de Sleuth escucha y genera las correspondientes
Rastro
y
Durar
La información se envía al servidor.
3.2 ZipKinInstalación del servidor
No.
1
paso
:
descargar
Zipkin
de
frasco
Bolsa
https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
Visite la URL anterior para obtener unafrascoBolsa, esto es todoZipkinlado del servidorfrascoBolsa
No.
2
paso
:
A través de la línea de comando, ingrese el siguiente comando para comenzar
Servidor ZipKin
java -jar zipkin-server-2.12.9-exec.jar
No.
3
Paso: Acceso a través del navegador
http://localhost:9411
acceso

3.3 CremalleraIntegración de clientes
Cliente ZipKin y
Detective
La integración es muy sencilla, basta con añadir sus dependencias y configuración en el microservicio.
No.
1
Paso: agregar dependencias en cada microservicio
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
No.
2
Paso: Agregar configuración
base-url: http://127.0.0.1:9411/ #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
No.
3
paso
:
Acceder a la interfaz de microservicio
http://localhost:7000/order-serv/order/prod/1
No.
4
paso
:
acceso
cremallera
de
Interfaz de usuario
interfaz, efecto de observación

No.
5
Paso: Haga clic en uno de los registros para observar el recorrido detallado de una visita.

4 ZipkinPersistencia de datos
Zipkin Server guardará la información de los datos de seguimiento en la memoria de forma predeterminada, pero este método no es adecuado para entornos de producción.
Zipkin admite datos de seguimiento persistentes para
MySQL
base de datos o
búsqueda elástica
medio.
4.1 usarMySQLImplementar la persistencia de datos
No.
1
paso
:
crear
MySQL
entorno de datos
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` );

No.
2
paso
:
Al inicio
Servidor ZipKin
cuando
,
Los datos especificados se guardan.
MySQL
Información
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 usarbúsqueda elásticaImplementar la persistencia de datos
No.
1
paso
:
descargar
búsqueda elástica
enlace de descarga:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
No.
2
paso
:
puesta en marcha
búsqueda elástica
Visita: localhost:9200
Si necesita visualización, puede instalar Kibana
No.
3
paso
:
Al inicio
Servidor ZipKin
Al especificar los datos que se guardarán
búsqueda elástica
Información
java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ESHOST=localhost:9200
En cuanto al uso visual de elasticsearch, puede consultar:Instalación y uso de Elasticsearch en Windows e instalación del blog kibana_windowskibanna-CSDN