服务链路追踪---Sleuth

Sleuth:日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。

当服务与服务之间调用复杂时,SpringCloud Sleuth配合Zipkin提供的界面,可以直观的分析追踪数据,这篇文章介绍SpringCloud Sleuth与Zipkin配合使用。

新建Zipkin Server,加入zipkin依赖,pom文件如下:



    4.0.0

    com.dalaoyang
    springcloud_zipkin
    0.0.1-SNAPSHOT
    jar

    springcloud_zipkin
    springcloud_zipkin

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            io.zipkin.java
            zipkin-server
        

        
            io.zipkin.java
            zipkin-autoconfigure-ui
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



配置文件只配置了一个端口号:

##端口号
server.port=9000

启动类加入注解@EnableZipkinServer,来声明是一个ZipkinServer,启动项目,可以看到控制的log已经变化了,如图

服务链路追踪---Sleuth_第1张图片
image

然后在浏览器访问http://localhost:9000/zipkin/dependency/,如下图

服务链路追踪---Sleuth_第2张图片
image

为了方便我们观察,分别创建了两个项目,first_service(9001),second_service(9002),pom文件加入spring-cloud-starter-zipkin依赖,
first_service(9001)pom文件代码如下:



    4.0.0

    com.dalaoyang
    springcloud_zipkin_firstservice
    0.0.1-SNAPSHOT
    jar

    springcloud_zipkin_firstservice
    springcloud_zipkin_firstservice

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-devtools
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.cloud
            spring-cloud-starter-zipkin
            1.3.1.RELEASE
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



配置文件,其中spring.zipkin.base-url指定zipkin server地址

server.port=9001
spring.zipkin.base-url=http://localhost:9000
spring.application.name=first_service

启动类加上@RestController注解方便测试,然后新建两个方法,一个用于被调用,一个调用其他,代码如下:

package com.dalaoyang;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@RestController
public class SpringcloudZipkinFirstserviceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudZipkinFirstserviceApplication.class, args);
    }

    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Value("${spring.application.name}")
    String serviceName;

    @RequestMapping("/callSecond")
    public String callSecond(){
        return restTemplate().getForObject("http://localhost:9002/second", String.class);
    }


    @RequestMapping("/first")
    public String first(){
        return serviceName;

    }
}

到这里first_service(9001)代码展示完成,接下来是second_service(9002)代码,内容不在赘述,和first_service(9001)类似。

pom文件



    4.0.0

    com.dalaoyang
    springcloud_zipkin_secondservice
    0.0.1-SNAPSHOT
    jar

    springcloud_zipkin_secondservice
    springcloud_zipkin_secondservice

    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.9.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
        Edgware.SR1
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.cloud
            spring-cloud-starter-zipkin
            1.3.1.RELEASE
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    




配置文件:

server.port=9002
spring.zipkin.base-url=http://localhost:9000
spring.application.name=second_service

启动类:

package com.dalaoyang;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@RestController
public class SpringcloudZipkinSecondserviceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudZipkinSecondserviceApplication.class, args);
    }


    @Bean
    @LoadBalanced
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Value("${spring.application.name}")
    String serviceName;

    @RequestMapping("/second")
    public String second(){
        return serviceName;
    }

    @RequestMapping("/callFirst")
    public String callFirst(){
        return restTemplate().getForObject("http://localhost:9001/first",String.class);
    }
}

启动这两个项目,浏览器访问http://localhost:9001/callSecond,然后观看Zipkin Server页面,可以看到调用关系,请求细节等,如下图:

服务链路追踪---Sleuth_第3张图片
image
服务链路追踪---Sleuth_第4张图片
image
服务链路追踪---Sleuth_第5张图片
image
服务链路追踪---Sleuth_第6张图片
image

源码下载 :大老杨码云

你可能感兴趣的:(服务链路追踪---Sleuth)