三、SpringCloud框架搭建之集成zipkin
一、Zipkin介绍
1.zipkin是什么
zipkin官网:https://zipkin.io/
Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。
2.zipkin主要概念
- Brave
Brave 主要是利用拦截器在请求前和请求后分别埋点。例如 Spingmvc 监控使用 Interceptors,Mysql 监控使用 statementInterceptors。同理 Dubbo 的监控是利用 com.alibaba.dubbo.rpc.Filter 来过滤生产者和消费者的请求。 - traceId
一次请求全局只有一个traceId。用来在海量的请求中找到同一链路的几次请求。比如servlet服务器接收到用户请求,调用dubbo服务,然后将结果返回给用户,整条链路只有一个traceId。开始于用户请求,结束于用户收到结果。 - spanId
一个链路中每次请求都会有一个spanId。例如一次rpc,一次sql都会有一个单独的spanId从属于traceId。 - cs
Clent Sent 客户端发起请求的时间,比如 dubbo 调用端开始执行远程调用之前。 - cr
Client Receive 客户端收到处理完请求的时间。 - ss
Server Receive 服务端处理完逻辑的时间。 - sr
Server Receive 服务端收到调用端请求的时间。
二、Zipkin环境搭建
1、下载运行zipkin
#创建目录并进入目录
mkdir -p /usr/local/zipkin && cd /usr/local/zipkin
#下载zipkin
curl -sSL https://zipkin.io/quickstart.sh | bash -s
#启动zipkin方式1:数据使用内存形式,再次启动历史数据消失
nohup java -jar zipkin.jar &
#启动zipkin方式2:指定ElasticSearch作为持久化存储
nohup java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --DES_HOSTS=http://localhost:9200 &
打开浏览器访问:http://ip:9411/
官网参考:https://zipkin.io/pages/quickstart.html
2、集成maven依赖
父级Pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0</version>
<name>cloud-demo</name>
<packaging>pom</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.cloud-version>Hoxton.SR5</spring.cloud-version>
</properties>
<modules>
<module>producer</module>
<module>consumer</module>
<module>configure</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springcloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- springBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
字模块pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0</version>
</parent>
<groupId>com.cloud</groupId>
<artifactId>consumer</artifactId>
<version>1.0</version>
<name>consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- openFeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、yml配置
server:
port: 8002
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#zipkin地址
zipkin:
base-url: http://127.0.0.1:9411
sleuth:
sampler:
probability: 1 #收集概率 1为全部收集 0.1为 10%概率收集
4、请求接口,查看链路追踪日志
接口:
http://127.0.0.1:8002/openFeignConsumer/getDetail?name=1111
然后查看zipkin界面
三、参考项目源码
当前项目源码地址:
https://gitee.com/wangyue123com_admin/cloud-demo.git
分支为:SpringCloud-zipkin