spring cloud学习进阶篇:Spring Cloud Sleuth + Zipkin 实现分布式跟踪解决方案
2018-03-18 11:15
911 查看
简述
使用 spring cloud 用到最多的是各种rest服务调用,Twitter的Zipkin 是一种实现分布式跟踪解决方案,Sleuth则是用来共方便的集成Zipkin。调用跟踪系统的业务场景
随着服务的拆分,系统的模块变得越来越多,不同的模块可能由不同的团队维护,一个请求可能会涉及到几十个服务的协同处理, 牵扯到多个团队的业务系统,那么如何快速准确的定位到线上故障?比较成熟的解决方案是通过调用链的方式,把一次请求调用过程完整的串联起来,这样就实现了对请求调用路径的监控。故障快速定位
通过调用链跟踪,一次请求的逻辑轨迹可以用完整清晰的展示出来。
开发中可以在业务日志中添加调用链ID,可以通过调用链结合业务日志快速定位错误信息。
各个调用环节的性能分析
在调用链的各个环节分别添加调用时延,可以分析系统的性能瓶颈,进行针对性的优化。
各个调用环节的可用性,持久层依赖等
通过分析各个环节的平均时延,QPS等信息,可以找到系统的薄弱环节,对一些模块做调整,如数据冗余等。
数据分析等
调用链是一条完整的业务日志,可以得到用户的行为路径,汇总分析应用在很多业务场景。
Spring Cloud Sleuth
Spring Cloud Sleuth为Spring Cloud实现分布式跟踪解决方案。Zipkin
为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。使用
Zipkin可以通过http收集信息,也可以通过mq收集信息Zipkin server代码
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xx.xxx.server</groupId> <artifactId>zipkin-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>zipkin-server</name> <description>zipkin追踪服务</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <zipkin.version>2.3.1</zipkin.version> <spring-cloud.version>Edgware.SR2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-storage-mysql</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-core</artifactId> </dependency> <!--spring boot--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.4.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml
server: port: 9411 spring: application: name: zipkin-server sleuth: enabled: false #rabbitmq设置,如果使用http收集信息可以不用设置 rabbitmq: host: 172.16.10.71 port: 5672 username: admin password: admin listener: simple: concurrency: 1 max-concurrency: 10 acknowledge-mode: auto #数据库设置,如果不使用数据库可以不需要设置,需要创建zipkin数据库 datasource: name: zipkin driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false username: root password: 123456 # 会自动生成数据库表结构 schema: classpath:/mysql.sql initialize: true continue-on-error: true zipkin: storage: type: mysql
java
@SpringBootApplication @EnableZipkinStreamServer public class ZipkinServerApplication{ public static void main(String[] args) { new SpringApplicationBuilder(ZipkinServerApplication.class).run(args); System.out.println("Server start succ"); } }
client 代码
pom.xml添加sleuth&zipkin依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-core</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency>
application.yml
#spring spring: zipkin: enabled: true # zipkin server地址,如果使用mq收集,这个就不要配置 base-url: http://localhost:9411 # 应采样的请求百分比。例如1.0= 100%的请求应该被抽样。精度仅为全数(即不支持0.1%的痕迹)。开发过程使用1.0,生产根据实际情况设置 sleuth: sampler: percentage: 1.0 rabbitmq: host: 172.16.10.71 port: 5672 username: admin password: admin listener: simple: concurrency: 1 max-concurrency: 10 acknowledge-mode: auto
先启动server,然后启动应用服务,然后在应用服务上调用其他服务
打开server中zipkin监控面板:http://localhost:9411
相关文章推荐
- springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
- 使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
- springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
- springcloud 分布式服务跟踪sleuth+zipkin
- Spring Cloud学习:05分布式配置中心(Spring Cloud Config)
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)
- spring-cloud-sleuth+zipkin追踪服务实现
- Spring Cloud | 学习系列 Spring Cloud中基于Sleuth的参数透传功能探索
- SpringCloud微服务实战之分布式服务跟踪Sleuth
- Spring Boot + Spring Cloud 构建微服务系统(八):分布式链路追踪(Sleuth、Zipkin)
- 分布式服务跟踪及Spring Cloud的实现
- SpringCloud系列:利用SpringCloud Sleuth和Zipkin实现分布式服务调用链跟踪(一)
- spring cloud 学习(8) - sleuth & zipkin 调用链跟踪
- SpringCloud之分布式服务跟踪Spring Cloud Sleuth实例
- SpringCloud学习之sleuth&zipkin【二】
- Spring cloud系列十四 分布式链路监控Spring Cloud Sleuth
- SpringCloud系列:分布式服务调用链跟踪整合Zipkin、RabbitMQ、Elasticsearch(二)
- SpringCloud学习之sleuth&zipkin
- Spring Cloud应用进行服务追踪分析(Zipkin和spring cloud Sleuth)
- Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin