RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践

场景最佳实践

目前,主流的云服务供应商都为 OpenTelemetry 提供了良好的支持,阿里云上的 SLS 和 ARMS 两款可观测产品都提供了基于 OpenTelemetry 的分布式全链路追踪服务。

为了更好地展示分布式全链路追踪的过程,这里提供了一个代码示例:rocketmq-opentelemetry 。在这个代码示例中,会启动三个不同的进程,涉及三种不同类库和业务逻辑之间的相互调用,展示了一个在分布式环境较复杂中间件之间进行交互的典型案例。

请求首先会从 gRPC 客户端发往 gRPC 服务端,在 gRPC 服务端收到请求之后,会向 RocketMQ 5.0 的 Producer 往服务端发送一条消息,然后再回复对应的 response 给客户端。

在 RocketMQ 5.0 的 PushConsumer 接受到消息之后,会在 MessageListener 中使用 Apache HttpClient 往淘宝网发送一条 GET 请求。

image.png

示例代码调用链路

特别地,gRPC 客户端在发起具体的调用是在一个上游业务 span 的生命周期之内进行的,这个 span 我们称之为 ExampleUpstreamSpan。

RocketMQ 5.0 PushConsumer 在收到消息之后,也会在 MessageListener 里执行其他的业务操作,也会有对应的 span,我们称之为 ExampleDownstreamSpan。那么默认在 receive span 没有启用的情况下,按照开始时间的顺序,会先后存在 7 个 span。分别是:

  • ExampleUpstreamSpan。
  • gRPC 客户端请求 span。
  • gRPC 服务端响应 span。
  • RocketMQ 5.0 Producer 的 send span。
  • RocketMQ 5.0 Producer 的 process span。
  • HTTP 请求 span。
  • ExampleDownstreamSpan。

RocketMQ 5.0 对接 SLS Trace 服务

首先在阿里云日志服务中创建 Trace 服务。然后获取接入点,项目和实例名称等信息,具体可以参考使用 OpenTelemetry 接入 SLS Trace 服务

在补充好信息之后完成接入之后,稍等一会就可以看到对应的 Trace 信息已经被上传到 SLS trace 服务中:

image.png

SLS Trace 服务分布式全链路展示

Trace 服务其实是将相关数据存储到日志中,因此这些数据也可以通过 SLS 的 SQL 语法查询得到。

通过 Trace 数据,我们可以很方便知道用户的操作系统环境,Java 版本等一系列基础信息。消息的发送延时,失败与否,消息是否准时投递到了客户端,以及客户端本地消费耗时,消费失败与否等一系列有效信息,可以帮助我们十分有效地进行问题排查。

除此之外,SLS Trace 服务的 demo 页也提供了基于 RocketMQ 5.0 定制的消息中间件大盘,生动展示了利用 Trace 数据得到的发送成功率,端到端延时等一系列指标。

  • 消息中间件分析 Tab:展示利用 Trace 数据得到的包括发送延时、发送成功率、消费成功率、端到端延时在内的一系列指标。
  • 查看 RocketMQ Trace Tab:可以根据上一步得到的差错长 message id 进行进一步的细粒度查询。

image.png

消息中间件分析

RocketMQ 5.0 对接应用实时监控服务(ARMS)

首先进入应用实时监控服务 ARMS 控制台,点击接入中心中的 OpenTelemetry,选择 java 应用程序下的自动探测,获取启动参数并修改至自己的 java 应用程序,具体可以参考通过 OpenTelemetry 接入 ARMS

配置好参数之后,启动自己的相关应用程序,稍等一会儿,就可以在 ARMS Trace Explorer 里看到对应的数据了。

image.png

Trace Explorer

还可以查看 span 之间的时序关系。

image.png

ARMS Trace Explorer 分布式全链路追踪展示

具体地,可以点进每个 span 查看详细的 attributes/resources/events 等信息。除此之外,ARMS 还支持通过使用 OpenTelemetry Collector 转发的形式来收集应用程序的 Trace 数据。


趋势与思考

随着现代应用程序架构的不断演进,可观测性的重要性日益凸显。它不仅可以帮助我们快速发现和解决系统中的问题,还提高应用程序的可靠性和性能,同时也是实现 DevOps 的关键部分。在相关领域,也陆续诞生了像 DataDog 和 Dynatrace 这样的明星公司。

