微服务架构 | 10.3 使用 Zipkin 可视化日志追踪

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Zipkin 允许开发人员以图形方式查看事务占用的时间量,并分解在调用中涉及的每个微服务所用的时间。在微服务架构中,Zipkin 是识别性能问题的宝贵工具;

前言

参考资料
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》

Zipkin 允许开发人员以图形方式查看事务占用的时间量,并分解在调用中涉及的每个微服务所用的时间。在微服务架构中,Zipkin 是识别性能问题的宝贵工具;


1. Zipkin 基础知识

1.1 Zipkin 链路监控的原理

Zipkin 链路监控的原理

  • 上图表示一请求链路,一条链路通过 Trace Id 唯一标识,Span 标识发起的请求信息,各 Span 通过 Parent id 关联起来;
  • Span 表示调用链路来源,通俗的理解 Span 就是一次请求信息;
  • 简略理解图如下:

Zipkin 链路监控的原理1
Zipkin 链路监控的原理2


2. 下载 Zipkin 服务器

Spring Cloud 从 F 版起不需要自己构建 Zipkin Server 了,只需调用 jar 包即可;

2.1 下载 zipkin-server-2.12.9-exec.jar 包

2.2 启动 Zipkin Server

  • 使用命令启动 Zipkin Server:java -jar zipkin-server-2.12.9-exec.jar

Zipkin 运行界面

2.3 *Docker 部署方式

也可以使用 Docker 部署省去下载的麻烦;
  • docker run -d -p 9411:9411 openzipkin/zipkin


3. 手动安装和配置 Zipkin 服务器

虽然 Spring Cloud 从 F 版起不需要自己构建 Zipkin Server,但这里还是提供手动构建的方法;

3.1 引入 pom.xml 依赖文件

<!-- 用于创建 Zipkin 服务器所需的核心类 -->
<dependency>
  <groupId>io.zipkin.java</groupId>
  <artifactId>zipkin-server</artifactId>
</dependency>
<!-- 用于运行 Zipkin 服务器的 UI 部分所需的核心类 -->
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>

3.2 在主程序类上添加注解

  • @EnableZipkinServer:创建相对简单。缺点是 Zipkin 服务器不可用时数据会丢失;

    • 注意:该注解不是 Spring Cloud 提供的,是 Zipkin 提供的;
  • @EnableZipkinStreamServer:需要创建和配置正在跟踪的服务以发布消息到 RabbitMQ 或 Kafka。优点是即使 Zipkin 服务器不可用,也可以继续收集跟踪数据,直到 Zipkin 服务器可用于处理消息记录;

    • 该注解是 Spring Cloud 提供的;

3.3 配置跟踪数据存储方式

  • Zipkin 支持四种不同的后端数据存储,如下:

    • 内存数据;
    • MySQL;
    • Cassandra;
    • Elasticsearch;
  • 默认情况下 Zipkin 使用内存数据来存储跟踪数据,可以进行配置到其他存储方式;


4. 使用 Zipkin 进行分布式跟踪

4.1 添加 pom.xml 依赖文件

需要给 Zuul 网关服务、消费者服务、提供者服务等所有服务添加依赖;
<!-- 包含在服务中启用 sleuth 的基本库 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

<!-- 【可选】当开发人员需要以编程方式与 sleuth 交互时添加 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-core</artifactId>
</dependency>

<!-- 与 Zipkin 集成 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

4.2 修改 application.yml 配置文件

在每个想与 Zipkin 进行通信的服务的 application.yml 配置文件中进行修改;
spring:
  zipkin:
    baseUrl: http://localhost:9411  #Zipkin 服务器的地址
  sleuth:
    sampler:
      percentage: 1 #设置跟踪级别,也即定义每个服务应该向 Zipkin 写入数据的频率,默认 10%
  • spring.sleuth.sampler.percentage = 0 表示不发送任何事物数据;
  • 上述 spring.sleuth.sampler.percentage = 1 属性也可用下面的代码替代。表示为所有服务发送跟踪信息;
@Bean
public Sampler defaultSampler() {
    return new AlwaysSampler();
}

4.3 访问 9411 端口查看可视化日志

  • 先调用服务 API;
  • 再进入:http://localhost:9411
  • 即可查看 Zipkin 的日志捕获跟踪结果;
  • Zipkin 界面可以查询一些基本的信息:

Zipkin 界面查询基本信息
Zipkin 界面查询基本信息

  • 点击事务后可以查看更详细的信息:

点击事务查看更详细信息
在这里插入图片描述

  • 点击组织服务跨度,可以查看调用中的额外细节:

点击组织服务跨度查看调用中的额外细节

  • 点击依赖,可以查看依赖关系:

