EasyTelemetry:让OpenTelemetry拥抱Arthas Trace的强大功能

EasyTelemetry:让 OpenTelemetry 拥抱 Arthas Trace 的强大功能

引言

在现代分布式系统中,可观测性已成为保障系统稳定性和性能的关键要素。OpenTelemetry 作为业界主流的可观测性框架,提供了强大的链路追踪、指标收集和日志记录能力。然而,在实际生产环境中,开发者往往还需要更细粒度的代码执行轨迹分析工具,例如 Arthas 的 trace 命令。尽管 trace 功能强大,但在使用过程中仍存在一些痛点。本文将介绍 EasyTelemetry------一个融合 OpenTelemetry 与 Arthas Trace 能力的创新解决方案。


Arthas Trace 命令的优势与挑战

Arthas 是阿里巴巴开源的一款 Java 诊断工具,其 trace 命令能够动态追踪方法调用栈并统计耗时,是线上排查逻辑和性能问题的利器。然而,它也面临以下几个核心挑战:

  1. 并发请求过滤困难

    当多个请求并发访问同一方法时,如何从海量 trace 数据中筛选出目标请求的轨迹信息,成为一大难题。

  2. 资源消耗显著
    trace 命令在执行期间会引入较高的 CPU 和内存开销,尤其在线上高负载场景下可能影响服务稳定性。

  3. 数据孤岛问题
    trace 结果通常以文本形式输出,仅保存在 Arthas 工具本地,难以与现有的链路追踪数据打通,导致无法实现端到端的问题定位。


EasyTelemetry 的终极目标

为了解决上述问题,EasyTelemetry 提出了以下三大核心目标:

  • 链路数据集成 :将指定方法的 trace 结果无缝嵌入 OpenTelemetry 的链路数据中,形成统一的可观测视图。
  • 极致轻量化:确保采集的代码轨迹数据体积极小(每行仅需 1~4 字节),避免对业务性能造成负担。
  • 超低资源消耗:将采集过程的额外开销控制在目标方法执行时间的 1% 以内,实现近乎无感的监控体验。

技术实现:EasyTelemetry 核心原理

EasyTelemetry 是基于 OpenTelemetry 的二次开发项目,完全兼容原生功能,并通过以下关键技术实现高效、精准的代码轨迹采集:

1. 字节码增强技术

利用 Java Agent 和 ASM 字节码操作库,在目标方法的关键位置插入埋点逻辑,实时捕获代码执行轨迹(包括行号、执行次数、累计耗时等)。

2. 高效编码压缩

将原始轨迹数据通过自研算法压缩为紧凑的十六进制字符串,大幅降低存储和传输成本。

3. 链路数据注入

将编码后的轨迹数据注入到 OpenTelemetry 的 Span 中,随链路一同上报至后端观测平台。

4. 可视化解码工具

提供配套的解码器,支持将十六进制轨迹数据还原为人类可读的格式,清晰展示每行代码的执行详情。


示例演示

原始代码片段

以下是一个典型的 Spring MVC 控制器方法:

java 复制代码
        @RequiresPermissions(value={"system:user:edit"})
        @GetMapping(value={"/authRole/{userId}"})
        public String authRole(@PathVariable(value="userId") Long userId, ModelMap mmap) {
/*251*/     this.userService.checkUserDataScope(userId);
/*252*/     SysUser user = this.userService.selectUserById(userId);
/*254*/     List roles = this.roleService.selectRolesByUserId(userId);
/*255*/     mmap.put("user", user);
/*256*/     mmap.put("roles", SysUser.isAdmin((Long)userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
            return this.prefix + "/authRole";
        }

配置规则

通过 JSON 配置文件定义需要采集的方法及其关联属性:

json 复制代码
{
  "trace": [
    {
      "rootSpanName": "GET /system/user/authRole/{userId}",
      "javaMethodDesc": "com.ruoyi.web.controller.system.SysUserController#authRole(java.lang.Long,org.springframework.ui.ModelMap)",
      "traceTagKey": "ruoyi.authRole",
      "triggerOptimizeTimes": 10
    }
  ]
}

轨迹数据样例

采集到的轨迹数据被编码为紧凑的十六进制字符串:
00FB010120138DF7FAAA80105518B01A2700103400

解码可视化效果

通过解码工具解析后,可得到详细的执行报告:

bash 复制代码
	总耗时:50.05ms

	行号		 执行次数		 耗时:		   耗时占比
	251			1			0.85ms,  		1.70%
	252			1			22.24ms,  		44.44%
	254			1			25.99ms,  		51.93%
	255			1			0.00ms
	256			1			0.52ms,  		1.04%
	257			1			0.00ms

总结与展望

EasyTelemetry 成功地将 Arthas Trace 的强大能力与 OpenTelemetry 的标准化链路数据相结合,解决了传统诊断工具在生产环境中的诸多局限性。未来,我们将继续优化采集效率、扩展更多编程语言的支持,并探索与主流 APM 平台的深度集成,助力开发者构建更加健壮、透明的分布式系统。

GitHub 项目地址:easytelemetry-java-opentelemetry

Trace功能说明文档: easytelemetry-trace

欢迎 Star ⭐️ 和提Issue!

相关推荐
行者-全栈开发2 天前
【码动四季】Spring Boot 可观测性体系:Micrometer + OpenTelemetry + Grafana 全链路搭建
grafana·opentelemetry·micrometer·全链路追踪·分布式追踪·atomcode·spring boot可观测性
SelectDB技术团队6 天前
Agent 可观测性:Apache Doris / SelectDB 的技术能力、选型对比与实践
数据库·人工智能·agent·可观测·ai-native·apache doris·selectdb
Databuff15 天前
全链路监控工具推荐:OTLP 接入与一体化 APM 实践
opentelemetry
Databuff15 天前
国产开源APM databuff 成为 CNCF 顶级项目opentelemetry 官宣Vendor
运维·开源·skywalking·apm·可观测性·opentelemetry
创世宇图17 天前
【Python工程化实战】OpenTelemetry 在 Python 中的全链路追踪落地:从埋点到可视化的完整实战指南
python·分布式链路追踪·性能监控·opentelemetry·微服务可观测性
热爱运维的小七1 个月前
深度解析|应用性能 + RUM + 拨测:现代 IT 运维的可观测性“铁三角”
运维·it运维·devops·apm·rum·网站拨测
changuncle1 个月前
OpenTelemetry搭配aspire-dashboard来监测系统性能
性能监测·opentelemetry·aspire
SRETalk1 个月前
SkyWalking / Jaeger / ARMS 已经有了,还需要统一可观测平台吗
skywalking·apm·jaeger·flashcat·arms
SelectDB技术团队1 个月前
预约发布会|核心产品力首发,如何构建面向 Agent 时代的企业级数据引擎
数据库·数据仓库·人工智能·数据分析·可观测·apache doris·selectdb
SuniaWang2 个月前
《AgentX 专栏》07-全链路可观测:用OpenTelemetry+Jaeger让每次AI对话都可追踪可复盘
java·人工智能·spring·架构·langchain·opentelemetry·agenx