您的位置:首页 > 编程语言 > Java开发

SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong

2018-03-17 19:35 1211 查看
服务链路追踪的目的,是为了解决服务过多,导致服务的引用效率排查困难的,而且这些服务都是系统之间不断的调用,如果不找一个工具去查看调用的规则以及逻辑,会导致微服务系统难以进行下去,所以SpringCloud也考虑到了这一点,开发了这个Zipkin项目,这个链路追踪服务,搭建起来不是特别的费劲,我在追踪过程中发现,这个Zipkin只对于服务调用有效,对于Zuul(路由),没有啥效果,不会监控zuul的分流操作(配置在application.yml的分流规则)。本文分三节,第一节 ,讲解如何搭建链路追踪服务端(Zipkin服务端),第二节,讲解子系统如何配置链路追踪,第三节,自然是测试环节了。

代码地址

https://gitee.com/yellowcong/springcloud/tree/master/chapter9


目录结构



项目架构

节点服务项目名启动顺序
yellowcong.com:8761eureka注册服务eureka-server1
yellowcong.com:8762链路追踪服务zipkin-server2
yellowcong.com:8763服务提供1eureka-client3
yellowcong.com:8764服务提供2eureka-client4
yellowcong.com:8765消费服务1(feign+rest)feign-server5
yellowcong.com:8766消费服务2(ribbon)ribbon-server6
yellowcong.com:8767路由服务zuul-server7

项目架构图

架构图,可以看到,我将所有的服务,都进行了链路监控操作。



第一节:搭建链路追踪服务端(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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