首页 > 经验记录 > 实现起来超简单的zipkin+sleuth微服务链路跟踪方案

实现起来超简单的zipkin+sleuth微服务链路跟踪方案

说是简单,tm那是找到解决方案之后才简单。
可能是我用的SpringCloud版本太新了,自己配zipkin server把我给配吐了。
又是版本冲突、又是注册不进去Eureka、又是访问ui报错、又是找不到ObjectProvider.orderedStream()方法的,我从百度搜到必应搜到google搜到Stack Overflow,整了一个上午。
我就想着,这玩意怎么能这么恶心呢?感觉像写maven的时候狂报xml错误那种感觉。
 
后来怼到zipkin官网 zipkin.io 上去,卧槽,快速入门里有这么句话:
If you have Java 8 or higher installed, the quickest way to get started is to fetch the latest release as a self-contained executable jar:

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

 
 
我佛了。然后又查了些关于高版本资料,关于 Zipkin 的服务端,在使用 Spring Boot 2.x 版本后,官方就不推荐自行定制编译了,反而是直接提供了编译好的 jar 包来给我们使用,这是官方提供的演示: https://github.com/openzipkin/docker-zipkin
白搞了半天,原来只要自己去下他的jar包然后启动这个服务就行了,至于如何将微服务跟踪的数据存到mysql/kafka/es 里边去,也可以直接用启动参数指定。
那我还自己配个蛇皮的zipkin server。
 
可以去这个网址: https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/ 选择下载zipkin的各个不同版本的启动jar,我随便找了一个,启动很顺畅,进入 localhost:9411 可以访问ui。
那服务端就算这样配完了,全部流程: 下载 –> 使用 java -jar 命令运行下载的jar
 
服务端搞完后,就到客户端了。
微服务链路跟踪嘛,需要得到请求经过了哪些微服务,了解请求流转的具体参数,那么客户端自然就是一个个不同的微服务了。
 
以我之前的user微服务为例,配置都一样。
build.gradle中加上这一行:

compile("org.springframework.cloud:spring-cloud-starter-zipkin")

本来应该是spring-cloud-starter-sleuth,spring-cloud-sleuth-zipkin这两个依赖,但是spring-cloud-starter-zipkin这个集成了前面那俩,和前面那俩依赖效果是一样的。
加完依赖后只需要指定zipkin服务地址就好了
我的applicayion.yml:

server:
  port: 8088
spring:
  application:
    name: sc-demo-microservice-user #这个名字会注册到 Eureka 里去
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.8.113:3306/scdemo?serverTimezone=Asia/Shanghai
    username: root
    password: 614
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0 #采样百分比,这里设置的是100%
logging:
  level:
    root: info
    org.springframework.web.servlet.DispatcherServlet: debug
#mybatis实体类名
mybatis:
  type-aliases-package: com.skypyb.sc.entity
  configuration:
  #到下划线的表字段自动映射成驼峰命名法
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mybatis/mapper/*.xml
#Actuato 配置
management:
  endpoint:
# 暴露shutdown功能
#    shutdown:
#      enabled: true
  endpoints:
    web:
      exposure:
        include: '*'  #暴露哪些端点
        exclude:      #隐藏哪些端点
#Eureka client端配置
eureka:
  client:
    service-url:
        defaultZone: http://user:614@localhost:8080/eureka/,http://user:614@localhost:8081/eureka/
  instance:
    prefer-ip-address: true #将自己ip注册到Eureka Server

 
spring.zipkin.base-url 指定地址。zipkin端口号默认9411。
spring.sleuth.sampler.probability 设置采样百分比,采样百分比就是会按比例来跟踪/保存多少条请求数据,因为在线上运行的话那数据是相当庞大的。默认设置的是0.1,也就是百分之十,我这设置百分之百是为了本地调试。
 
然后就完事了
对,没问题。所有微服务开起来,Eureka、Zuul等等,当然还有Zipkin官方服务。网页请求几个API,再去 localhost:9411 刷新一下,就可以看到每一条请求的详细信息了。
 
实现微服务跟踪需要的步骤:
1、 下载官方推荐的jar包
2、运行起来
3、改下微服务,加个依赖加个配置
完事了,如果想要保存数据到es/mysql/kafka里分析,可以设置启动参数,具体可以去看官方、github
 
 
我的使用Gradle搭的SpringCloud Finchley.SR3 项目整体地址:
https://github.com/skypyb/codeDemo/tree/master/sc-demo-microservice

           


EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00