使用 Zipkin 执行分布式追踪

导航至

这篇帖子由 Tarun Telang 撰写,最初发表于 The New Stack,并经许可在此转载。

开源 Zipkin 提供了一组强大的功能,使开发人员更容易理解和优化复杂的分布式系统。

分布式追踪 是一种可以用来追踪和监控请求在分布式系统中传播的技术。它可以在多个服务处理请求的环境中工作,使其成为现代微服务架构的基本工具。

Zipkin 是一个开源分布式追踪系统,用于监控和排除复杂系统的故障。在本教程中,我们将向您展示如何设置和使用 Zipkin 来追踪问题并帮助排除常见的服务问题。

Zipkin 概述

虽然 Zipkin 是由 Twitter 创建的,但目前由 OpenZipkin 社区维护。Twitter 将其设计为与语言无关,它支持各种编程语言和框架,包括 C#、Go、Java、JavaScript、Ruby、Scala 和 PHP。它还与其他监控系统(如 Prometheus、InfluxDB 和 Grafana)集成,以提供系统性能的全面视图。

Zipkin 的主要功能

Zipkin 为分布式追踪提供了一组强大的功能,使开发人员更容易理解和优化复杂的分布式系统。以下是它的一些主要功能

分布式追踪

Zipkin 允许开发人员追踪请求在系统中传递的路径,从而更容易识别瓶颈和错误。

服务图可视化

Zipkin 提供了服务图可视化,显示了分布式系统中服务之间的依赖关系,从而更容易理解服务之间的交互。

可自定义的采样率

Zipkin 允许开发人员自定义跟踪数据的采样率,从而更容易平衡收集的数据量与系统性能。

支持多种语言和平台

Zipkin 支持各种编程语言和平台,使其易于集成到任何分布式系统中。

与其他监控系统集成

Zipkin 可以与其他监控系统(如 Prometheus 或 Grafana)结合使用,从而更容易分析和排除系统性能故障。

注释和标签

Zipkin 支持使用注释和标签为跟踪中的每个 Span 提供额外的上下文,从而更容易识别和排除问题。

易于部署和配置

Zipkin 易于部署和配置,并且有多种存储、传输和采样选项。

Zipkin 用例

大多数开发人员在复杂的分布式系统中使用 Zipkin 进行分布式追踪。在分布式系统中,单个请求可能涉及多个服务,每个服务执行不同的任务,并且可能分布在多个服务器上。Zipkin 允许开发人员跟踪请求在这些服务中传递的路径,并监控每个服务完成其任务所需的时间。此信息对于识别和排除性能瓶颈或错误、了解请求在系统中的流动以及相应地优化系统非常有价值。

故障排除和调试

当分布式系统中出现问题时,可能很难确定问题起源于何处。Zipkin 帮助开发人员识别请求在哪里被减慢速度以及错误在哪里发生,从而更容易排除故障和调试问题。

性能监控

Zipkin 提供了关于每个服务处理请求所用时间的详细指标,使您能够识别性能瓶颈并相应地优化系统。

依赖关系分析

Zipkin 允许开发人员可视化分布式系统中服务之间的依赖关系。此信息有助于您了解不同服务如何相互交互,并可以帮助您确定需要在哪里进行更改。

容量规划

通过分析 Zipkin 提供的性能指标,开发人员可以识别系统中未充分利用或过度利用的区域。此信息对于容量规划和资源分配非常有价值。

安装 Zipkin

以下是安装 Zipkin 的分步说明

步骤 1:安装 Java

Zipkin 是一个基于 Java 的应用程序,因此您需要在系统上安装 Java。在安装之前,请检查您是否已安装 Java。为此,请打开终端并运行以下命令

java -version

如果您的系统上已安装 Java,您应该会看到类似于以下内容

java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-jvmci-21.3-b05)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-jvmci-21.3-b05, mixed mode, sharing)

如果您看到类似于上述内容,则说明已安装 Java,您可以跳到下一步。否则,您可以从官方网站下载最新版本的 Java 并安装它。

步骤 2:下载 Zipkin

安装 Java 后,您可以从 Maven Central Repository 下载 Zipkin 可执行 jar 文件。

步骤 3:启动 Zipkin 服务器

