Zipkin: crear su propio sistema de seguimiento de enlace (a)

En los micro-servicios en su apogeo, el número de aplicaciones que una empresa de cientos de cientos. dependencias complejas entre aplicaciones, localice el problema, Solucionar problemas es algo desalentador. Para resolver este problema, papel Dapper de Google entró en vigor. Twitter basado en el papel para crear su propio sistema de seguimiento de enlace (es decir, el protagonista de este artículo): fuente Zipkin y abierto

breve introducción

Zipkin es un sistema de rastreo distribuido. Ayuda a recopilar datos de tiempo necesarios para solucionar problemas problemas de latencia en las arquitecturas de servicios. Las características incluyen tanto la recogida y la búsqueda de estos datos. Zipkin es un sistema de seguimiento distribuido. Ayuda a recoger los datos necesarios para resolver la arquitectura de servicio demoras de tiempo. Las características incluyen la recogida y encontrar estos datos.

Un breve vistazo a Zipkin, descripción detallada del lugar: Zipkin web oficial

arquitectura

arquitectura Zipkin

  • reportero: módulo de información de enlace de datos, dispuesto en la aplicación particular
  • Transporte: el módulo de enlace de transmisión de datos, generalmente http, Kafka
  • colector: Recoger y módulo de enlace de datos de consumo, por defecto http cobro revertido, se puede configurar para el consumo Kafka
  • de almacenamiento: un módulo de almacenamiento de datos de enlace, ejemplos específicos pueden ES, Cassandra o MySQL

modelo de datos del enlace

[
    {
        "traceId":"5982fe77008310cc80f1da5e10147517",
        "name":"get",
        "id":"bd7a977555f6b982", "timestamp":1458702548467000, "duration":386000, "localEndpoint":{ "serviceName":"zipkin-query", "ipv4":"192.168.1.2", "port":9411 }, "annotations":[ { "timestamp":1458702548467000, "value":"sr" }, { "timestamp":1458702548853000, "value":"ss" } ] } ] 

Para obtener más información acerca de otro Zipkin del lugar:

  • web oficial Zipkin
  • github Zipkin

¿Por qué elegir Zipkin

Industria, así como otro sistema de seguimiento de enlace de la fuente abierta, ¿por qué debemos elegir Zipkin?

En primer lugar las que figuran sus demandas centrales:

  1. Rendimiento poca influencia: la capacidad de tolerar una ligera pérdida de rendimiento
  2. Soporte multi-idioma: Java, Nodo, Ir, etc.
  3. Plug Escalable: Usted puede desarrollar vínculo personalizado de seguimiento de plug-ins
  4. gran apoyo de la comunidad: no se necesita mucho para desarrollar enlace plug-ins
  5. los costos de acceso pequeños

El código abierto sistema de seguimiento de enlace de la industria de la corriente principal:

  1. skywalking
  2. determinar con precisión
  3. Zipkin
  4. Jaeger

La principal diferencia skywalking y Zipkin

  skywalking Zipkin
implementación interna javaagent, bytecode mejora tapón de AOP
Soporte de idiomas Multi-idioma Multi-idioma
rendimiento bueno bueno
Plug-in de extensión dificultad fácil
Los costos de acceso Bajo, sin desarrollo de la percepción Baja, es necesario configurar el Desarrollo
Apoyo a la comunidad bueno bueno

Se puede ver

  • skywalking en comparación con Zipkin tiene la ventaja de acceso a bajo costo, rendimiento ligeramente mejor
  • Zipkin comparación con skywalking tiene la ventaja de fácil plug-in extensiones

Finalmente elegimos Zipkin

Zipkin 和 valiente

En primer lugar, explicar la relación Zipkin y valiente:

  1. Como puede verse en el comienzo de la carta: Zipkin es el servidor de consultas y análisis, recolección de datos y enlaces persistentes
  2. valiente es la adquisición de datos del enlace plug-Zipkin oficiales presentados el lenguaje Java. Del mismo modo que hay JS, versión de lado la colección de plug-

Servidor creado Zipkin

Proporcionada en la demo oficial en la ventana acoplable reflejado bolsa de arranque y tarro de inicio, pero si lo hace, a continuación, desarrollar una introducción personalizada Zipkin servidor, entonces debe ser iniciado por proyecto de auto-dependiente. Las dos primeras formas de iniciar el sitio web oficial tiene un tutorial detallado, no se presenta aquí. A continuación se describe el proyecto de construcción propia para introducir manera dependiente del servidor Zipkin para empezar.

