Spring Cloud项目中实现分布式日志链路追踪

大家好,我是升仔

在微服务架构中,分布式日志链路追踪对于监控和理解服务间复杂的调用关系至关重要。本文详细介绍如何在Spring Cloud项目中使用Spring Cloud Sleuth和Zipkin实现分布式链路追踪。

搭建Zipkin Server

Zipkin Server是存储和展示追踪数据的中心。使用Docker是搭建Zipkin Server的一种简便方法。

使用Docker运行Zipkin

运行以下命令以启动Zipkin服务器:

复制代码
docker run -d -p 9411:9411 openzipkin/zipkin

这条命令会在本地的9411端口提供Zipkin服务。

创建Spring Boot微服务

我们将创建两个Spring Boot微服务应用,一个作为服务提供者(user-service),另一个作为服务消费者(client-app)。

服务提供者:user-service

添加依赖

user-servicepom.xml中添加Spring Cloud Sleuth和Zipkin的依赖:

复制代码
<dependencies>
    <!-- Spring Cloud Sleuth and Zipkin -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
创建应用主类

定义应用的主类UserServiceApplication

复制代码
@SpringBootApplication
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}
创建控制器

定义一个简单的REST控制器UserController

复制代码
@RestController
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/user/{id}")
    public String getUserById(@PathVariable String id) {
        logger.info("Fetching user with id {}", id);
        return "User " + id;
    }
}
配置文件

application.yml中配置应用名和Zipkin服务器地址:

复制代码
server:
  port: 8081
spring:
  application:
    name: user-service
  zipkin:
    base-url: http://localhost:9411

服务消费者:client-app

添加相同的依赖

client-apppom.xml中添加与user-service相同的依赖。

创建应用主类

定义应用的主类ClientAppApplication

创建控制器

定义一个REST控制器ClientController来调用user-service

复制代码
@RestController
public class ClientController {

    private final RestTemplate restTemplate;

    public ClientController(RestTemplateBuilder builder) {
        this.restTemplate = builder.build();
    }

    @GetMapping("/fetch-user/{id}")
    public String fetchUser(@PathVariable String id) {
        return restTemplate.getForObject("http://localhost:8081/user/" + id, String.class);
    }
}
配置文件

application.yml中配置应用名和Zipkin服务器地址:

复制代码
server:
  port: 8080
spring:
  application:
    name: client-app
  zipkin:
    base-url: http://localhost:9411

测试链路追踪

  1. 启动Zipkin Server。
  2. 分别启动user-serviceclient-app
  3. 访问client-app/fetch-user/{id}端点来间接调用user-service
  4. 在Zipkin UI(通常位于http://localhost:9411)查看追踪信息。
最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

相关推荐
Java成神之路-2 小时前
Spring Cloud 微服务契约先行:为什么 Controller 建议要实现 Feign 接口?
spring·spring cloud·微服务
霸道流氓气质2 小时前
分布式系统设计:技术解析与实践
分布式
ACP广源盛139246256735 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Flittly5 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
风流 少年6 小时前
Spring AI 2.0:MCP
java·后端·spring
风流 少年7 小时前
Spring AI 2.0:Tool
java·python·spring
爱敲键盘的猴子7 小时前
Java Spring -- 声明式事务控制
java·spring·事务控制
汽车仪器仪表相关领域9 小时前
KRYPTON坚固型IP67 EtherCAT总线数据采集模块:工业级分布式采集方案
分布式·功能测试·汽车·压力测试·可用性测试
霸道流氓气质11 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
naierfengdian13 小时前
分布式风电助力乡村能源转型的技术路径
分布式·能源