下载 Zipkin 后,您可以通过在终端或命令提示符中运行以下命令来启动 Zipkin 服务器。将 jar 文件复制到您要安装 Zipkin 的目录中。要启动 Zipkin 服务器,您可以从安装它的同一目录下的终端或命令提示符中运行命令。

java -jar zipkin-server-<version>-exec.jar

此处,“version”是 Zipkin jar 的版本。这将在您的本地机器上启动 Zipkin 服务器。以下是输出

Zipkin jar

成功执行 Zipkin 服务器的命令行输出

步骤 4:访问 Zipkin UI

Zipkin 服务器运行后,您可以通过打开 Web 浏览器并导航到 http://localhost:9411/zipkin/ 来访问 Zipkin UI。

Access the Zipkin UI

Zipkin UI

此基于 Web 的用户界面显示从已检测应用程序收集的跟踪。跟踪是 Span 的集合,其中每个 Span 代表系统中发生的单元工作。例如,Span 可以代表数据库查询、HTTP 请求或方法调用。Span 连接起来形成一个跟踪,该跟踪代表请求在系统中传递的完整路径。

步骤 5:检测您的应用程序

要在您的应用程序中跟踪请求,您需要将 Zipkin 检测添加到您的代码中。Zipkin 为各种编程语言提供了库,使跟踪请求变得容易。您可以在 Zipkin 的 Tracer 和检测页面 上找到 Tracer 和检测库的完整列表。一旦应用程序被检测,它们就可以将跟踪数据发送到 Zipkin 服务器,Zipkin 服务器收集、存储和查询跟踪数据。

步骤 6:配置您的应用程序

接下来,您需要配置您的已检测应用程序以将跟踪数据发送到 Zipkin 服务器。您可以通过在应用程序的配置文件中设置 Zipkin 服务器的端点 URL 来执行此操作。

步骤 7:生成和查看跟踪

一旦您的应用程序被检测和配置,您就可以开始通过系统发送请求。Zipkin 将收集跟踪数据并将其显示在跟踪视图中。您可以使用此视图来分析请求在系统中的流动,并识别性能瓶颈和错误。

步骤 8:分析和排除故障

使用跟踪视图来分析您的系统性能并排除问题。您可以使用过滤器和注释来缩小分析范围。您还可以使用 Zipkin UI 中的搜索栏搜索跟踪。

Zipkin 中的依赖关系视图提供了分布式系统中服务之间依赖关系的可视化表示。您可以使用依赖关系视图来识别对系统性能至关重要的服务。此外,您可以隔离过度利用或未充分利用的服务以及您可能需要优化或替换的服务。

大规模存储 Zipkin 跟踪数据

默认情况下,Zipkin 将收集的数据存储在内存中,并且没有任何长期持久化跟踪数据的方法。幸运的是,Zipkin 采用基于组件的架构设计,可以轻松使用多种不同的数据库或数据仓库来存储您的数据,具体取决于您的用例。Zipkin 的存储层通过一个简单的接口进行抽象,该接口支持不同存储后端(如 InfluxDB、Elasticsearch、Cassandra 等)的即插即用功能。

Zipkin 还与 OpenTelemetry 集成,这通过打开使用跟踪以及应用程序生成的其他类型可观测性数据的更多方式,进一步增强了您可以执行的操作。当将 OpenTelemetry 与 Zipkin 结合使用时,开发人员可以利用 OpenTelemetry 提供的广泛的检测库,同时还可以受益于 Zipkin 强大的可视化和分析功能。

InfluxDB 是 Zipkin 存储后端的特别好的选择,因为作为使用面向列的存储时间序列数据库,它允许您在一个地方存储所有类型的可观测性数据,这将降低您架构的复杂性。要将您的 Zipkin 数据发送到 InfluxDB,您可以使用 OpenTelemetry、Telegraf 或您自己的自定义解决方案通过 InfluxDB 的 API。

结论

Zipkin 是开发人员使用微服务架构和分布式系统的宝贵工具。通过使用 Zipkin,开发人员可以全面了解其系统性能。因此,它可以帮助他们做出数据驱动的决策,以提高效率和可靠性。

查看我们的博客以获取更多信息丰富的教程。