Observability:OpenTelemetry Java Agent Elastic 分布正式发布

2024年10月9日   |   by mebius

作者:来自 ElasticAlexander WertJack ShiraziJonas KunzSylvain Juge

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

%title插图%num

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

使用 EDOT Java,你可以访问 OpenTelemetry Java 代理的所有功能以及:

  • 在这些改动上传至 OpenTelemetry 仓库之前,可获得由 Elastic 团队贡献的 SDK 改进和错误修复的访问权限。
  • 可访问可选功能,增强发送到 Elastic 的 OpenTelemetry 数据(例如,推断的 spans 和 span 堆栈跟踪)。

在这篇博文中,我们将探讨我们独特发行版背后的原理,详细介绍它带来的强大附加功能。我们将概述如何将这些增强功能与我们的发行版、标准 OTel SDK 或原始 OTel Jatgcodeva 代理结合使用。敬请期待,我们将在最后展望我们的未来计划,以及你可以期待 Elastic 未来对 OTel Java 做出哪些贡献。

OpenTelemetry Java (EDOT Java) 的 Elastic 发行版

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

Elastic 的 OTel Java 代理发行版旨在将专有的 Elastic Java 代理和 OpenTelemetry Java 代理的最佳方面结合在一起。此发行版通过扩展实现了一组附加功能,增强了原始 OTel Java 代理,同时仍然是完全兼容的嵌入式替代品。

%title插图%num

Elastic 对 OpenTelemetry 的承诺不仅侧重于标准化 OTel 周围的数据收集,还包括改进 OTel 组件并将 Elastic 的数据收集功能集成到 OTel 中。从这个角度来看,我们的最终目标是将 Elastic 发行版中的尽可能多的功能贡献给上游 OTel Java 代理;我们的发行版设计为,作为扩展实现的附加功能可直接与 OTel SDK 配合使用。这意味着它们可以独立于 Elastic 的发行版使用 – 无论是与 Otel Java SDK 还是与原始 OTel Java 代理一起使用。我们将在下面的部分中进一步讨论这些使用模式。

包含的功能

OpenTelemetry Java 代理的 Elastic 分发包含一套扩展,可提供下面概述的功能。

推断跨度(inferred spans)

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

%title插图%num

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

ELASTIC_OTEL_INFERRED_SPANS_ENABLED=true

与分析的关联

随着 OpenTelemetry 拥抱分析,以及 Elastic 提议捐赠其基于 eBPF 的持续分析代理,将分布式跟踪与持续分析数据关联起来的新领域已经打开。这种集成提供了前所未有的代码级洞察,可以洞察延迟问题和二氧化碳排放量,所有这些都在明确定义的服务、交易和跟踪上下文中实现。为了了解如何从这种关联中受益,请查看这篇博客文章,我们将在其中探讨这些技术如何融合以增强软件开发的可观察性和环保意识。

%title插图%num

Elastic Universal Profiling 的用户已经可以利用 OTel Java 代理的 Elastic 发行版来访问这一强大的集成。随着 Elastic 提议捐赠分析代理,我们预计此功能将很快提供给所有使用 OTel Java 代理和新 OTel eBPF 分析的 OTel 用户。

跨度堆栈跟踪

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

%title插图%num

这个简单但功能强大的功能显著增强了问题排查能力,让开发人员能够更清楚地了解其应用程序的性能动态。

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

自动检测服务和云资源

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

%title插图%num

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

使用 EDOT Java 的方法

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

直接使用 Elastic 的发行版

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

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

将 Elastic 的扩展与原始 OTel Java 代理结合使用

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

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

使用 OTel Java SDK 手动使用 Elastic 的扩展

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

这种方法可确保你可以根据特定需求定制可观察性工具,而不会影响功能。

未来计划和贡献

我们致力于 OpenTelemetry,我们对 OpenTelemetry Java 项目的贡献将无止境地持续下去。我们不仅专注于 OTel Java 项目内的一般改进,还致力于确保本博客文章中讨论的功能成为 OpenTelemetry Java SDK/Agent 的官方扩展,并包含在 OpenTelemetry Java Contrib 存储库中。我们已经贡献了跨度堆栈跟踪功能并启动了推断跨度功能的贡献tgcode,我们热切期待在成功集成 Elastic 的分析代理后添加分析关联功能的机会。

此外,我们的努力不仅限于当前的增强功能;我们正在积极努力将更多功能从 Elastic APM Java 代理移植到 OpenTelemetry。一项特别雄心勃勃但又令人激动的努力是我们的项目,旨在实现 OpenTelemetry Java 代理的动态可配置性。未来的增强功能将允许使用 OpenTelemetry 代理管理协议 (OpAMP) 远程动态配置 OTel Java 代理,从而提高其适应性和易用性。

我们鼓励你体验 OTel Java 代理的新 Elastic 发行版并与我们分享你的反馈。你的见解非常宝贵,因为我们致力于增强 OpenTelemetry 的功能和覆盖范围,使其更加强大和用户友好。

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

Elastic 提供 EDOT 的以下组件:

  • OpenTelemetry (EDOT) 收集器的 Elastic 分发
  • OpenTelemetry (EDOT) Java 的 Elastic 分发。
  • Elastic Distribution of OpenTelemetry (EDOT) Python
  • Elastic Distribution of OpenTelemetry (EDOT) NodeJS
  • Elastic Distribution of OpenTelemetry (EDOT) .NET
  • Elastic Distribution of OpenTelemetry (EDOT) iOSAndroid

本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。

原文:Announcing GA of Elastic distribution of the OpenTelemetry Java Agent — Elastic Observability Labs

文章来源于互联网:Observability:OpenTelemetry Java Agent Elastic 分布正式发布