1. Sleuth
官方文档:
Sleuth 是一个组件,专门用于记录链路数据的开源组件
org.springframework.cloud spring-cloud-starter-sleuth
引入依赖,当我们调用服务时,控制台打印了如下的日志
[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;@Servicepublic 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 组成。官网:
同类型产品还有:鹰眼(EagleEye)、CAT、Pinpoint、tackDriver Trace (Google)
我们采用运行 jar 包的方式启动 Zipkin,首先去官网下载 jar 包
然后用 java 命令启动 jar 包
java -jar zipkin.jar
3. 使用 Zipkin+Sleuth 业务分析调用链路分析
仅仅是启动 Zipkin 还不能使用,还需要和 Sleuth 整合,告诉 Zipkin 可以分析哪些服务
Spring Cloud 官方文档:
Sleuth收集跟踪信息通过 http 请求发送给 Zipkin Server,Zipkin Server 进行跟踪信息的存储以及提供 Rest API 即可,Zipkin UI调用其 API 接口进行数据展示。默认存储是内存,可也用 mysql、或者 elasticsearch 等存储。
1)加入依赖
org.springframework.cloud spring-cloud-starter-zipkin
里面包含 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
当我们访问测试的服务:
我们打开,可以查看到服务调用情况
推荐阅读: