← 文章 / 未分类
signoz 4小时前 · 2026-09-17 05:44:49 · 2 阅读

Go OpenTelemetry 埋点:对比各选项

在 Go 中向 SigNoz 发送 trace 有三种方式:在代码中引入 OpenTelemetry SDK、在构建二进制文件时注入插桩,或者给运行中的进程挂载 eBPF agent。本页对比这三种方案,帮你选一个上手。

The OpenTelemetry SDK attaches to source code, otelc attaches during go build, and the eBPF agent attaches to the running process
三种方案的区别在于挂载位置:你的代码、你的构建过程,或运行中的进程

方案对比

OpenTelemetry SDK编译时插桩eBPF
工作原理在代码中初始化 SDK 并包装各类库otelcgo build 时注入插桩代码独立的 agent 向运行中的进程挂载探针
是否需要改代码
是否需要重新构建
是否需要高权限是,需要 root 和特权容器
操作系统任意任意仅限 Linux
库支持范围所有有 contrib 包的库13 个常用库4 个库
自定义 span支持通过 OpenTelemetry API通过全局 tracer provider
支持的信号Traces、metrics 和 logsTraces 和 Go runtime metricsTraces
项目状态稳定自 v1.0.0 起稳定开发中

如何选择

如果你拥有代码且想要完全掌控,就从 OpenTelemetry SDK 开始。你可以自由选择要插桩的库、在自己的业务逻辑周围添加 span,并支持全部三种信号。代价只是几行初始化代码。

当你想在不修改源码的情况下生成追踪数据时,可以选用编译时插桩。只需在构建命令中加入 otelc,工具就会自动为它识别到的库添加插桩。若团队管理大量服务且希望获得统一的覆盖面,这是理想选择。

仅当无法重新编译二进制文件时,才选择eBPF 插桩。例如供应商提供的二进制文件或冻结发布的产物就适合这种场景。该代理需要运行在特权容器中,仅支持 Linux 系统,且 OpenTelemetry 项目仍将其标记为开发中状态。

混合环境下还有一种第四种选择

OpenTelemetry eBPF 插桩(OBI)在内核层面读取 HTTP、HTTPS 和 gRPC 流量,适用于任何语言编写的服务。当你希望用一个代理覆盖一堆非自研服务时,可以使用它。它能上报请求速率、错误率和延迟,但无法深入应用内部。

从这儿开始

OpenTelemetry SDK

使用 OpenTelemetry SDK 为 Go 代码插桩,并发送追踪、指标和日志

编译时插桩

通过 otelc 将插桩功能内置到二进制文件中,无需修改代码

eBPF 插桩

将代理附加到无法重新编译的运行中的 Go 二进制文件

手动插桩

围绕自定义业务逻辑添加自定义 span、属性和事件

组合多种方法

两种零代码方案都支持携带你自行编写的 span。

  • 在使用编译时插桩时,OpenTelemetry API 的用法与常规一致。通过 otel.Tracer(...) 创建的 span 会自动融入注入的追踪链中。详见Go 手动插桩
  • 使用 eBPF agent 时,需设置 OTEL_GO_AUTO_GLOBAL=true。agent 随后将把应用发送至 OpenTelemetry global tracer provider 的 span 数据导出。

下一步

获取帮助

如果在本节的操作步骤中遇到困难,欢迎通过 SigNoz Community Slack 联系我们。如果你是 SigNoz Cloud 用户,请使用 SigNoz 实例右下角的内置聊天支持,或直接发送邮件至 cloud-support@signoz.io

原始来源: signoz

评论 (0)