基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪

本文涉及的产品
可观测链路 OpenTelemetry 版,每月50GB免费额度
简介: Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。

你好,这里是专栏“SpringCloud2023实战”。

跟踪问题并非新事物。应用程序开发人员长期以来一直在创造追踪其应用程序状态的方法。在大部分时间里,开发人员不得不自己创建必要的追踪框架。

2016年,Spring Cloud团队创建了一个追踪库,可以帮助许多开发人员。它被称为Spring Cloud Sleuth。Spring团队意识到追踪可以从Spring Cloud中分离出来,并创建了Micrometer Tracing项目,这实质上是Spring Cloud Sleuth的与Spring无关的副本。Micrometer Tracing在2022年11月发布了1.0.0 GA版本,自那以后一直在稳步改进。Micrometer Tracing为最流行的跟踪器库提供了一个简单的门面,让可以在不受供应商限制的情况下为基于JVM的应用程序代码进行仪表化。它旨在几乎不增加跟踪收集活动的开销,同时最大限度地提高跟踪工作的可移植性。Micrometer Tracing 在SpringBoot中充当了类似日志领域内 slf4j 门面的角色。

也就是说Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用Micrometer Tracing在微服务中作为服务追踪的工具。

下文将基于Micrometer Tracing门面和zipkin追踪实现来说明springcloud2023的服务追踪。

Micrometer Tracing集成之Zipkin控制台(Dashboard)

Zipkin 提供了一个可视化的服务追踪查看界面,以收集、存储和展示跨多个服务的请求链路数据。

以下是Zipkin的一些主要特点和功能:

  • 分布式追踪:Zipkin可以跟踪多个微服务之间的请求和响应,并将它们组合成一个完整的请求链路。通过追踪每个请求经过的服务和调用时间,可以了解到请求在系统中的流向和性能瓶颈。
  • 可视化界面:Zipkin提供了一个直观的可视化界面,用于展示请求链路和相关的统计信息。可以通过该界面查看请求的执行时间、调用关系和依赖服务的性能指标。
  • 故障排查:当系统中某个服务出现故障或延迟时,Zipkin可以帮助快速定位问题的根本原因。通过分析请求链路数据,可以识别负责引起问题的服务,并深入了解其性能状况。
  • 集成支持:Zipkin可以与多种编程语言和框架集成,包括Java、Python、Ruby等。它提供了一些客户端库和插件,用于在应用程序中记录和发送跟踪数据到Zipkin服务。
  • 可扩展性:Zipkin支持水平扩展,可以根据需要增加更多的收集器、存储节点和查询节点,以处理大规模的请求链路数据。

Zipkin安装

  • zipkin提供了一个docker镜像,使用如下命令可以快速启动。
docker run -d -p 9411:9411 openzipkin/zipkin
  • 通过java运行控制台。从zipkin release 页面下载最新版本的控制台 jar 包。
  • 启动控制台。zipkin控制台是一个标准的 Spring Boot 应用,以 Spring Boot 的方式运行 jar 包即可。
java -jar zipkin.jar

访问zipkin

  • 默认的端口是 http://127.0.0.1:9411/ ,输入地址访问即可。
  • 通过 serviceName=banana-client5-tracing 可以查询对应服务的服务追踪记录。

Micrometer Tracing集成之客户端

引入pom.xml

  • 引入Micrometer Tracing主要是引入 io.micrometer 相关的包和 zipkin 相关的包。

  • 引入micrometer的版本控制包。

<properties>
    <micrometer-tracing.version>1.1.6</micrometer-tracing.version>
</properties>
<!--导入micrometer-tracing的bom-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bom</artifactId>
            <version>${micrometer-tracing.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 引入相关的服务依赖lib。
<dependencies>
    <!-- 微服务追踪门面 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing</artifactId>
    </dependency>
    <!-- 微服务追踪-实现由于Micrometer Tracing是一个门面工具自身并没有实现完整的链路追踪系统,具体的链路追踪另外需要引入的是第三方链路追踪系统的依赖,下面就以Zipkin 链路追踪系统为例:-->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-brave</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-reporter-brave</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.reporter2</groupId>
        <artifactId>zipkin-sender-urlconnection</artifactId>
    </dependency>
</dependencies>

修改配置

  • 新增配置文件 application.yml,配置主要是 management 下面的配置,这个配置主要是因为 spring-boot-starter-actuator 集成了相关的自动配置。
spring.application.name: banana-client5-tracing
spring:
  cloud:
    zookeeper:
      connect-string: localhost:2181
server:
  port: 10115
  servlet:
    context-path: /app
## 设置zipkin和brave配置和tracing的日志信息
logging.pattern.level: "%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]"
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      # 采样率的概率,100%采样
      probability: 1.0

修改启动类

  • 启动类不需要特殊修改。
package io.rainforest.banana.client1;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Application {
   
    public static void main(String[] args) {
   
        SpringApplication.run(Application.class, args);
    }
}

接口demo

  • 通过访问 http://localhost:10115/app/swagger-ui.html ,输入账号密码 yulin/123yl. 就可以访问到最新的接口文档,验证服务追踪是否开启成功。
package io.rainforest.banana.app.web.demo;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@Slf4j
public class HelloWorld {
   
    @GetMapping("/")
    public String hello(String hello){
   
        log.info("this is a test");
        return hello+" world";
    }

    @GetMapping("/hello2")
    @ResponseBody
    public List<String> hello2(String hello){
   
        List<String> res = new ArrayList<>();
        res.add("test1");
        res.add("test2");
        res.add(hello);
        return res;
    }
}
  • 访问日志说明:
2023-11-14T15:19:55.801+08:00  INFO [banana-client5-tracing,65531f9bcb2bd1d503084d7cfb690fc1,03084d7cfb690fc1] 31496 --- [  XNIO-1 task-4] i.r.banana.app.web.demo.HelloWorld       : this is a test
##  [banana-client5-tracing,65531f9bcb2bd1d503084d7cfb690fc1,03084d7cfb690fc1] 其中第一个为应用名称,第二个为traceId,第三个参数为spanId。
  • 在控制面板http://127.0.0.1:9411/zipkin/ 查看访问记录:

输出文档如下:

[
    {
   
        "traceId": "655317933197d6e7680e579112306826",
        "id": "680e579112306826",
        "kind": "SERVER",
        "name": "http get /",
        "timestamp": 1699944339735395,
        "duration": 62339,
        "localEndpoint": {
   
            "serviceName": "banana-client5-tracing",
            "ipv4": "192.168.31.173"
        },
        "tags": {
   
            "exception": "none",
            "http.url": "/app/",
            "method": "GET",
            "outcome": "SUCCESS",
            "status": "200",
            "uri": "/"
        }
    }
]

关于作者

来自全栈程序员nine的探索与实践,持续迭代中。

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
相关文章
|
3月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
27天前
|
消息中间件 存储 Java
SpringCloud基础9——服务异步通信-高级篇
消息可靠性、死信交换机、惰性队列、MQ集群
SpringCloud基础9——服务异步通信-高级篇
|
16天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
34 1
|
2月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
2月前
|
数据可视化 Java Nacos
Sleuth+Zipkin 实现 SpringCloud 链路追踪
【8月更文挑战第9天】Sleuth+Zipkin 实现 SpringCloud 链路追踪
69 1
Sleuth+Zipkin 实现 SpringCloud 链路追踪
|
2月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
2月前
|
存储 Java Spring
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?
|
3月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
69 3
|
2月前
|
Java 应用服务中间件 数据库
SpringCloud:服务保护和分布式事务详解
SpringCloud:服务保护和分布式事务详解
104 0
|
2月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。