首页 > 技术文章 > Spring Cloud 核心组件——链路追踪

jwen1994 2019-09-19 22:23 原文

1. Sleuth 

官方文档:http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#sleuth-adding-project

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

https://yq.aliyun.com/articles/514488?utm_content=m_43347

https://blog.csdn.net/jrn1012/article/details/77837710

 

推荐阅读