Compartir tecnología

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:
    csCliente 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)
    esServidor Enviar) El servidor ha completado el procesamiento y está listo para ser enviado al cliente,ss-sr= Solicitar tiempo de procesamiento en el servidor
    CrCliente 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
  1. <!--链路追踪 Sleuth-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-sleuth</artifactId>
  5. </dependency>
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 RESTfulAPI 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 webInterfaz 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
  1. <!--zipkin-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zipkin</artifactId>
  5. </dependency>
No. 2 Paso: Agregar configuración
  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 #采样的百分比
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
  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` );
No. 2 paso : Al inicio Servidor ZipKin cuando , Los datos especificados se guardan. MySQL Información
  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 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