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

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

代码地址

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

目录结构

SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第1张图片

项目架构

节点 服务 项目名 启动顺序
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

项目架构图

架构图,可以看到,我将所有的服务,都进行了链路监控操作。
SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第2张图片

第一节:搭建链路追踪服务端(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 版本


<dependency>
    <groupId>io.zipkin.javagroupId>
    <artifactId>zipkin-serverartifactId>
    <version>1.30.0version>
dependency>

<dependency>
    <groupId>io.zipkin.javagroupId>
    <artifactId>zipkin-autoconfigure-uiartifactId>
    <version>1.30.0version>
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.0modelVersion>

    <groupId>yellowcong.comgroupId>
    <artifactId>cas-client-springbootartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>cas-client-springbootname>
    <url>http://maven.apache.orgurl>

    <repositories>
        <repository>
            <id>spring-milestonesid>
            <name>Spring Milestonesname>
            <url>https://repo.spring.io/milestoneurl>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
    repositories>

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.10.RELEASEversion>
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eureka-serverartifactId>
            <version>1.3.0.RELEASEversion>
            <exclusions>
                <exclusion>
                    <groupId>javax.servletgroupId>
                    <artifactId>servlet-apiartifactId>
                exclusion>
            exclusions>
        dependency>

        
        <dependency>
            <groupId>io.zipkin.javagroupId>
            <artifactId>zipkin-serverartifactId>
            <version>1.30.0version>
        dependency>

       <dependency>
            <groupId>io.zipkin.javagroupId>
            <artifactId>zipkin-autoconfigure-uiartifactId>
            <version>1.30.0version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

    dependencies>
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>springloadedartifactId>
                        <version>1.2.4.RELEASEversion>
                    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 ,出先,如下界面,表示服务端搭建成功。

SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第3张图片

第二节:子系统如何配置链路追踪

子系统配置链路追踪,需要下面几步:1、配置pom.xml,添加spring-cloud-starter-zipkin依赖,2、配置application.yml 文件,设置zipkin服务器地址。重要说明,对于路由系统(zuul)的application.yml配置的分流操作,zipkin不会追踪的。

1、配置pom.xml

在原来项目的基础上,再添加spring-cloud-starter-zipkin依赖,即可。


 <dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-zipkinartifactId>
    <version>1.3.0.RELEASEversion>
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.0modelVersion>

    <groupId>yellowcong.comgroupId>
    <artifactId>cas-client-springbootartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>

    <name>cas-client-springbootname>
    <url>http://maven.apache.orgurl>

    <repositories>
        <repository>
            <id>spring-milestonesid>
            <name>Spring Milestonesname>
            <url>https://repo.spring.io/milestoneurl>
            <snapshots>
                <enabled>falseenabled>
            snapshots>
        repository>
    repositories>

    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.10.RELEASEversion>
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
    properties>

    <dependencies>

        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eureka-serverartifactId>
            <version>1.3.0.RELEASEversion>
        dependency>

        
         <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-zipkinartifactId>
            <version>1.3.0.RELEASEversion>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

    dependencies>
    <build>
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <dependencies>
                    <dependency>
                        <groupId>org.springframeworkgroupId>
                        <artifactId>springloadedartifactId>
                        <version>1.2.4.RELEASEversion>
                    dependency>
                dependencies>
            plugin>
        plugins>
    build>
project>

2、配置application.yml

指定ziplink的服务器地址,percentage,应采样的请求百分比。例如1.0 - 100%的请求应该被抽样。精度仅为全数(即不支持0.1%的痕迹)。springcload 默认percentage是0.1,大白话将,就是我访问10次,就有一次被链路追踪到,但是,我为了实现效果 ,设置为了1,实际上线环境切记保持管网配置即可,不然实在 太消耗资源了。

添加下面的配置,
SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第4张图片

下面是一个服务提供的子系统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 ,可以看到所有的服务都启动了
SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第5张图片

让后,访问http:://yellowcong.com:8765/feign/hi/xx(zuul服务) 和http:://yellowcong.com:8765/hi/xx (消费服务) 后,然后再访问http://yellowcong.com:8762 的zipkin控制台,因为访问后,链路追踪才会有记录,如果不访问,就没有追踪信息了。

下图可以看出,我访问了zipkin的控制台,只记录了 消费服务,以及提供服务的,没有记录路由服务(zuul)的路由调用信息。
SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第6张图片

下图是服务信息中,没有zuul的服务。
SpringCloud之服务链路追踪(Spring Cloud Sleuth) |第九章 -yellowcong_第7张图片

参考文章

1、史上最简单的SpringCloud教程 | 第九篇: 服务链路追踪(Spring Cloud Sleuth)

你可能感兴趣的:(springcloud)