Springboot 2.0.x 引入链路跟踪Sleuth及Zipkin
Zipkin是一种分布式跟踪系统,它有助于收集解决微服务架构中得延迟问题所需的时序数据,它管理这些数据的收集和查找。
1. 架构概述
跟踪器存在于您的应用程序中,并记录有关发生的操作的时间和元数据。他们经常使用库,因此它们的使用对用户是透明的。例如,已检测的Web服务器会在收到请求时以及何时发送响应时进行记录。收集的跟踪数据称为Span。
编写仪器是为了安全生产并且开销很小。出于这个原因,它们只在带内传播ID,以告诉接收器正在进行跟踪。Zipkin带外报告已完成的跨度,类似于应用程序异步报告度量标准的方式。
例如,在跟踪操作并且需要发出传出的http请求时,会添加一些标头来传播ID。标头不用于发送操作名称等详细信息。
将数据发送到Zipkin的检测应用程序中的组件称为Reporter。记者通过几种传输之一将跟踪数据发送到Zipkin收集器,这些收集器将跟踪数据保存到存储中。稍后,API会查询存储以向UI提供数据。
Zipkin作为一个收藏家,一旦跟踪数据到达Zipkin收集器守护程序,它就会被Zipkin收集器验证,存储和索引查找。
Zipkin查询服务,一旦数据被存储和索引,我们需要一种方法来提取它。查询守护程序提供了一个简单的JSON API,用户查找和检索跟踪。
参考官网:https://zipkin.io/
2. 快速开始
本文,我们将介绍构建和启动Zipkin实例,以便在本地检查Zipkin。根据官网显示,有三种选择:使用Java、Docker或从源代码运行。
如果您熟悉Docker,这是首选的方法。如果您不熟悉Docker,请尝试通过Java或源代码运行。
Zipkin分为两端,一个是Zipkin服务端,一个是Zipkin客户端(微服务应用)。客户端会配置服务端的URL地址,一旦服务间调用的时候,会被配置在微服务里面的Sleuth的监听器监听,并生成相应的Trace和Span信息发送给服务端。
发送的方式主要有两种,一种是Http报文的方式,还有一种是消息总线的方式如:RabbitMQ
我们这边采用的是Http报文的方式。
Zipkin服务端构建
1. 引入依赖
解析:主要引入两个Jar:zipkin-server、zipkin-autoconfigure-ui,其中对应的版本为:2.12.2。
zipkin-server 本身包含了 log4j,如果系统已经引入log4j包,为了避免冲突,需要在此处将本jar包去除。
<!-- zipkin-->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>${zipkin.version}</version>
</dependency>
<!-- 引入zipkin-server 图形化界面 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>${zipkin.version}</version>
<scope>runtime</scope>
</dependency>
server:
port: 10011
spring:
application:
name: sipsd-zipkin-server
#================================eureka客户端基础配置==============================
eureka:
instance:
preferIpAddress: true
ipAddress: 127.0.0.1
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
instanceId: ${spring.cloud.client.ipAddress}:${server.port}
client:
service-url:
defaultZone: http://127.0.0.1:20001/eureka/
healthcheck:
enabled: true
management:
metrics:
web:
server:
auto-time-requests: false
注:如果配置文件中没有添加“management.metrics.web.server.auto-time-requests=false”,默认为 开启自动检测请求
在启动zipkin-server过程中,会报以下问题:
java.lang.IllegalArgumentException: Prometheus requires that all meters with the same name have the same set of tag keys. There is already an existing meter containing tag keys [method, status, uri]. The meter you are attempting to register has keys [exception, method, status, uri].
解决方案:
a、配置文件中增加:management.metrics.web.server.auto-time-requests=false设置为false,默认为true
b、重写WebMvcTagsProvider,目的是去掉 WebMvcTags.exception(exception)
4. 启动zipkin-server服务
package com.sinosoft;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import zipkin2.server.internal.EnableZipkinServer;
/**
* @ClassName: ZipkinApplication
* @Description: 调用链服务启动入口
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableZipkinServer
public class ZipkinApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinApplication.class, args);
}
}
Zipkin客户端构建
1. 引入依赖
<!-- zipkin 调用链 spring-cloud-starter-zipkin 已经包含了 spring-cloud-starter-sleuth-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin </artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
2. 配置文件
# 调用链 Sleuth + ZipKin
server:
port: 7013
spring:
application:
name: sipsd-zipkin-client2
zipkin:
base-url: http://127.0.0.1:10011/ #指定zipkin的服务器
locator:
discovery:
enabled: true #支持通过服务发现定位主机名
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0 #0.1-1.0 1.0采样率为100%,采集服务的全部追踪数据
#================================eureka客户端基础配置==============================
eureka:
instance:
preferIpAddress: true
ipAddress: 127.0.0.1
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 10
instanceId: ${spring.cloud.client.ipAddress}:${server.port}
client:
service-url:
defaultZone: http://127.0.0.1:20001/eureka/
healthcheck:
enabled: true
Zipkin效果展示
zipkin服务端及客户端启动之后,访问:http://localhost:10011/zipkin
分享到:
相关推荐
Java微服务链路追踪之Zipkin搭建 微服务链路追踪是微服务治理方案中的一项必修课,SpringCloud的组件其实使用很简单,但是在生产环境中真正令人头疼的问题往往是软件维护,接口在微服务间的调用究竟哪个环节出现了...
本教程将聚焦于如何利用Spring Cloud、Elasticsearch (ES)、Kafka和Zipkin搭建这样的系统。首先,我们逐一解析这些组件的关键知识点。 **1. Spring Cloud** Spring Cloud是基于Spring Boot设计的一系列微服务框架,...
spring cloud zipkin服务链路跟踪server相关jar包,下载完成之后使用java -jar zipkin-server-2.12.9-exec.jar方式运行,就能启动zipkin-server,不建议自己搭建zipkin-server
总的来说,`zipkin-server-2.12.9-exec.jar` 是启动 Zipkin 服务器的关键组件,它使得我们能够在本地快速搭建一个分布式追踪系统,帮助我们理解和优化微服务架构中的性能瓶颈。通过集成 Zipkin 客户端,我们可以获取...
上一篇我们了解了Zipkin的基础知识以及Zipkin的服务端搭建。 在使用过程中很多同学发现了他的秘密,Zipkin模式将数据保存在内存中,当我们重启后,追踪数据便会丢失。其实,Zipkin也支持将追踪数据保存到MySql或者...
二、Zipkin 服务端的搭建与配置 1. **安装**:通常通过 Docker 或者直接下载源码进行编译安装。 2. **配置存储**:根据需求选择合适的存储后端,并在配置文件中设置相关参数。 3. **启动服务**:运行 Zipkin 服务端...
标签 "zipkin" 表明这个 JAR 文件与 Zipkin 项目紧密相关,可能是在搭建 Zipkin 服务器时需要用到的关键组件。 关于压缩包内的 "zipkin" 文件,这可能是 Zipkin 的配置文件或者额外的资源文件,用于定制服务器的...
Zipkin 是一个分布式追踪系统,它...综上,"zipkin-server-2.10.1-exec.zip" 是一个用于搭建 Zipkin 分布式追踪系统的工具,包含了运行 Zipkin 服务器所需的全部资源,通过它可以有效地监控和优化微服务架构的性能。
总的来说,`zipkin-server-2.23.2-exec.jar` 是一个用于运行 Zipkin 分布式追踪系统的可执行文件,通过它,你可以快速地搭建起一个追踪系统,帮助诊断和优化你的微服务架构。在使用过程中,合理配置和集成至关重要,...
zipkin-server 端工具,主要是爲了顯示web端的可見。是比較好的zookeeper可視化工具,部署和搭建也是比較簡單的
在搭建Spring Cloud Sleuth+Zipkin服务链路追踪之前,提一下一个版本问题,在SpringBoot2.0之前的版本,Zipkin服务端,也就是可视化界面,需要自己新建项目引入依赖搭建,如同搭建eureka注册中一样;但是在...
通过下载和运行"zipkin-server-2.12.9-exec.jar",你可以搭建一个本地的Zipkin服务器,结合Spring Cloud Actuator实现对微服务的链路监控。这样,你就能更好地理解和优化你的Spring Cloud应用的性能,确保服务的稳定...
SpringCloud 可视化链路追踪系统 Zipkin 部署过程 本文主要介绍了 SpringCloud 可视化链路追踪系统 Zipkin 部署过程,并提供了详细的示例代码,对大家的学习或者工作具有一定的参考学习价值。 什么是 Zipkin? ...
在 Spring Boot 2.0 版本之后,官方已不推荐自己搭建Zipkin服务端了,而是直接提供了编译好的 jar 包。2020 - 09 - 28
本文将详细介绍如何利用这两个工具搭建一套完整的链路监控系统,并对`zipkin-server-2.12.9-exec.zip`这个压缩包中的核心组件进行解析。 首先,我们要知道SpringCloud Sleuth 是Spring Cloud生态下的一个子项目,它...
Spring Boot是基于Spring框架的快速开发工具,简化了Spring应用的初始搭建以及开发过程。它默认配置了很多常见的功能,如嵌入式Web服务器、数据源、MVC、安全等,使得开发者可以快速地构建一个独立运行的、生产级别...
使用Udash-Core,开发者可以快速搭建出美观的Web应用,同时享受到Scala带来的静态类型检查和强大的类型推断,从而减少代码错误,提高代码质量。 结合标签"开源项目",我们可以知道Zipkin和Udash都是遵循开放源代码...