服务链路追踪 —— SpringCloud Sleuth

服务,链路,追踪,springcloud,sleuth · 浏览次数 : 9

小编点评

## Sleuth 简介 Sleuth 是一个用于监控微服务调用链路的工具,它可以帮助您了解每个微服务的调用关系以及整个调用链路的性能。 **核心概念:Trace** * 一组 Span 的集合,表示一条调用链路。 * 每条 Span 包含服务调用数据的摘要、时间、关键值注释、Span 的 ID 和进度 ID。 * 每个 Span 对应一个服务调用。 **主要功能:** * 跟踪调用链路。 * 收集并存储服务调用数据。 * 构建微服务调用链路的视图。 * 可监控调用链路的性能。 **主要组件:** * **Collector:**接收和收集应用程序传输的数据。 * **Storage:**存储收集到的数据。 * **API:**提供简单的 JSON API 获取数据。 * **Zipkin:**构建微服务调用链路的视图。 **使用步骤:** 1. 在项目中添加 Sleuth 的依赖。 2. 在 Spring Boot 项目中添加 Sleuth 配置。 3. 在微服务项目中添加 Sleuth 配置。 4. 启动 Sleuth 服务器。 **控制台:** * 打开 Sleuth 控制台,选择 Dependencies 选项卡,点击 RUN QUERY 查看具体请求链路。 * 选择 Find a trace 选项卡,单击 RUN QUERY,可查看具体的请求信息。 **其他:** * Zipkin 是一个开源的分布式追踪系统,可用于对微服务架构的调用链路进行监控追踪。 * Sleuth 可以与其他监控工具集成,例如 Prometheus、Grafana 等。

正文

Sleuth 简介

随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败

这时需要一个能够监控微服务整个调用链的工具,跟踪一个用户请求的全过程(包括数据采集、数据传输、数据存储、数据分析、数据可视化),捕获这些跟踪数据,构建微服务整个调用链的视图,Spring Cloud Sleuth 就是这样一个工具

服务追踪系统的实现主要包括三个部分:

  • 埋点数据收集:负责在服务端进行埋点,以收集服务调用的上下文数据
  • 实时数据处理:负责将收集到的链路信息按照 Traccld 和 Spanld 进行串联和存储
  • 数据链路展示:把处理后的服务调用数据按照调用链的形式展示出来

下面我们再来看一下 Sleuth 的核心概念

  • Trace:一组 Span 的集合,表示一条调用链路,例如,服务 A 调用服务 B,再调用服务 C,A-B-C 链路就是一条 Trace,每个服务(例如 B)就是一个Span,如果在服务 B 中再加入两个线程,分别调用了 D、E,那么 D、E 就是 B 的子 Span
  • TraceId:全局跟踪 ID,用来标记一次完整服务调用,所以一次服务调用相关的 Span 的 Traceld 都是相同的
  • Span:基本工作单元,通过 64 位 ID 唯一标识,Span 还包含其他数据信息,比如摘要、时间藏事件、关键值注释 (tags)、Span 的 ID 以及进度 ID(通常是 IP 地址)
  • Id:Span 的 ID,只要做到一个 Traceld 下唯一即可
  • Parentld:父 Span 的 ID,调用有层级关系,所以 Span 作为调用节点的存储结构,也有层级关系
  • Annotation:基本标注列表,用来及时记录一个事件的存在,一个标注可以理解成 Span 生命周期中重要时刻的数据快照,比如一个标注中一般包含发生时刻(timestamp)、事件类型(value)、端点(endpoint)等信息,事件类型包括以下几种:
    • cs(Clien Sent):客户端发起一个请求,这个 Annotion 注解描述 Span 的开始
    • sr(ServerReceived):服务端获得请求并准备开始处理它,sr 减去 cs 即网络延迟时间
    • ss(Server Sent):表明请求处理的完成(请求返回客户端),ss 减去 sr 即服务端需要的处理请求时间
    • cr(Client Received):表明 Span 的结束,客户端成功接收到服务端的回复,cr 减去 cs 即客户端从服务端获取回复的所有时间

ZipKin 简介

Zipkin 是一个开源的分布式追踪系统,用于对服务间的调用链路进行监控追踪。在微服务架购下,用户的一个请求可能涉及很多个后台服务间的调用。Zipkin 可以追踪(trace)调用链路、收集在各个微服务上所花的时间等信息,并上报到 Zipkin 服务器

Zipkin 提供可插拔数据存储方式:In-Memory、MySQL、Cassandra 以及 Elasticsearch,为了方便在开发环境直接采用 In-Memory 方式进行存储,生产数据量大的情况则推荐使用 Elasticsearch

Zipkin 主要由四个核心组件组成:

  • Collector:接收或收集各应用传输的数据
  • Storage:存储接收或收集过来的数据,当前支持 Memory、MySQL、Cassandra、ElasticSearch 等,默认存储在内存中
  • API(Query):负责查询 Storage 中存储的数据,提供简单的 JSON API 获取数据,主要提供给 Web UI 使用
  • UI:官方默认提供的一个图形用户界面

Zipkin 以 Trace 结构表示对一次请求的追踪,把每个 Trace 拆分为若于个有依赖关系的 Span,可以把每个处理请求的服务理解为一个 Span。Zipkin 除了可以查看 Span 的依赖关系之外,还以瀑布图的形式显示每个 Span 的耗时情况,可以清晰地看到各个服务的性能状况。打开每个 Span,还有更详细的数据以键值对的形式呈现,而且这些数据可以在装备应用的时候自行添加

Zipkin 下载地址:https://repo1.maven.org/maven2/io/zipkin/zipkin-server/