点击依赖查看依赖关系



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
22小时前
|
Kubernetes API 开发者
构建高效微服务架构:后端开发的新范式
【5月更文挑战第2天】 随着现代软件开发的演进,传统的单体应用已难以满足快速变化的业务需求和敏捷开发的挑战。本文探讨了如何通过构建高效的微服务架构来提升后端开发的灵活性、可维护性和扩展性。我们将深入分析微服务的核心组件,包括服务拆分、容器化、API网关和持续集成/持续部署(CI/CD)等关键技术,并讨论它们如何共同作用以支持复杂的业务场景和云原生应用的需求。
6 1
|
22小时前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
2天前
|
监控 安全 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第30天】随着现代软件开发的复杂性日益增加,传统的单体应用架构已难以满足快速迭代与灵活部署的需求。微服务架构作为一种新兴的设计理念,它通过将一个大型应用程序拆分成一系列小而专注的服务来提供解决方案。本文旨在探讨如何构建一个高效且可靠的微服务架构系统,涵盖从设计原则、技术选型到部署实践的全方位知识,为后端开发者提供一种全新的开发思路和实践指导。
|
2天前
|
Java 调度 开发者
构建高效微服务架构:后端开发的新趋势深入理解操作系统之进程调度策略
【4月更文挑战第30天】 随着企业数字化转型的不断深入,传统的单体应用逐渐不能满足快速迭代和灵活部署的需求。微服务架构以其高度模块化、独立部署和易于扩展的特性,成为现代后端开发的重要趋势。本文将探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术选型以及可能面临的挑战。
|
2天前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在企业数字化转型中的关键作用构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 随着企业加速其数字化进程,云原生架构已成为支撑复杂、可伸缩和灵活应用的骨干。本文探讨了云原生技术的崛起,重点分析了其在促进业务敏捷性、提高运营效率及推动创新方面的核心价值。通过深入剖析云原生生态系统的关键技术组件,如容器化、微服务、持续集成/持续部署(CI/CD)和DevOps实践,揭示了企业如何利用这些技术来构建和维护高度可用且动态的IT环境。文章还提出了一个多维度的采纳框架,帮助企业评估和实施云原生解决方案,以实现真正的业务价值。 【4月更文挑战第30天】在现代软件开发的快速演变中,微服务架构已经成为一种领先的设计模式,用于构建可扩展、灵活且容错的应用程序。与传
|
2天前
|
消息中间件 监控 负载均衡
构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 在现代软件开发的浪潮中,微服务架构已成为一种广泛采用的设计模式。它通过将大型应用程序拆分成一组小型、松散耦合的服务来增强系统的可维护性、可扩展性和敏捷性。本文将探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术选型、以及实现过程中的最佳实践。我们将深入讨论微服务间的通信机制、数据一致性问题、服务发现与负载均衡策略,以及如何确保系统的安全性和监控。
|
2天前
|
运维 监控 数据可视化
探索微服务架构下的系统监控策略
【4月更文挑战第30天】 在当今快速迭代和持续部署盛行的软件发展环境中,微服务架构以其灵活性、可扩展性成为众多企业的首选。然而,随着服务的细分与增多,传统的监控手段已不足以应对复杂多变的系统状态。本文将深入探讨在微服务架构中实施有效系统监控的策略,包括指标的选择、数据的收集与处理,以及监控信息的可视化等方面。通过分析现有问题,并提出切实可行的解决方案,旨在帮助开发者构建更健壮、更易于管理的微服务系统。
|
2天前
|
机器学习/深度学习 安全 网络安全
数字堡垒的构筑者:网络安全与信息安全的深层剖析构建高效微服务架构:后端开发的新趋势
【4月更文挑战第30天】在信息技术高速发展的今天,构建坚不可摧的数字堡垒已成为个人、企业乃至国家安全的重要组成部分。本文深入探讨网络安全漏洞的本质、加密技术的进展以及提升安全意识的必要性,旨在为读者提供全面的网络安全与信息安全知识框架。通过对网络攻防技术的解析和案例研究,我们揭示了防御策略的关键点,并强调了持续教育在塑造安全文化中的作用。
|
2天前
|
缓存 监控 API
构建高效微服务架构:后端开发的新范式
【4月更文挑战第30天】 随着现代软件开发的演进,传统的单体应用逐渐向微服务架构转变。本文将深入探讨微服务的核心概念、优势以及在设计高效后端系统时所面临的挑战。通过实例分析与最佳实践的结合,我们将揭示如何优化微服务的性能,保证系统的可扩展性、可维护性和安全性。
|
2天前
|
存储 运维 负载均衡
探索微服务架构下的服务治理
【4月更文挑战第30天】 在当今软件开发领域,微服务架构已经成为了解决复杂系统问题的重要技术手段。随着微服务的广泛应用,如何有效管理与治理这些分散的服务成为了开发和维护的关键。本文将探讨在微服务架构下,实现高效服务治理的策略与实践,重点分析服务发现、配置管理、负载均衡和故障处理等核心要素,旨在为读者提供一套系统的服务治理思路。