1. Sleuth
Sleuth 是一个组件,专门用于记录链路数据的开源组件
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
引入依赖,当我们调用服务时,控制台打印了如下的日志
[order-service,3f56eedd64dd06cc,3b587ae59f8f1a0b,false]
1)第一个值:spring.application.name的值
2)第二个值:3f56eedd64dd06cc,Sleuth 生成的一个 ID,叫 Trace ID,用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID
3)第三个值:3b587ae59f8f1a0b、Span ID 基本的工作单元,获取元数据,如发送一个http
4)第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。
注意:调用服务时会发现,只有第一次调用时显示了信息,以后再调用就不显示,为了解决这个问题,你可以在代码里加一些日志输出,比如:
package com.jwen.order_service.service.impl; import com.jwen.order_service.domain.ProductOrder;import com.jwen.order_service.service.ProductOrderService;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ProductOrderServiceImpl implements ProductOrderService { private final Logger logger = LoggerFactory.getLogger(getClass()); @Override public ProductOrder save(int userId, int productId) { logger.info("ProductOrderServiceImpl save"); return null; } }
2. Zipkin
大规模分布式系统的 APM 工具(Application Performance Management),基于 Google Dapper 的基础实现,和 Sleuth 结合可以提供可视化 Web 界面分析调用链路耗时情况。
Zipkin 组成:Collector、Storage、Restful API、Web UI 组成。官网:https://zipkin.io/
同类型产品还有:鹰眼(EagleEye)、CAT、Pinpoint、tackDriver Trace (Google)
我们采用运行 jar 包的方式启动 Zipkin,首先去官网下载 jar 包
然后用 java 命令启动 jar 包
java -jar zipkin.jar
3. 使用 Zipkin+Sleuth 业务分析调用链路分析
仅仅是启动 Zipkin 还不能使用,还需要和 Sleuth 整合,告诉 Zipkin 可以分析哪些服务
Spring Cloud 官方文档:http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_sleuth_with_zipkin_via_http
Sleuth 收集跟踪信息通过 http 请求发送给 Zipkin Server,Zipkin Server 进行跟踪信息的存储以及提供 Rest API 即可,Zipkin UI调用其 API 接口进行数据展示。默认存储是内存,可也用 mysql、或者 elasticsearch 等存储。
1)加入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
里面包含 spring-cloud-starter-sleuth、spring-cloud-sleuth-zipkin
2)配置 zipkin.base-url
3)配置采样百分比 spring.sleuth.sampler
配置文件 application.yml 添加以下配置
#服务的名称
spring:
application:
name: order-service
#zipkin服务所在地址
zipkin:
base-url: http://localhost:9411/
#配置采样百分比,开发环境可以设置为1,表示全部,生产就用默认
sleuth:
sampler:
probability: 1
当我们访问测试的服务:http://localhost:9000/apigateway/order/api/v1/order/save?user_id=1&product_id=2
我们打开http://localhost:9411/zipkin/,可以查看到服务调用情况
推荐阅读:
https://github.com/openzipkin/zipkin
https://zipkin.io/pages/quickstart.html
http://blog.daocloud.io/cncf-3/
https://www.zhihu.com/question/27994350