OpenTelemetry eBPF Instrumentation 标志着首次发布

在 Grafana Labs、Splunk、Coralogix、Odigos 以及众多其他社区成员进行了重要的合作之后,我们很高兴地宣布 OpenTelemetry eBPF 自动插桩(简称 OBI)的第一个 alpha 版本发布。

在此之前,该项目(最初名为 Grafana Beyla)已于今年早些时候由 Grafana Labs 捐赠。在项目被纳入 OpenTelemetry 之后,eBPF 自动插桩的开发速度大大加快。新增了许多协议,质量得到了提升——尤其是在大规模部署时,测试运行速度提高了 10 倍。这充分证明了 OpenTelemetry 社区的价值。

那么,什么是 OpenTelemetry eBPF 自动插桩,您为什么应该关心?

与其他许多 OpenTelemetry 自动插桩方法不同,OpenTelemetry eBPF 自动插桩(OBI)在进程外运行,并在协议级别进行插桩,而不是在库级别。它利用了 eBPF 技术深入的内核集成、进程隔离、运行时安全性和性能优势。

由于 OBI 在协议级别进行插桩,这意味着您只需执行一个命令,就可以用零努力来插桩所有应用程序(所有编程语言、所有库),并且始终能获得一致的视图。让我们详细分解一下这对于最终用户意味着什么:

  1. 无需重启,无需代码更改,无需应用程序配置更改!OBI 本身即可提供完全自动化的指标和追踪捕获。eBPF 的优点在于,您可以将它部署到正在运行的环境中,并且可以确信它不会破坏您的系统/集群/应用程序的稳定性。
  2. 没有新的应用程序依赖——没有新的安全漏洞。由于 OBI 在进程外运行,我们不会向您的应用程序添加任何内容。您无需升级或添加 OpenTelemetry SDK 依赖项,如果添加的 OpenTelemetry SDK 依赖项存在漏洞,您也无需修补您的应用程序。您可以单独保护对系统中 OBI 的访问,这不会影响您安装的任何其他内容。
  3. 添加遥测数据不会使您的应用程序变慢。由于您的应用程序无需添加任何内容或执行任何操作即可导出遥测数据,因此遥测数据的捕获不会影响您的应用程序性能。OBI 在内核级别执行大部分工作,并且经过高度优化以实现高性能。即使在高请求率下,其 CPU 和内存占用也非常小。
  4. 您的遥测数据在所有编程语言和库中始终保持一致。OBI 将使您的遥测数据与所有服务保持最新的稳定 OpenTelemetry 规范,而无需您操心合规性问题。
  5. 支持广泛的协议插桩,包括 HTTP/HTTPS、HTTP/2、gRPC、SQL、Redis、MongoDB、Kafka、GraphQL、Elasticsearch/OpenSearch、AWS S3。为所有编程语言提供自动追踪上下文传播。

我应该只将 OpenTelemetry eBPF 自动插桩用于所有一切吗?

是的,而且……

OpenTelemetry eBPF 自动插桩(OBI)对于某些方面非常有用,但与其他 OpenTelemetry 技术结合使用时会变得更加强大。让我们看看这在实践中意味着什么。

OpenTelemetry eBPF 自动插桩是开始使用 OpenTelemetry 的绝佳工具。它可以快速为您提供基础信号,如 RED(请求错误持续时间)指标、服务图以及针对特定类型应用程序的追踪。然而,由于数据捕获是在内核级别完成的,某些细节层次(可以通过其他类型的 OpenTelemetry 自动插桩提供)将不会存在。让我们详细看看这意味着什么。

  1. 如果您完全没有遥测数据,或者只有部分遥测数据,可以尝试使用 OBI,这是一个轻松实现所有内容自动插桩(尤其是已编译二进制文件)的方法。OBI 会检测到应用程序已使用其他 OpenTelemetry SDK 进行插桩,并且不会重复信号。因此,将其部署到混合了已插桩和未插桩的应用程序中既简单又安全。
  2. 如果您的应用程序正在使用没有 OpenTelemetry 支持的库,例如比官方支持的库更旧的库,或者没有人提供插桩的库,可以尝试使用 OBI。
  3. 保留您已成功使用 OpenTelemetry SDK 或代理进行插桩的服务。除非您遇到重大的性能或成本问题,否则很少有理由迁移到其他类型的 OpenTelemetry 自动插桩。在这种情况下,OBI 可能会有所帮助。
  4. 虽然 OBI 是收集指标和服务图的优秀工具,但它对某些语言和技术的分布式追踪支持并不够好。例如,目前它无法处理响应式编程框架、Java 虚拟线程或复杂线程池的分布式追踪。总的来说,OBI 在 Go(HTTP 和 gRPC)、Node.js(HTTP)、Python(HTTP)、NGINX(HTTP)、PHP(HTTP/FPM)上分布式追踪效果很好,而对于其他编程语言,支持程度会根据您的应用程序内部如何管理线程和连接而有很大差异。我们正在寻求贡献来更广泛地扩展分布式追踪支持。分布式追踪的限制在文档的 OBI 分布式追踪 部分有详细说明。

总结

我们相信,可观测性应该是现代基础设施的内置能力,而不是一项附加的成本中心。OpenTelemetry eBPF 自动插桩让您只需一个命令行即可为您的环境添加必不可少的遥测数据捕获。不再有不使用 OpenTelemetry 的借口。无需精力,无需停机,无需代码或配置更改,这是您尝试它的所有理由。

开始使用 OpenTelemetry eBPF 自动插桩

开始使用 OpenTelemetry eBPF 自动插桩(OBI)非常简单!您可以将其作为独立应用、Docker 镜像或 Kubernetes DaemonSet(或 pod sidecar)进行部署。有关安装、配置和运行带 OBI 的应用程序的详细说明,请参阅 入门指南

有关如何在 Docker 环境中安装 OBI 的完整示例,您可以查看我们大量的 集成测试示例,其中结合了多种编程语言、数据库后端和云服务。我们的 Kubernetes 测试仓库 中也有一些 Kubernetes 示例。

下一步

如果您想与我们联系、提出我们应该开发的功能,或者跟踪我们的工作并了解我们的发布信息,您始终可以在 GitHub 上的 OpenTelemetry eBPF 自动插桩仓库 找到我们。我们还每周举行一个定期且非常活跃的 特别兴趣小组(SIG)社区电话会议,您可以加入并成为我们社区的一员。如果您无法参加我们的社区会议,也可以在 CNCF 社区 Slack 频道 #otel-ebpf-instrumentation 上与我们进行异步交流。

致谢

这个 alpha 版本是全球贡献者数小时辛勤工作的成果。感谢所有为实现这一里程碑做出贡献的代码、文档、反馈和热情的人们。