SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong
2018-03-17 19:35
1211 查看
服务链路追踪的目的,是为了解决服务过多,导致服务的引用效率排查困难的,而且这些服务都是系统之间不断的调用,如果不找一个工具去查看调用的规则以及逻辑,会导致微服务系统难以进行下去,所以SpringCloud也考虑到了这一点,开发了这个Zipkin项目,这个链路追踪服务,搭建起来不是特别的费劲,我在追踪过程中发现,这个Zipkin只对于服务调用有效,对于Zuul(路由),没有啥效果,不会监控zuul的分流操作(配置在application.yml的分流规则)。本文分三节,第一节 ,讲解如何搭建链路追踪服务端(Zipkin服务端),第二节,讲解子系统如何配置链路追踪,第三节,自然是测试环节了。
下面是完整的pom.xml配置文件
下面是一个服务提供的子系统eureka-client的pom.xml配置文件,不用直接拷贝,只需要配置上面我说的那一段到服务即可,就添加了支持
添加下面的配置,
下面是一个服务提供的子系统eureka-client的配置文件
让后,访问http:://yellowcong.com:8765/feign/hi/xx(zuul服务) 和http:://yellowcong.com:8765/hi/xx (消费服务) 后,然后再访问http://yellowcong.com:8762 的zipkin控制台,因为访问后,链路追踪才会有记录,如果不访问,就没有追踪信息了。
下图可以看出,我访问了zipkin的控制台,只记录了 消费服务,以及提供服务的,没有记录路由服务(zuul)的路由调用信息。
下图是服务信息中,没有zuul的服务。
代码地址
https://gitee.com/yellowcong/springcloud/tree/master/chapter9
目录结构
项目架构
节点 | 服务 | 项目名 | 启动顺序 |
---|---|---|---|
yellowcong.com:8761 | eureka注册服务 | eureka-server | 1 |
yellowcong.com:8762 | 链路追踪服务 | zipkin-server | 2 |
yellowcong.com:8763 | 服务提供1 | eureka-client | 3 |
yellowcong.com:8764 | 服务提供2 | eureka-client | 4 |
yellowcong.com:8765 | 消费服务1(feign+rest) | feign-server | 5 |
yellowcong.com:8766 | 消费服务2(ribbon) | ribbon-server | 6 |
yellowcong.com:8767 | 路由服务 | zuul-server | 7 |
项目架构图
架构图,可以看到,我将所有的服务,都进行了链路监控操作。第一节:搭建链路追踪服务端(Zipkin服务端)
搭建zipkin服务端,并不是很难,搭建的步骤:1、配置pom.xml,添加zipkin的依赖包,2、配置application.yml,3、配置启动器,添加@EnableZipkinServer注解,开启服务端
1、配置pom.xml
配置zipkin需要添加zipkin-server,
zipkin-autoconfigure-ui依赖包。ps:zipkin的版本和springcloud的版本不是一致的,这点是需要注意的。我eureka用的是1.3.0.RELEASE版本,而zipkin使用的是1.30.0 版本
<!-- 导入zipkin 的依赖包 --> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> <version>1.30.0</version> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <version>1.30.0</version> </dependency>
下面是完整的pom.xml配置文件
<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>yellowcong.com</groupId>
<artifactId>cas-client-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cas-client-springboot</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 引用父类依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$-->
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 导入zipkin 的依赖包 --> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> <version>1.30.0</version> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <version>1.30.0</version> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 添加spring的插件, 就可以直接通过 mvn spring-boot:run 运行了 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2、配置application.yml
配置zipkin的服务名称,地址,以及注册中心,同普通的项目没差太多。#配置eureka 的注册中心 eureka: client: serviceUrl: defaultZone: http://yellowcong.com:8761/eureka/ # 注册服务的端口 server: port: 8762 #配置当前服务的名称 spring: application: name: service-zipkin
3、配置启动器
添加@EnableZipkinServer注解,开启配置服务
package com.yellowcong.main; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import zipkin.server.EnableZipkinServer; /** * @author yellowcong */ @SpringBootApplication // @EnableEurekaClient 表示这个是一个client @EnableEurekaClient @EnableZipkinServer public class ConfigMain { public static void main(String[] args) { SpringApplication.run(ConfigMain.class, args); } }
4、测试访问zipkin
启动eurake的注册服务端,然后启动zipkin项目,访问服务器地址:http://yellowcong.com:8762 ,出先,如下界面,表示服务端搭建成功。第二节:子系统如何配置链路追踪
子系统配置链路追踪,需要下面几步:1、配置pom.xml,添加spring-cloud-starter-zipkin依赖,2、配置application.yml 文件,设置zipkin服务器地址。重要说明,对于路由系统(zuul)的application.yml配置的分流操作,zipkin不会追踪的。
1、配置pom.xml
在原来项目的基础上,再添加spring-cloud-starter-zipkin依赖,即可。
<!-- 添加对zipkin的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency>
下面是一个服务提供的子系统eureka-client的pom.xml配置文件,不用直接拷贝,只需要配置上面我说的那一段到服务即可,就添加了支持
<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>yellowcong.com</groupId>
<artifactId>cas-client-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cas-client-springboot</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 引用父类依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$-->
</dependency>
<!-- 添加对zipkin的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 添加spring的插件, 就可以直接通过 mvn spring-boot:run 运行了 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2、配置application.yml
指定ziplink的服务器地址,percentage,应采样的请求百分比。例如1.0 - 100%的请求应该被抽样。精度仅为全数(即不支持0.1%的痕迹)。springcload 默认percentage是0.1,大白话将,就是我访问10次,就有一次被链路追踪到,但是,我为了实现效果 ,设置为了1,实际上线环境切记保持管网配置即可,不然实在 太消耗资源了。添加下面的配置,
下面是一个服务提供的子系统eureka-client的配置文件
#配置eureka 的注册中心 eureka: client: serviceUrl: defaultZone: http://yellowcong.com:8761/eureka/ # 注册服务的端口 server: port: 8763 #配置当前服务的名称 spring: application: name: service-client zipkin: base-url: http://yellowcong.com:8762 sleuth: sampler: percentage: 1.0
3、测试zipkin
启动服务后,访问 http://yellowcong.com:8761 ,可以看到所有的服务都启动了让后,访问http:://yellowcong.com:8765/feign/hi/xx(zuul服务) 和http:://yellowcong.com:8765/hi/xx (消费服务) 后,然后再访问http://yellowcong.com:8762 的zipkin控制台,因为访问后,链路追踪才会有记录,如果不访问,就没有追踪信息了。
下图可以看出,我访问了zipkin的控制台,只记录了 消费服务,以及提供服务的,没有记录路由服务(zuul)的路由调用信息。
下图是服务信息中,没有zuul的服务。
参考文章
1、史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)相关文章推荐
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- SpringCloud: 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- Spring Boot + Spring Cloud 构建微服务系统(八):分布式链路追踪(Sleuth、Zipkin)
- Spring Cloud Sleuth服务链路追踪(zipkin)(转)
- SpringCloud 教程 (二) 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- SpringCloud教程九:服务链路追踪(SpringCloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 企业级 SpringCloud 教程 (九) 服务链路追踪(Spring Cloud Sleuth)
- 服务链路追踪(Spring Cloud Sleuth)
- 史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)
- 服务链路追踪(Spring Cloud Sleuth)
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十二):链路追踪(Sleuth、Zipkin)
- Spring Cloud搭建微服务架构----使用Zipkin做服务链路追踪
- Spring Cloud Sleuth 链路追踪