近年来涌现了一些新兴技术,如 eBPF(Extended Berkeley Packet Filter)和 Service Mesh 也为可观测领域提供了一些新的思路:

eBPF 可以在内核层面运行,通过动态注入代码来监控系统的行为。它被广泛应用于实时网络和系统性能监控、安全审计和调试等任务,并且性能影响很小,未来也可以作为 continuous profiling 的一种选择。Service Mesh 则通过在应用程序之间注入代理层实现流量管理、安全和可观测性等功能。代理层可以收集和报告有关流量的各种指标和元数据,从而帮助我们了解系统中各个组件的行为和性能。

Service Mesh 中反映出的技术趋势很大一部分已经在 RocketMQ 5.0 proxy 中得到了应用,我们也在更多地将可观测指标往 proxy 进行收敛。当前的 Trace 链路未来也在考虑和服务端一起进行关联,并打造用户侧,运维侧,跨多应用的全方位链路追踪体系。除此之外还可以将 Trace 数据与 Metrics 数据通过 Exemplars 等技术进行联动。实现面到线,线到点的终极排查效果。

在可观测领域,RocketMQ 也在不断探索和摸索更加领先的可观测手段,以帮助开发者和客户更快更省心地发现系统中的隐患。

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
目录
相关文章
|
8月前
|
消息中间件 RocketMQ 微服务
RocketMQ 分布式事务消息实战指南
RocketMQ 分布式事务消息实战指南
645 1
|
10天前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
65 41
|
1月前
|
消息中间件 SQL 中间件
大厂都在用的分布式事务方案,Seata+RocketMQ带你打破10万QPS瓶颈
分布式事务涉及跨多个数据库或服务的操作,确保数据一致性。本地事务通过数据库直接支持ACID特性,而分布式事务则需解决跨服务协调难、高并发压力及性能与一致性权衡等问题。常见的解决方案包括两阶段提交(2PC)、Seata提供的AT和TCC模式、以及基于消息队列的最终一致性方案。这些方法各有优劣,适用于不同业务场景,选择合适的方案需综合考虑业务需求、系统规模和技术团队能力。
221 7
|
3月前
|
消息中间件 网络协议 C#
C#使用Socket实现分布式事件总线,不依赖第三方MQ
`CodeWF.EventBus.Socket` 是一个轻量级的、基于Socket的分布式事件总线系统,旨在简化分布式架构中的事件通信。它允许进程之间通过发布/订阅模式进行通信,无需依赖外部消息队列服务。
C#使用Socket实现分布式事件总线,不依赖第三方MQ
|
5月前
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
168 2
|
5月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
5月前
|
消息中间件 RocketMQ
RocketMQ - 生产者最佳实践总结
RocketMQ - 生产者最佳实践总结
60 0
|
8月前
|
消息中间件 存储 负载均衡
分布式消息传递新时代:深入了解RabbitMQ_sharding插件的精髓【RabbitMQ 八】
分布式消息传递新时代:深入了解RabbitMQ_sharding插件的精髓【RabbitMQ 八】
166 0
|
7月前
|
消息中间件 中间件 程序员
分布式事务大揭秘:使用MQ实现最终一致性
本文由小米分享,介绍分布式事务中的MQ最终一致性实现,以RocketMQ为例。RocketMQ的事务消息机制包括准备消息、本地事务执行、确认/回滚消息及事务状态检查四个步骤。这种机制通过消息队列协调多系统操作,确保数据最终一致。MQ最终一致性具有系统解耦、提高可用性和灵活事务管理等优点,广泛应用于分布式系统中。文章还讨论了RocketMQ的事务消息处理流程和失败情况下的处理策略,帮助读者理解如何在实际应用中解决分布式事务问题。
488 6
|
7月前
|
消息中间件 监控 调度
构建Python中的分布式系统结合Celery与RabbitMQ
在当今的软件开发中,构建高效的分布式系统是至关重要的。Python作为一种流行的编程语言,提供了许多工具和库来帮助开发人员构建分布式系统。其中,Celery和RabbitMQ是两个强大的工具,它们结合在一起可以为你的Python应用程序提供可靠的异步任务队列和消息传递机制。