Creación de proyectos SpringBoot

Después de la creación de proyectos SpringBoot relacionados con la introducción del paquete jar servidor Zipkin:

		<!-- zipkin 核心依赖 -->
        <dependency>
            <groupid>io.zipkin.java</groupid> <artifactid>zipkin-server</artifactid> <version>${zipkin-server.version}</version> </dependency> <!-- ui界面 可选 --> <dependency> <groupid>io.zipkin.java</groupid> <artifactid>zipkin-autoconfigure-ui</artifactid> <version>${zipkin-server.version}</version> </dependency> <!-- es存储 可选 --> <dependency> <groupid>io.zipkin.java</groupid> <artifactid>zipkin-autoconfigure-storage-elasticsearch</artifactid> <version>${zipkin-server.version}</version> </dependency> <!-- kafka collector 可选 --> <dependency> <groupid>io.zipkin.java</groupid> <artifactid>zipkin-autoconfigure-collector-kafka</artifactid> <version>${zipkin-server.version}</version> </dependency> 

Configuración es kafka y dirección:

zipkin.collector.kafka.bootstrap-servers=
zipkin.collector.kafka.topic=
zipkin.collector.kafka.groupId=

zipkin.storage.type=elasticsearch
zipkin.storage.elasticsearch.hosts= 

Agregar @EnableZipkinServercomentario

Finalmente configurado en clase SpringBoot inicio @EnableZipkinServernotas

@EnableZipkinServer
@SpringBootApplication
public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); } } 

Hasta el momento, el servidor Zipkin se puede ejecutar en una acumulación completado; desarrollo a medida: alarma, análisis de rendimiento reintrodujo próximo blog. Éstos son algunos valientes de uso;

uso valiente

Uso valiente requieren experto depender unido al final del artículo

valiente lista oficial de plug-ins es mucho, que cubre básicamente el uso diario del enlace: http, RPC, db y así sucesivamente. Este es el apoyo oficial del tapón de middleware:Soporte plug-ins

Http API que solicita el acceso a VincularTrazo

Http acceso a la API a la siguiente vínculo de seguimiento como un ejemplo, necesitamos lugares de configure: demo oficial

/**
 * This adds tracing configuration to any web mvc controllers or rest template clients.
 */
@Configuration
// Importing a class is effectively the same as declaring bean methods
@Import(SpanCustomizingAsyncHandlerInterceptor.class) public class TracingConfiguration extends WebMvcConfigurerAdapter { /** * Configuration for how to send spans to Zipkin * 配置如何发送到zipkin服务器,这里使用http的方式发送 */ @Bean Sender sender() { return OkHttpSender.create("http://127.0.0.1:9411/api/v2/spans"); } /** * Configuration for how to buffer spans into messages for Zipkin * 配置reporter,何时发送到zipkin。触发方式:定时、size大小等 * */ @Bean AsyncReporter<span> spanReporter() { return AsyncReporter.create(sender()); } /** * Controls aspects of tracing such as the service name that shows up in the UI * 发送到zipkin的服务名,同一个应用的多个实例服务名应该相同 */ @Bean Tracing tracing(@Value("${spring.application.name}") String serviceName) { return Tracing.newBuilder() .localServiceName(serviceName) .propagationFactory(ExtraFieldPropagation.newFactory(B3Propagation.FACTORY, "user-name")) .currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder() // puts trace IDs into logs // 可以通过MDC.get("traceId")的方式拿到链路ID .addScopeDecorator(MDCScopeDecorator.create()) .build() ) .spanReporter(spanReporter()).build(); } /** * Allows someone to add tags to a span if a trace is in progress * 允许添加自定义tag到链路中 * */ @Bean SpanCustomizer spanCustomizer(Tracing tracing) { return CurrentSpanCustomizer.create(tracing); } /** Decides how to name and tag spans. By default they are named the same as the http method */ @Bean HttpTracing httpTracing(Tracing tracing) www.motianydl.cn { return HttpTracing.create(tracing); } /** * Creates server spans for http requests * 为http请求自动创建链路或者span * */ @Bean Filter tracingFilter(HttpTracing httpTracing) { return TracingFilter.create(httpTracing); } /** * 为RestTemplate发起的请求自动创建zipkin的链路信息 * */ @Bean RestTemplateCustomizer useTracedHttpClient(HttpTracing httpTracing) { final CloseableHttpClient httpClient = TracingHttpClientBuilder.create(httpTracing).build(); return new RestTemplateCustomizer(www.chuancenpt.com) { @Override public void customize(RestTemplate restTemplate) { restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); } }; } @Autowired SpanCustomizingAsyncHandlerInterceptor webMvcTracingCustomizer; /** Decorates server spans with application-defined web tags */ @Override public void www.51kunlunyule.com addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(webMvcTracingCustomizer); } } 

configuración de núcleo por encima de código es:

