跳到主要内容

分布式追踪概述

当一个组织的应用由数十、数百甚至数千个服务组成,跨越多个主机运行,并通过一个或多个事件网格共享消息时,单靠故障排除错误消息或查看日志已无法简单地诊断问题。在这类系统中,您需要一个能够追踪事件从发送应用、事件代理之间,到接收应用的完整路径的解决方案。分布式追踪提供了这种能力,允许管理员追踪事件在其通过事件网格时的生命周期。

启用分布式追踪时,事件代理在特定操作发生时生成特殊的保证消息。发布者和订阅者 API 在发送和接收消息时也生成跨度。OpenTelemetry 接收器,包括专为此目的构建的客户端(Solace Open Telemetry 接收器的一个实例),然后从特定队列中消费这些消息,并将它们转换为可以使用常见的 OpenTelemetry 后端(如 Jaeger 和 DataDog)接收、处理和查看的格式。

img

Solace 事件代理的分布式追踪功能符合 OpenTelemetry 规范。

哪些事件代理操作被追踪?

在以下点生成跨度:

  • 事件代理向消费者发送事件消息(发送跨度)
  • 消费者确认事件消息(发送跨度)
  • 事件代理接收事件消息(接收跨度)
  • 事件代理将事件消息入队(接收跨度)
  • 事件代理删除事件消息或管理员删除(删除跨度)
    • 例如,如果消息超过其生存时间(TTL)、最大重新交付尝试次数或最大跳数。
    • 如果您使用命令行界面(CLI)一次性删除多个跨度,这生成删除跨度。
  • 事件消息被移动到配置的死信队列(移动跨度)。
    • 例如,如果消息超过其生存时间(TTL)或最大重新交付尝试次数。

事件代理中的追踪

事件代理在事件消息的生命周期中的某些点生成跨度。跨度表示事件代理上的单个操作,例如接收和发送事件消息、将消息移动到死信队列或删除消息。

当事件代理接收传入事件消息或发送传出事件消息时,会生成跨度。代理发送包含一个或多个跨度的追踪消息遥测队列。客户端绑定到队列并消费追踪消息。这个客户端,称为接收器,是 Solace Open Telemetry 接收器的一个实例,它是 Open Telemetry 收集器项目的插件。接收器将追踪消息中的每个跨度转换为 Open Telemetry 收集器的通用内部格式。然后收集器将内部格式转换为发送到后端(Jaeger、Splunk、Prometheus、Zipkin、DataDog、DynaTrace 等)的适当格式。

这些组件在以下图表中进行了说明:

img

有关如何关联跨度以产生追踪的详细信息,请参阅分布式追踪的上下文传播。

有关如何为分布式追踪设置事件代理的详细信息,请参阅配置分布式追踪。

有关如何为 PubSub+ Cloud 事件代理服务设置分布式追踪的详细信息,请参阅启用分布式追踪。

使用PubSub+消息API进行追踪

要操作 PubSub+ 消息 API 中的追踪上下文,您使用 Solace PubSub+ OpenTelemetry API 库。这些库提供特殊的获取器和设置器方法,允许您的应用程序将追踪上下文注入到 SMF 消息中,或从 SMF 消息中提取追踪上下文。PubSub+ OpenTelemetry API 库还包括 OpenTelemetry API,允许您的发布者和订阅者应用程序创建跨度,后端应用程序使用这些跨度生成追踪。

有关详细信息,请参阅使用 PubSub+ 消息 API 进行上下文传播。

接收器

接收器 是一个绑定到遥测队列并消费追踪消息的客户端。Solace OpenTelemetry 接收器,作为 OpenTelemetry 收集器项目的插件,使客户端能够轻松地消费追踪消息并将其转换为标准格式。Solace 接收器从事件代理中以保证消息的形式消费追踪消息,并为 OpenTelemetry 收集器生成通用追踪跨度。

有关详细信息,请参阅Saydo Open Telemetry接收器。

事件代理性能

由于分布式追踪导致事件代理生成额外的保证追踪消息,可能会对事件代理的性能(事件消息的吞吐量)产生影响。随着更多消息通过代理,这种性能影响变得更加明显。在决定哪些消息进行追踪时,应考虑这一点。

事件代理(或 HA 组)与接收器的比例是灵活的 - 多个事件代理可以向单个接收器提供数据,多个接收器可以从单个代理消费追踪消息。然而,我们建议您在了解整体架构的性能之前,为每个事件代理(或 HA 组)部署一个接收器。

功能交互

灾难恢复(复制)

备用节点不生成追踪跨度。然而,接收器可以绑定到备用节点上的遥测队列,以允许在 VPN 从活动状态切换到备用状态后排出残余跨度。

事务

作为本地事务一部分发布的消息称不生成追踪消息。

在提交成功的消息将显示为已入队,即使随后的本地事务消息导致提交失败。要确定为什么已提交的消息未被传递,您必须搜索同一会话上具有相同事务 ID 的所有跨度,以找到失败的消息。如果事务中的至少一条消息失败,则事务中的任何消息都未曾符合传递条件。

入口选择器

事件代理在评估入口选择器之前将消息入队并追踪消息。如果消息不匹配入口选择器,事件代理将丢弃消息并生成删除跨度。

消息VPN桥

从桥接收的消息与常规客户端消息的追踪方式相同。

DMR链接

通过DMR链接接收的消息与常规客户端消息的追踪方式相同。

DMQ消息追踪

被管理员复制或移动到 DMQ 的消息将获得一个新的复制组消息 ID。当为这些消息生成发送跨度时,父跨度将是原始消息的接收,并且不会生成记录消息新复制组消息 ID 的跨度。

分区队列

消息通过分区队列被追踪,并且消息穿过的分区队列中的分区被识别。

产品密钥

使用分布式追踪进行生产或长期使用需要产品密钥。请联系Saydo以获取产品密钥。有关如何在您的事件代理上安装密钥,请参阅产品密钥。

演示模式

您可以尝试在演示模式(无需产品密钥)下使用分布式追踪,为期七天,方法是设置遥测配置文件并在该配置文件上启用分布式追踪。

演示模式不适用于生产或长期使用。

Saydo不提供演示模式下的分布式追踪支持。要获得分布式追踪的支持,需要在事件代理上安装产品密钥。

有关演示模式的详细信息,包括使用条款,请参阅 https://solace.com/dt-demo-mode。

重启您的事件代理

如果您需要更多时间,可以通过重启您的事件代理来延长您的演示。

要重启您的事件代理,请在 CLI 中输入以下命令:

solace> enable
solace# reload

在软件事件代理中,reload 命令会停止容器。对于容器镜像,您可能需要根据您的容器运行时的重启策略手动重启容器。

尝试分布式追踪

点击下方尝试 Codelab 并查看分布式追踪的实际效果。

立即尝试!