阿里云可观测联合 Datadog 发布 OpenTelemetry Go 自动插桩工具

作者:杨易(青风)

在云原生可观测性领域,OpenTelemetry 已经成为事实上的标准。相比于 Java 拥有成熟的字节码增强技术,Go 语言作为静态编译型语言,长期以来缺乏一种成熟、低侵入的自动插桩方案。目前的现有方案主要有:

  1. eBPF:功能强大但主要偏向系统调用层面,对应用层上下文(如 HTTP Header 传播)的处理较为复杂。
  2. 手动埋点:代码改动大,维护成本高,不仅要改业务代码,还得改依赖库的调用方式,显式地在各个关键节点添加 Trace 和 Metrics 逻辑。

为此,阿里云可观测团队和程序语言团队探索了 Go 编译时插桩解决方案,并将其核心能力捐赠给 OpenTelemetry 社区,形成了 opentelemetry-go-compile-instrumentation[1]项目。在和 Datadog、Quesma 等公司的共同努力下,我们发布了首个预览版本 v0.1.0[2]

工作原理

自动插桩工具的核心在于利用 Go 编译器的-toolexec参数。-toolexec会拦截 Go 编译命令,替换成我们的插桩工具。这样,在代码被编译之前,我们就有机会对它进行分析和修改。整个过程可以概括为两个阶段:

1. 依赖分析

在编译开始前,工具会分析应用的构建流程(go build -n),识别出项目中使用的第三方库如net/http, grpc,redis等。然后,它会自动生成一个文件otel.runtime.go,将对应的 Hook 代码(监测逻辑,后面用 Hook 代码表示)引入到构建依赖中。

2. 代码注入

当编译器处理目标函数时,工具利用-toolexec拦截编译,然后修改该目标函数的代码,在函数入口插入一段蹦床代码(Trampoline Code),蹦床代码会跳转到预先写好的 Hook 函数中。

  • 进入函数前(Before):Hook 记录开始时间,提取上下文信息(如 HTTP Headers),启动 Span。
  • 函数执行:执行原有的业务逻辑。
  • 退出函数后(After):Hook 捕获返回值或 Panic,结束 Span,记录耗时。

这种方式的优点是零运行时开销(除了必要的监测逻辑执行时间),因为插桩是直接编译进二进制文件的,不需要像 eBPF 那样在内核态和用户态之间切换,也不需要像 Java Agent 那样在启动时加载。

HTTP 插桩示例

让我们通过一个简单的 HTTP 例子来看看它是如何使用的。

package main import ... func main() { http.HandleFunc("/greet", func(w http.ResponseWriter, r *http.Request) { w.Write([ ]byte("Hello, OpenTelemetry!")) }) log.Fatal(http.ListenAndServe(":8080", nil)) }

手动插桩

需要手动引入 OpenTelemetry SDK,手动创建 Tracer,在 Handler 里手动 Start 和 End Span。