这里选择 zipkin-server-2.24.3-exec.jar 版本,既然是一个 jar 包,那么直接使用 java 命令运行即可,访问:http://localhost:9411/zipkin/ 可查看控制台

如果使用 MySQL 进行数据存储,需要事先搭建好 MySQL 数据库,执行建表脚本,可在 GitHub 获取:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

启动 ZipKin,连接 MySQL,具体启动命令如下:

java -jar .\zipkin-server-2.24.3-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=test_db --MYSQL_USER=root --MYSQL_PASS=123

Spring Cloud Sleuth 整合 ZipKin

在 server-01 和 server-02 项目分别添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

在 server-01 和 server-02 项目分别添加配置

spring:
  zipkin:
    base-url: http://localhost:9411
    enabled: true
  sleuth:
    enabled: true

如果 spring-cloud-sleuth-zipkin 位于类路径中,则该应用程序会生成并收集与 Zipkin 兼容的 Trace,默认情况下,应用程序通过 HTTP 将 ace 信息发送到本地主机(端口 9411)上的 ZipKin 服务器,可以通过设置 spring.zipkin.base-url 来配置服务的地址

在 server-01 使用 Feign 调用 server-02 接口

// server-01
@Slf4j
@RestController
public class TestCon {

    @Autowired
    private Server02FeignClient server02FeignClient;

    @GetMapping("/test/getConfigByFeign")
    public void getConfigByFeign() {
        server02FeignClient.getConfig();
    }
}

// server-02
@Slf4j
@RestController
public class TestCon {

    @Value("${test.value}")
    private String testValue;

    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${server.port}")
    private String port;

    @GetMapping("/test/getConfig")
    public void getConfig() {
        log.info("testValue: {} by {}-{}", testValue, applicationName, port);
    }
}

查看 ZipKin 控制台,选择 Dependencies 选项卡,点击 RUN QUERY 查看具体请求链路,选择 Find a trace 选项卡,单击 RUN QUERY,可查看具体的请求信息

与服务链路追踪 —— SpringCloud Sleuth相似的内容:

服务链路追踪 —— SpringCloud Sleuth

Sleuth 简介 随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整

SpringCloud-ZipKin搭建保姆级教程

服务链路追踪 一、服务追踪说明 微服务架构是通过业务来划分服务的,使⽤REST调⽤。对外暴露的⼀个接⼝,可能需要 很多个服务协同才能完成这个接⼝功能,如果链路上任何⼀个服务出现问题或者⽹络超 时,都会形成导致接⼝调⽤失败。 随着业务的不断扩张,服务之间互相调⽤会越来越复杂,它们之间的调⽤关系也许如下

[转帖]JAVA⽣态的微服务⽆侵⼊链路追踪

https://v5.6-docs.rainbond.com/docs/v5.3/advanced-scenarios/devops/pinpoint/#pinpoint%E7%AE%80%E4%BB%8B 一. ⽆侵⼊链路追踪APM⼯具​ 应⽤性能管理(Application Performanc

DHorse的链路追踪

目前,DHorse的链路追踪功能是通过SkyWalking来实现。实现原理是DHorse在部署应用时,通过指定SkyWalking的Agent来收集服务的调用链路信息。下面就来具体看一下DHorse如何使用Agent的功能。 链路追踪配置 在“系统配置”菜单,打开“链路追踪模板”菜单,如图1所示:

[转帖]微服务集成skywalking实现全链路日志追踪方案

目录 1、安装部署skywalking 1.1 环境准备 1.2 部署步骤 2、微服务整合skywalking实现链路监控 2.1 下载skywalking官方版本 2.2 将微服务引入skywalking监控 2.3 以上配置完成后启动服务即可实现链路监控 3、通过logback+ELFK实现全链

免费广告效果监测服务,实现全链路营销效果跟踪

广告主们都希望以低预算获得更高的广告投放收益,在投放广告后,想要了解高回报的渠道,往往需要收集并分析繁杂的数据,耗时耗力。通过广告监测,广告主可以准确的追溯用户渠道来源,看到不同流量的用户价值,分析广告投放效果,从而指导广告的出价和投放素材的优化,把预算花在刀刃上。 针对广告主们广告监测的需求,华为

对象存储服务中对象业务的非标接口

本文中讨论的对象存储服务及接口,主要和AWS S3对标。 AWS S3提供的对象存储业务,与传统的POSIX规范相比,舍弃了很多特性,比如: 文件类型 硬链接 软链接 目录 文件相关的操作 追加写 随机写 截断 修改名称 目录相关的操作 创建目录 修改名称 删除目录 元数据 时间 crtime即创建

混沌演练实践(二)-支付加挂链路演练

当前微服务架构下,各个服务间依赖高,调用关系复杂,业务场景很少可以通过一个系统来实现,常见的业务场景实现基本涉及多个上下游系统,要保证整体链路的稳定性,需要尽量减少系统之间的耦合性,避免因为单点失效引起整个链路的故障。

[转帖]基于腾讯云微服务引擎(TSE) ,轻松实现云上全链路灰度发布

https://my.oschina.net/u/4587289/blog/8570699 1. 概述 软件开发过程中,应用发布非常频繁,通常情况下,开发或运维人员会将系统里所有服务同时上线,使得所有用户都使用上新版本。这样的操作时常会导致发布失败,或因发布前修改代码,线上出现 Bug。 假设一个在

企业应用可观测性利器!华为云CodeArts APM发布

摘要:近日,华为云全链路应用性能管理服务CodeArts APM全新上线,提供端到端的全链路性能管理服务,涵盖前端监控、应用性能监控,全面拥抱开源生态。 本文分享自华为云社区《企业应用可观测性利器!华为云CodeArts APM发布》,作者:华为云头条。 当前,企业数字化转型和业务互联网化逐渐加深,