Elastic OpenTelemetry Java 代理发行版正式发布

Elastic 宣布正式发布 OpenTelemetry (OTel) Java 代理的 Elastic 发行版,这是一个完全兼容 OTel 的代理,具有丰富有用的附加功能。

Announcing GA of Elastic distribution of the OpenTelemetry Java Agent

随着 Elastic 不断致力于 OpenTelemetry (OTel),我们很高兴地宣布正式发布 OpenTelemetry Java 的 Elastic 发行版 (EDOT Java)。EDOT Java 是 OTel Java 代理的完全兼容的直接替代品,它带有一组内置的实用扩展,可提供强大的附加功能,并提高 Elastic 可观察性的可用性。使用 EDOT Java 启动 Java 应用程序的 OpenTelemetry SDK,并自动捕获跟踪数据、性能指标和日志。跟踪、指标和日志可以发送到您选择的任何 OpenTelemetry 协议 (OTLP) 收集器。

借助 EDOT Java,您可以访问 OpenTelemetry Java 代理的所有功能,外加

  • 在 OpenTelemetry 存储库中上游提供更改之前,访问 Elastic 团队贡献的 SDK 改进和错误修复。
  • 访问可选功能,这些功能可以增强发送到 Elastic 的 OpenTelemetry 数据(例如,推断的 span 和 span 堆栈跟踪)。

在这篇博文中,我们将探讨我们独特发行版背后的原理,详细介绍它带来的强大附加功能。我们将概述如何将这些增强功能与我们的发行版、标准 OTel SDK 或普通的 OTel Java 代理一起使用。请继续关注,我们将在最后展望我们的未来计划以及您可以期待 Elastic 对 OTel Java 的贡献。

OpenTelemetry Java 的 Elastic 发行版 (EDOT Java)

到目前为止,希望通过自动检测来监控 Java 服务的 Elastic 用户有两个选择:专有的 Elastic APM Java 代理或普通的 OTel Java 代理。虽然这两个代理都提供了强大的功能并且达到了很高的成熟度,但每个代理都有其明显的优点和局限性。OTel Java 代理在各种框架和库中提供了广泛的检测,具有很强的可扩展性,并且可以本地发出 OTel 数据。相反,Elastic APM Java 代理包含 OTel Java 代理中没有的几个强大功能。

OTel Java 代理的 Elastic 发行版旨在将专有 Elastic Java 代理和 OpenTelemetry Java 代理的最佳方面结合在一起。此发行版通过扩展增强了普通的 OTel Java 代理,同时仍然是完全兼容的直接替代品。

Elastic 对 OpenTelemetry 的承诺不仅侧重于围绕 OTel 实现数据收集的标准化,还包括改进 OTel 组件并将 Elastic 的数据收集功能集成到 OTel 中。本着这种精神,我们的最终目标是将 Elastic 发行版中的尽可能多的功能贡献回上游 OTel Java 代理;我们的发行版的设计方式是,作为扩展实现的其他功能可以直接与 OTel SDK 配合使用。这意味着它们可以独立于 Elastic 的发行版使用 — 可以与 Otel Java SDK 或普通的 OTel Java 代理一起使用。我们将在下面的章节中进一步讨论这些使用模式。

包含的功能

OpenTelemetry Java 代理的 Elastic 发行版包括一组扩展,这些扩展提供以下概述的功能。

推断的 span

最近的博文中,我们介绍了推断的 span,这是一种旨在通过额外的基于分析的 span 来增强分布式跟踪的强大功能。

推断的 span(上图中标记为“internal”的蓝色 span)提供了对代码中延迟来源的宝贵见解,这些延迟来源可能仍然无法通过纯粹基于检测的跟踪捕获。换句话说,它们填补了基于检测的跟踪之间的空白。OTel Java 代理的 Elastic 发行版包括推断的 span 功能。可以通过设置以下环境变量来启用它。

ELASTIC_OTEL_INFERRED_SPANS_ENABLED=true

与分析的相关性

随着 OpenTelemetry 采用分析Elastic 提出捐赠其基于 eBPF 的持续分析代理,将分布式跟踪与持续分析数据相关联的新领域正在开启。这种集成提供了对延迟问题和二氧化碳排放足迹的前所未有的代码级见解,所有这些都在明确定义的服务、事务和跟踪上下文中进行。要开始使用,请按照本指南设置通用分析和 OpenTelemetry 集成。为了获得有关该功能的更多背景信息,请查看这篇博文,我们在其中探讨了这些技术如何融合以增强软件开发中的可观察性和环境意识。

Elastic 通用分析的用户已经可以利用 OTel Java 代理的 Elastic 发行版来访问此强大的集成。随着 Elastic 提出捐赠分析代理,我们预计所有使用 OTel Java 代理并结合新的 OTel eBPF 分析的 OTel 用户很快将可以使用此功能。

Span 堆栈跟踪

