使用 Zipkin 进行分布式跟踪

导航到

本文由 Tarun Telang 撰写,最初发表在 The New Stack 上,现经授权在此重发。

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

分布式跟踪 是一种技术,可以用来跟踪和监控分布式系统中传播的请求。它可以在多个服务处理请求的环境中工作,因此是现代微服务架构中的一种重要工具。

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

Zipkin 概述

虽然 Twitter 创建了 Zipkin,但当前由 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

在这里,“版本”是指Zipkin jar的版本。这将启动您本地机器上的Zipkin服务器。以下是输出结果

Zipkin jar

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

步骤4:访问Zipkin UI

Zipkin服务器启动后,您可以通过打开网页浏览器并导航到https://127.0.0.1:9411/zipkin/来访问Zipkin UI。

Access the Zipkin UI

Zipkin UI

这个基于网页的用户界面显示了从已配置的应用程序收集到的跟踪信息。跟踪是一系列跨度,其中每个跨度代表系统发生的单位工作。例如,跨度可以代表数据库查询、HTTP请求或方法调用。跨度通过连接形成跟踪,代表请求在系统中的完整路径。

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

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

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

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

步骤7:生成和查看跟踪

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

步骤8:分析和排除故障

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

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

大规模存储Zipkin跟踪数据

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

Zipkin还集成了OpenTelemetry,这进一步扩展了您可以通过打开更多方式使用应用生成的不仅限于跟踪的其他类型可观测性数据所能做的事情。当使用与Zipkin结合的OpenTelemetry时,开发者可以利用OpenTelemetry提供的丰富的仪表库,同时也能受益于Zipkin强大的可视化和分析能力。

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

结论

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

查看我们的博客,获取更多信息。