zoukankan      html  css  js  c++  java
  • 浅尝Spring Cloud Sleuth

    Spring Cloud Sleuth提供了分布式追踪(distributed tracing)的一个解决方案。其基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系。利用这些信息,可以方便地分析服务调用链路和服务间的依赖关系。

    Only Sleuth

    在Spring Tool Suite的文件菜单中,点击新建Spring Starter Project。

    在请求处理方法内加上一行日志代码。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @SpringBootApplication
    public class SpringcloudSleuthApplication {
    
    	private static Logger log = LoggerFactory.getLogger(SpringcloudSleuthApplication.class);
    	@RequestMapping("/")
    	public String home() {
    		log.info("Handling home");
    		return "Hello World";
    	}
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringcloudSleuthApplication.class, args);
    	}
    }
    

    设定应用程序端口及名称。

    server.port=10001
    
    spring.application.name=sleuth-demo-without-zipkin
    

    启动程序并浏览页面后,可以看到日志信息里多了点东西。

    [sleuth-demo-without-zipkin,6c00dba1679ee164,6c00dba1679ee164,false]

    这一串数据里包含四个部分

    • appname - 应用程序名称
    • traceId - 追踪系统中的唯一标识
    • spanId - 具体操作的唯一标识
    • exportable - 是否日志要导出到Zipkin

    Sleuth + Zipkin

    Zipkin Server

    要想把追踪数据发送到Zipkin上,首先需要建立一个Zipkin Server应用程序,在pom.xml里加上如下依赖:

    <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-server</artifactId>
        <version>2.11.5</version>
      </dependency>
      
      <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
        <version>2.11.5</version>
      </dependency>
    </dependencies>
    

    然后在启动类加上@EnableZipkinServer标记。

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import zipkin2.server.internal.EnableZipkinServer;
    
    @EnableZipkinServer
    @SpringBootApplication
    public class SpringcloudZipkinServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(SpringcloudZipkinServerApplication.class, args);
    	}
    }
    

    application.properties文件中可修改默认端口,server.port=10000

    打开相关页面,如下:

    Zipkin Client

    再新建一个应用程序。

    启动程序代码基本一样。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @SpringBootApplication
    public class SpringcloudZipkinApplication {
    
    	private static Logger log = LoggerFactory.getLogger(SpringcloudZipkinApplication.class);
    	@RequestMapping("/")
    	public String home() {
    		log.info("Handling home");
    		return "Hello World";
    	}
    	
    	public static void main(String[] args) {
    		SpringApplication.run(SpringcloudZipkinApplication.class, args);
    	}
    }
    

    application.properties文件里加上Zipkin Server的地址,同时为了每次都将数据传入Zipkin,需要把spring.sleuth.sampler.probability的值改为1.0。

    server.port=10002
    
    spring.application.name=sleuth-demo-with-zipkin
    spring.zipkin.base-url=http://localhost:10000
    spring.sleuth.sampler.probability=1.0
    

    启动Zipkin Client后,可以看到Zipkin Server页面上多了一条追踪数据。

    再次刷新Zipkin Client页面,又会有条新的数据。

    在看控制台的日志记录,exportable项变成了true,说明数据已传入Zipkin。

  • 相关阅读:
    utf-8编码汉字转换成对于的16进制 10进制对于的值
    CentOS 6和CentOS 7命令区别
    dedecms二次开发帮助文档地址
    DEDE整站动态化或整站静态化设置方法
    dede数据库表结构和dedecms数据库字段说明
    c++如何编写线程安全的DLL
    Socket中常见的几个转换函数(htonl,htons,ntohl,ntohs,inet_addr,inet_ntoa)
    Winsock 示例
    命名管道的使用方式:消息模式/字节模式
    命名管道-简单的例子
  • 原文地址:https://www.cnblogs.com/kenwoo/p/9716282.html
Copyright © 2011-2022 走看看