package main import ... func initTracer() func(context.Context) error { /* ...几十行初始化代码... */ } func main() { // 1. 初始化 Tracer shutdown := initTracer() defer shutdown(context.Background()) // 2. 包装 Handler handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 3. 手动提取 Context,开始 Span tracer := otel.Tracer("demo-server") ctx, span := tracer.Start(r.Context(), "GET /greet") // 4. 确保结束 Span defer span.End() // 5. 可能还需要手动记录属性 span.SetAttributes(attribute.String("http.method", "GET")) w.Write([]byte("Hello, OpenTelemetry!")) }) // 6. ListenAndServe 也可能需要包装... log.Fatal(http.ListenAndServe(":8080", handler)) }

对于成百上千个接口的微服务,这种改造成本是灾难性的。

自动插桩

  1. 下载工具:到 Release 页面[2]下载
  2. 编译应用:./otel-linux-amd64 go build -o myapp
  3. 配置运行:export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317" export OTEL_SERVICE_NAME="my-app"./myapp

编译器会默默地将 HTTP 请求的监测逻辑“织入”到应用二进制文件中。配置好 OpenTelemetry 的导出端点(如 Jaeger 或控制台),运行生成的 server。访问 /greet 接口时, Tracing 数据已经自动生成并上报了,包含了请求路径、耗时、状态码等信息。

从商业化到开源

我们在深度实践 eBPF 技术的过程中,虽然认可其强大,但也发现它难以完美处理应用层上下文。更重要的是,我们不断听到用户反馈,大家对繁琐的手动埋点和高昂的维护成本感到困扰。

为了解决这个痛点,我们开始探索 Go 编译时自动插桩方案,将其上线至阿里云可观测 ARMS 产品[3],在这片最严苛的“试验田”里不断迭代,逐步演化成一套成熟的解决方案,不仅能实现零代码修改的链路追踪,还扩展支持了丰富的指标统计、Runtime 监控乃至持续剖析等高级功能,甚至还可以通过自定义扩展的功能完成对企业内部 sdk 的埋点[4]

调用链分析

持续剖析

这套方案在电商、短剧、AI 视频、汽车等众多领域客户处得到了成功验证。在看到它为用户带来巨大价值、并验证了其稳定性和可行性后,我们决定将其核心能力贡献给 OpenTelemetry 社区,希望它能成为一个普惠的技术。同时,我们与可观测领域的顶尖厂商 Datadog 协作,共同推进,最终促成了这个官方项目[1]的诞生。

目前项目处于活跃开发阶段,欢迎大家试用、反馈并参与贡献,共同构建更美好的云原生可观测生态。

相关链接:

[1] OpenTelemetry Go 编译插桩项目

https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation

[2] Release 链接

https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation/releases/tag/v0.1.0

[3] 阿里云 ARMS Go Agent 商业版

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/monitoring-the-golang-applications

[4] 自定义扩展

https://help.aliyun.com/zh/arms/application-monitoring/use-cases/use-golang-agent-to-customize-scalability

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1200980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研必备工具:9款AI查重软件横向对比与使用技巧

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…

阿克苏地拜城乌什阿瓦提柯坪英语雅思辅导机构推荐,2026权威出国雅思课程口碑排行榜

对于阿克苏地区拜城、乌什、阿瓦提、柯坪四县有雅思备考及留学规划的家庭而言,挑选合适的雅思辅导机构是留学筹备中的核心难题。四县地域分散、交通路况差异较大,优质雅思教学资源主要集中在拜城县步行街智慧城奥特莱…

论文查重终极方案:9大AI软件排名及改写技巧详解

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…

2026年1月房产中介管理系统评测

在房产中介行业数字化转型加速的当下,一款高效的房产中介管理系统已成为提升业务效率、规范团队运营的核心工具。无论是夫妻店、中小型团队还是连锁机构,都需依托贴合业务场景的系统实现降本增效。本次评测精选4款主流房产中介管理软件,从成立…

RNN

RNN参考链接:很不错:https://cloud.tencent.com/developer/inventory/10094/article/1056311核心思想 思考一个问题,如何根据一段文本的前半部分将其补全: 我昨天上学迟到了,老师批评了____。我们可以使用一个神经…

IPD项目计划怎么写:全阶段里程碑、交付物与评审节奏

硬件研发最常见的尴尬是:计划写得很细,项目还是在样机与试产阶段集中爆雷——接口反复改、关键料交期失控、认证重测、返工吞噬周期。要让 IPD 项目计划真正可执行,关键不是“排得更满”,而是把“阶段目标—证据交付物—评审闸门—…

塔城塔城乌苏额敏沙湾托里英语雅思辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜

对于塔城地区塔城市、乌苏市、额敏县、沙湾市、托里县五地有留学规划的家庭来说,挑选合适的雅思辅导机构是留学筹备中的核心难题。多数家长面对市面上的机构,既担心师资资质不规范、课程与孩子基础不匹配,又纠结五地…

2026年高端水包砂生产厂家TOP5推荐:五大液态石材领域厂家专精典范

技术专精+产品创新+全国化布局,定义建筑外衣未来 随着美丽乡村建设与乡村自建房、别墅项目对品质追求的不断提升,建筑外立面已不再是简单的防护层,更是彰显审美、品格与长期价值的“建筑外衣”。外墙仿石漆,因其能…

Sprint(冲刺)解读

Sprint(冲刺)解读 一、Sprint 到底是个啥?(先破误区) 很多人以为:Sprint = 两周时间 Sprint = 一堆 Story Sprint = 版本周期都不完整。 👉 Sprint 本质上是: 团队用一个固定时长,集中精力解决一个清晰的产品…

Sprint(冲刺)解读

Sprint(冲刺)解读 一、Sprint 到底是个啥?(先破误区) 很多人以为:Sprint = 两周时间 Sprint = 一堆 Story Sprint = 版本周期都不完整。 👉 Sprint 本质上是: 团队用一个固定时长,集中精力解决一个清晰的产品…

硬核开源!AgentCPM重新定义端侧智能天花板,4B参数碾压30B性能,附一键部署教程

清华大学、中国人民大学、面壁智能与 OpenBMB 开源社区联合开源了一个智能体,叫做 AgentCPM,它重新定义了端侧智能体天花板。 AgentCPM 最亮眼的是以小博大。 仅 4B 参数的模型,在复杂的长程深度探索任务上,实现了超越同尺寸 SOT…

二维码链接到视频,怎么方便分享才更有效?

二维码链接到视频的方式使分享变得简单又高效。用户只需扫描二维码即可访问视频,无论是教学课件、产品展示还是个人生活记录。为了让分享更方便,了解如何生成和使用这些二维码非常关键。 生成二维码的过程简单直接。首先,用户需要将视频上传…

javascript Map是什么_与对象有什么区别【教程】

Map 是 JavaScript 中的键值对集合,它和普通对象(Object)都能存键值,但底层机制、行为规则和适用场景完全不同——别用 Object 当 Map 用,尤其当键可能是对象、数字或需要精确顺序时。Map 的键可以是任意类型,Ob…

哲讯科技:以半导体SAP之道,铸就中国“芯”时代的智能基石

当一粒砂石经过千锤百炼,最终化身为承载数亿晶体管的芯片时,一场静默而深刻的产业变革已悄然发生。在这个以纳米为单位、以全球为舞台的精密制造领域,一粒尘埃足以颠覆整个生产流程,一次供应链中断可能引发全球震荡…

哲讯科技:以半导体SAP之道,铸就中国“芯”时代的智能基石

当一粒砂石经过千锤百炼,最终化身为承载数亿晶体管的芯片时,一场静默而深刻的产业变革已悄然发生。在这个以纳米为单位、以全球为舞台的精密制造领域,一粒尘埃足以颠覆整个生产流程,一次供应链中断可能引发全球震荡…

RAG 为什么总是“看起来能用,实际不好用”?

RAG 真正让人头疼的地方,从来不是“搭不起来” 如果你已经做过一段时间 RAG,大概率会有一种非常熟悉的感觉: 系统是能跑的,流程也是完整的,embedding 用的也不差,向量库、召回、rerank 该有的都有,但整体效果始…

小型精密CNC车床/数控车床哪家好?2026年优质代理商深度评测

在高端制造业向智能化、精密化发展的今天,小型精密CNC车床作为加工微小、复杂、高精度零部件的核心装备,其重要性日益凸显。尤其在3C电子、医疗器械、精密仪器、新能源汽车零部件、半导体设备等新兴产业中,对微型零…

【2026最新】SQL 三种注入方式详解,零基础入门到精通,收藏这一篇就够了_sql注入

SQL 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系…

2026年冠金石生产厂家TOP5权威推荐:上海岩首领航高端仿石漆新纪元

一家源于1988年技术沉淀的企业,用“一辈子、一件事、一群人”的专注精神,在西安火车站和银川高铁站的外墙上,让仿石漆的寿命与建筑同步。 当一座建筑的设计理念通过外墙效果得以延伸,材料的选择便成为了决定最终呈…

2026年冠金石生产厂家TOP5权威推荐:上海岩首领航高端仿石漆新纪元

一家源于1988年技术沉淀的企业,用“一辈子、一件事、一群人”的专注精神,在西安火车站和银川高铁站的外墙上,让仿石漆的寿命与建筑同步。 当一座建筑的设计理念通过外墙效果得以延伸,材料的选择便成为了决定最终呈…