在许多情况下,分布式跟踪中的 span 相对粗粒度,尤其是在未使用推断的 span 等功能时。准确了解代码路径中 span 的来源可能非常宝贵。为了解决此需求,OTel Java 代理的 Elastic 发行版包括 span 堆栈跟踪功能。此功能通过为超过可配置最短持续时间的 span 收集相应的堆栈跟踪来提供关键见解,从而准确指出 span 在代码中的起始位置。

这个简单而强大的功能显着增强了问题故障排除,使开发人员可以更清楚地了解其应用程序的性能动态。

在上面的示例中,它允许您获取 gRPC 调用的调用堆栈,这有助于了解哪些代码路径触发了它。

自动检测服务和云资源

在当今广泛而多样化的云环境中,通常包括多个区域和云提供商,掌握有关服务运行位置的信息非常有价值。特别是在 Java 服务中,服务名称通常嵌入在部署工件中,自动检索服务和云资源信息的能力标志着可用性的巨大飞跃。

为了解决这一需求,OTel Java Agent 的 Elastic 发行版包含了针对服务和云资源的内置自动检测器,特别是针对 AWS 和 GCP 的检测器,这些检测器来源于 OpenTelemetry Java Contrib 仓库。此功能默认开启,增强了可观测性,简化了跨各种云平台的服务管理,使其成为任何基于云的部署的关键资产。

使用 EDOT Java 的方法

OTel Java Agent 的 Elastic 发行版旨在满足我们用户的实际需求,适应各种需求和战略方法。无论您是希望完全集成新的可观测性功能,还是只是增强现有设置,Elastic 发行版都提供了多种技术途径来利用其功能。这种灵活性确保用户可以根据其特定的运营要求和目标来定制代理的实现。

直接使用 Elastic 的发行版

利用上述功能最直接的方法是采用 OTel Java Agent 的 Elastic 发行版,作为标准 OTel Java Agent 的直接替代品。从结构上讲,Elastic 发行版充当 OTel Java Agent 的包装器,保持与所有上游配置选项的完全兼容性,并包含其所有功能。此外,它还包括上述增强其功能的先进功能。Elastic 发行版的用户还将受益于 Elastic 提供的全面技术支持,一旦代理实现全面可用性,技术支持将立即开始。要开始使用,只需下载代理 Jar 文件并将其附加到您的应用程序即可。

​​java -javaagent:/pathto/elastic-otel-javaagent.jar -jar myapp.jar

将 Elastic 的扩展与原生的 OTel Java Agent 一起使用

如果您希望继续使用原生的 OTel Java Agent,但又想利用上述功能,您可以灵活地这样做。我们为此目的专门提供了一个单独的代理扩展包。要集成这些增强功能,只需下载扩展 jar 文件并将其放置到指定目录,并配置 OTel Java Agent 的扩展目录。

​​OTEL_JAVAAGENT_EXTENSIONS=/pathto/elastic-otel-agentextension.jar
java -javaagent:/pathto/otel-javaagent.jar -jar myapp.jar

将 Elastic 的扩展与 OTel Java SDK 手动结合使用

如果您使用 OTel API 将检测直接构建到应用程序中,并且依赖 OTel Java SDK 而不是自动 Java Agent,您仍然可以使用我们讨论的功能。每个功能都设计为独立的组件,可以与 OTel Java SDK 框架集成。要实现这些功能,只需参考每个功能的具体说明,了解如何相应地配置 OTel Java SDK。

此方法确保您可以根据自己的特定需求定制可观测性工具,而不会影响功能。

未来的计划和贡献

我们致力于 OpenTelemetry,并且我们对 OpenTelemetry Java 项目的贡献将继续不受限制。我们不仅专注于 OTel Java 项目中的一般改进,而且还致力于确保本博文中讨论的功能成为 OpenTelemetry Java SDK/Agent 的官方扩展,并包含在 OpenTelemetry Java Contrib 仓库中。我们已经贡献了Span 堆栈跟踪功能,并发起了推断 Span 功能的贡献,并且我们热切期待在 Elastic 的分析代理成功集成后,添加分析关联功能的机会。

此外,我们的努力不仅限于当前的增强功能;我们正在积极地将更多功能从 Elastic APM Java Agent 移植到 OpenTelemetry。一个特别雄心勃勃且令人兴奋的尝试是我们的项目,即实现 OpenTelemetry Java Agent 的动态可配置性。未来的此项增强功能将允许使用 OpenTelemetry Agent Management Protocol (OpAMP) 来远程和动态配置 OTel Java Agent,从而提高其适应性和易用性。

我们鼓励您体验 OTel Java Agent 的新 Elastic 发行版,并与我们分享您的反馈。当我们在努力增强 OpenTelemetry 的功能和覆盖范围时,您的见解非常宝贵,使其更加强大且用户友好。

请在github和我们最新的EDOT 博客中查看有关 OpenTelemetry 的 Elastic 发行版的更多信息

Elastic 提供以下 EDOT 组件

此帖子中描述的任何特性或功能的发布和时间安排仍由 Elastic 自行决定。任何当前不可用的特性或功能可能不会按时交付或根本不交付。