美文网首页
spring-cloud微服务项目实战(10)-集成sleuth

spring-cloud微服务项目实战(10)-集成sleuth

作者: 爱编程的凯哥 | 来源:发表于2019-02-17 05:20 被阅读45次

    目的

    部署zipkin服务,配合sleuth进行调用分析

    简介

    zipkin是Twitter的开源的分布式跟踪系统,基于Dapper的论文设计而来。主要功能就是收集系统的调用数据,进行分析.论文参考http://bigbully.github.io/Dapper-translation/,其实现框架如下:

    工具名称 提供商 类型 源码地址
    Zipkin twitter 开源 https://github.com/openzipkin/zipkin
    pinpoint naver 开源 https://github.com/naver/pinpoint
    appdash sourcegraph 开源 https://github.com/sourcegraph/appdash
    cat 大众点评 开源 https://github.com/dianping/cat
    hydra 京东 开源 https://github.com/odenny/hydra
    鹰眼 阿里 闭源 -
    oneAPM oneapm 闭源 -

    开工

    1. 各系统添加zipkin依赖
        <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
       </dependency>
    
    1. application.yml中添加zipkin配置
    spring:
      Jackson:
        serialization:
          indent-output: true
      application:
        name: udm-server
      zipkin:
    #我本地部署的zipkin服务用的9411端口
        base-url: http://localhost:9411
      sleuth:
        sampler:
          percentage: 1.0
    
    1. 新建zipkin-dog项目module,我们将采用mysql作为数据存储(不配置,默认会存储到内存中),本次未集成mq或kafka等异步组件,有需要后续会介绍,依赖添加
    <?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>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.9.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>open.template.work</groupId>
        <artifactId>zipkin-dog</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>zipkin-dog</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Edgware.SR2</spring-cloud.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-autoconfigure-ui</artifactId>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-server</artifactId>
            </dependency>
            <dependency>
                <groupId>io.zipkin.java</groupId>
                <artifactId>zipkin-storage-mysql</artifactId>
                <version>2.4.1</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
        <dependencyManagement>
            <dependencies>
                <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>
    </project>
    
    
    1. 更新zipkin-dog到application.yml配置文件,我用的本地mysql数据库
    server:
      port: 9411
    spring:
      datasource:
        driver-class-name:  com.mysql.jdbc.Driver
        url: jdbc:mysql://local.p2.cn:3306/zipkin
        username: root
        password: yeepay.com
    zipkin:
      storage:
        type: mysql
    
    1. 附加步,去掉udm-client中的当时的自定义负载均衡配置,测试发现配置了自定义的负载后,再集成zipkin,feign有偶尔找不到服务的bug,所以去掉
    #udm-server:
    #  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    
    
    ---
    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableFeignClients(basePackages = "open.template.work.udm.client.feign")
    @EnableHystrix
    public class UdmClientApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UdmClientApplication.class, args);
        }
    
    //
    //  @Bean
    //  public IRule ribbonRoundRobinRule() {
    //      return new RandomRule();
    //  }
    
    
    }
    
    

    6.启动zipkin-dog,重启其他各相应服务,切记所有需要zipkin记录调用链的服务都要添加1、2步的配置

    1. 验收


      zipkin展示

    再次重启zipkin-dog,数据依然存在,查看数据库已有请求数据,但spanid可能和日志打印不太一样,因为日志打印未16进制,数据库存储为bigint。

    1. 附,为了提高性能可以集成mq或kafka等异步组件,本章暂未展示

    完工!

    相关文章

      网友评论

          本文标题:spring-cloud微服务项目实战(10)-集成sleuth

          本文链接:https://www.haomeiwen.com/subject/mormsqtx.html