  1. remitente: se envía al servidor Zipkin manera: http o kafka
  2. reportero: Reportero de decidir cuándo enviar datos al servidor Zipkin de enlace local
  3. rastreo: muy importante, todos los componentes traza enlace dependen de ella. Incluyendo el desarrollo de su componente de seguimiento propio enlace
  4. httpTracing, filtro: http añadir un enlace a las solicitudes de información

La petición de acceso dubbo RPC VincularTrazo

Debido a que el último paso tiene que enfrentarse a la configuración de núcleo tiene que acompañar bien, así que el enlace dubbo añadido al seguimiento de enlaces es muy simple, proceso de dos pasos:

Presentado por primera vez valiente dubbo sus dependencias:

        <!--  dubbo插件      -->
        <dependency>
            <groupid>io.zipkin.brave</groupid> <artifactid>brave-instrumentation-dubbo-rpc</artifactid> </dependency> 

filtro dubbo Brave y luego añadido a la cadena de filtros Dubbo:

  • Método 1: Agregar dos líneas en el archivo de configuración application.properties:
dubbo.consumer.filter=tracing
dubbo.provider.filter=tracing
  • Método 2: Agregar archivo de configuración XML dubbo dispuestos
<dubbo:consumer filter="tracing" www.luqintang.com />
<dubbo:provider filter="tracing"shentuylzc.cn /> 

Sí, es así de simple!

La operación para añadir VincularTrazo MySQL

operaciones de bases de datos en el anillo de todo el enlace petición es muy importante, porque muchos de los problemas causados ​​por el tiempo de espera de ejecución de SQL base de datos. Es necesario controlar el funcionamiento de la base de datos, para ser configuración específica se refiere a la línea oficial:

/**
 * A MySQL exception interceptor that will annotate spans with SQL error codes.
 *
 * <p>To use it, both TracingQueryInterceptor and TracingExceptionInterceptor must be added by
 * appending <code>?queryInterceptors=brave.mysql8.TracingQueryInterceptor&amp;exceptionInterceptors=brave.mysql8.TracingExceptionInterceptor</code>. */ 

otros enlaces

Al igual que los otros métodos de enlace de acceso, puede hacer referencia a la documentación oficial, no comenzar aquí presentada.

otro

Zipkin serie de artículos

  1. Adición de seguimiento de enlace a la nube Ali complementos / RocketMQ
  2. el desarrollo de Zipkin servidor personalizada capacidades de información estadística, servicio de alarma

sitios web relacionados Zipkin

  • web oficial Zipkin
  • github Zipkin
  • github valiente

Se utiliza para desafiar dependientes

		<!--  核心依赖 -->
        <dependency>
            <groupid>io.zipkin.brave</groupid> <artifactid>brave</artifactid> </dependency> <!-- reporter www.shentuylgw.cn--> <dependency> <groupid>io.zipkin.reporter2</groupid> <artifactid>zipkin-sender-okhttp3</artifactid> </dependency> <dependency> <groupid>io.zipkin.reporter2</groupid> <artifactid>zipkin-sender-kafka</artifactid> </dependency> <!-- 日志依赖 --> <!-- Integrates so you can use log patterns like %X{traceId}/%X{spanId} --> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-context-slf4j</artifactid> </dependency> <!-- spring mvc项目支持 -www.lecaixuanzc.cn-> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-spring-beans</artifactid> </dependency> <!-- mvc插件 --> <!-- Adds the MVC class and method names www.baihuayl7.cn  server spans --> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-instrumentation-spring-webmvc</artifactid> </dependency> <!-- httpclient插件 www.chenghylpt.com  --> <!-- Instruments the underlying HttpClient requests that call the backend --> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-instrumentation-httpclient</artifactid> </dependency> <!-- dubbo插件 www.maidongylgw.cn--> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-instrumentation-dubbo-rpc</artifactid> </dependency> <!-- mysql插件 www.javachenglei.com --> <dependency> <groupid>io.zipkin.brave</groupid> <artifactid>brave-instrumentation-mysql8<www.yongshiyule178.com /artifactid> </dependency>

Supongo que te gusta

Origin www.cnblogs.com/laobeipai/p/12589323.html
Recomendado
Clasificación