OpenTelemetry 不仅仅是成为可观测性的开放摄取标准。作为云原生计算基金会 (CNCF) 的主要项目之一,其提交次数与 Kubernetes 一样多,它正获得主要 ISV 和云提供商的支持,为该框架提供支持。来自金融、保险、技术和其他行业的许多全球公司开始以 OpenTelemetry 为标准。通过 OpenTelemetry,DevOps 团队可以使用一致的方法来收集和摄取遥测数据,从而为可观测性提供事实上的标准。
Elastic® 在战略上以 OpenTelemetry 作为可观测性和安全性的主要数据收集架构。此外,Elastic 还致力于帮助 OpenTelemetry 成为可观测性生态系统中最好的事实上的数据收集基础设施。Elastic 正在深化其与 OpenTelemetry 的关系,这不仅仅是最近向 OpenTelemetry (OTel) 贡献了 Elastic Common Schema (ECS)。
如今,自 Elastic 7.14 以来,Elastic 通过能够直接摄取基于 OpenTelemetry 协议 (OTLP) 的追踪、指标和日志,原生支持 OpenTelemetry。
在本博客中,我们将回顾 Elastic 提供的当前 OpenTelemetry 支持,其中包括以下内容
- 轻松摄取分布式追踪和指标,适用于为 Python、NodeJS、Java、Go 和 .NET 配置了 OpenTelemetry 代理的应用程序
- OpenTelemetry 日志检测和摄取,使用各种配置
- 开放语义约定,通过 ECS 实现日志等,这不属于 OpenTelemetry 的一部分
- 基于机器学习的 AIOps 功能,例如延迟关联、失败关联、异常检测、日志峰值分析、预测模式分析、Elastic AI 助手支持等等,所有这些都适用于原生 OTLP 遥测。
- 按照您自己的进度将应用程序迁移到 OpenTelemetry。即使混合使用 OpenTelemetry 和/或 Elastic APM 代理的服务,Elastic 的 APM 功能也能无缝运行。您甚至可以将 OpenTelemetry 检测与 Elastic Agent 结合使用。
- 与 Kubernetes 集群的集成视图和分析,大多数 OpenTelemetry 应用程序都运行在这些集群上。当分析基于 OpenTelemetry 的应用程序的问题时,Elastic 可以突出显示与每个服务相关的特定 pod 和容器。
将 OpenTelemetry 摄取到 Elastic 中
如果您有兴趣了解将 OpenTelemetry 追踪和指标摄取到 Elastic 中有多么简单,请按照本博客中概述的步骤进行操作。
让我们概述一下 Elastic 为摄取 OpenTelemetry 数据提供了哪些功能。以下是您的所有选项
使用 OpenTelemetry Collector
当使用 OpenTelemetry Collector(最常见的配置选项)时,您只需添加两个关键变量。
这些说明利用了特定的 opentelemetry-collector 配置来配置 Elastic。本质上,在 elastic/opentelemetry-demo 中指定的 Elastic values.yaml 文件使用两个主要值配置 opentelemetry-collector 以指向 Elastic APM Server
OTEL_EXPORTER_OTLP_ENDPOINT 是 Elastic 的 APM Server
OTEL_EXPORTER_OTLP_HEADERS Elastic 授权
这两个值可以在 Elastic Cloud 中 APM 集成说明(集成->APM)下的 OpenTelemetry 设置说明中找到。
嵌入在代码中的原生 OpenTelemetry 代理
如果您考虑在代码中使用 OpenTelemetry 库,您可以简单地将服务指向 Elastic 的 APM 服务器,因为它支持原生 OLTP 协议。不需要特殊的 Elastic 转换。
为了有效地演示这一点并提供有关如何使用 OpenTelemetry 的一些教育,我们有两个应用程序可供您学习
- Elastic 版本的 OpenTelemetry 演示:与所有其他可观测性供应商一样,我们有自己的 OpenTelemetry 演示的分支版本。
- Elastiflix:此演示应用程序是一个示例,可帮助您学习如何在各种语言和遥测信号上进行检测。
请查看我们关于使用 Elastiflix 应用程序和使用 OpenTelemetry 进行检测的博客
- Elastiflix 应用程序,使用 OpenTelemetry 检测不同语言的指南
- Python:自动检测,手动检测
- Java:自动检测,手动检测
- Node.js:自动检测,手动检测
- .NET:自动检测,手动检测
我们也制作了有关这些主题的 YouTube 视频
- 如何使用 OpenTelemetry 手动检测 Java(第 1 部分)
- 如何使用 OpenTelemetry 手动检测 Java(第 2 部分)
- 使用 OpenTelemetry 的自定义 Java 检测
- Elastic APM - 使用 OpenTelemetry 的 .NET 自动检测
- 如何使用 OpenTelemetry 手动检测 .NET 应用程序
鉴于 Elastic 和 OpenTelemetry 庞大的用户群,这些为任何试图了解使用 OpenTelemetry 进行检测的复杂性的用户提供了丰富的教育资源。
支持 OpenTelemetry 的 Elastic Agent
如果您已经实现了 OpenTelemetry,您仍然可以将它们与 OpenTelemetry 一起使用。Elastic APM 代理现在能够将 OpenTelemetry span 作为追踪的一部分进行发送。这意味着如果您的应用程序中有任何组件发出 OpenTelemetry span,它将成为 Elastic APM 代理捕获的追踪的一部分。
Elastic 中的 OpenTelemetry 日志
如果您查看 OpenTelemetry 的文档,您会发现许多语言库仍处于实验阶段或尚未实现的状态。根据文档,Java 处于稳定状态。根据您服务的语言以及您对冒险的渴望,有多种选项可以将您服务和应用程序的日志导出,并在您的可观测性后端中将它们整合在一起。
在之前的博客中,我们讨论了 将日志数据正确导入 Elastic for Java 的 3 种不同配置。该博客探讨了 OpenTelemetry 日志的当前技术水平,并以以下原则为指导,提供了有关可用方法的指导:
- 在适用的情况下,将服务日志与 OTel 生成的跟踪相关联
- 正确捕获异常
- 在跟踪、指标和日志之间保持通用上下文
- 支持 slf4j 键值对(“结构化日志”)
- 自动附加通过 OTel baggage 在服务之间传递的元数据
- 使用 Elastic 可观测性后端
- 无论采取何种方法,在 Elastic 中保持一致的数据保真度
博客中介绍了三种模型,它们目前用于将您的应用程序或服务日志与 OTel 跟踪和 baggage 相关联地传输到 Elastic
- 使用嵌入式 OpenTelemetry Instrumentation 库,通过 OTLP 协议将服务中的日志(以及跟踪和指标)输出到 Elastic
- 将服务中的日志写入由 OpenTelemetry Collector 抓取的文件,然后通过 OTLP 协议转发到 Elastic
- 将服务中的日志写入由 Elastic Agent(或 Filebeat)抓取的文件,然后通过 Elastic 定义的协议转发到 Elastic
请注意,与 (2) 和 (3) 相比,(1) 不涉及在摄取到 Elastic 之前将服务日志写入文件。
OpenTelemetry 是 Elastic 的首选模式
Elastic 最近向 OpenTelemetry (OTel) 项目贡献了 Elastic Common Schema (ECS),从而在 OTel 语义约定框架内为安全性和可观测性数据实现了统一的数据规范。
ECS 是一种开源规范,是在 Elastic 用户社区的支持下开发的,旨在定义在 Elasticsearch® 中存储事件数据时要使用的一组通用字段。ECS 有助于减少数据重复造成的管理和存储成本,从而提高运营效率。
同样,OTel 的语义约定 (SemConv) 也为各种类型的操作和数据指定了通用名称。使用 OTel SemConv 的好处是遵循一个通用的命名方案,该方案可以为 OTel 用户在代码库、库和平台之间进行标准化。
ECS 和 OTel SemConv 的合并将有助于推进 OTel 的采用,以及可观测性和安全领域持续的演变和融合。
Elastic 可观测性 APM 和机器学习功能
所有 Elastic 可观测性的 APM 功能都可用于 OTel 数据(请在我们的博客 使用 OpenTelemetry 实现独立性 中了解更多信息)
- 服务地图
- 服务详细信息(延迟、吞吐量、失败的事务)
- 服务之间的依赖关系
- 事务(跟踪)
- ML 相关性(特别是对于延迟)
- 服务日志
除了 Elastic 的 APM 和遥测数据的统一视图之外,您现在还可以使用 Elastic 强大的机器学习功能来减少分析和警报,从而帮助减少 MTTR。以下是我们拥有的一些基于 ML 的 AIOps 功能
- 异常检测: Elastic 可观测性在启用后(请参阅文档),通过持续建模您的 OpenTelemetry 数据的正常行为,自动检测异常 — 学习趋势、周期性等。
- 日志分类: Elastic 还可以快速识别您的 OpenTelemetry 日志事件中的模式,以便您可以更快地采取行动。
- 高延迟或错误的事务: Elastic 可观测性的 APM 功能可帮助您发现哪些属性导致事务延迟增加,并识别哪些属性在区分事务失败和成功方面最具影响力。
- 日志峰值检测器 可帮助识别 OpenTelemetry 日志速率增加的原因。通过使用分析工作流视图,可以轻松查找和调查异常峰值的原因。
- 日志模式分析 可帮助您查找非结构化日志消息中的模式,并使您更容易检查您的数据。
Elastic 允许您按照自己的计划迁移到 OTel
尽管 OpenTelemetry 支持多种编程语言,但其主要功能组件 — 指标、跟踪和日志 — 的 状态 仍处于不同的阶段。因此,迁移用 Java、Python 和 JavaScript 编写的应用程序是很好的开始选择,因为它们的指标、跟踪和日志(对于 Java)是稳定的。
对于其他尚未支持的语言,您可以使用 Elastic Agent 轻松地对其进行检测,从而在混合模式(Elastic Agent 与 OpenTelemetry Agent)下运行您的 全栈可观测性平台。
这是一个简单的示例
上面显示了我们标准 Elastic Agent 应用程序的一个简单变体,其中一个服务切换到 OTel — newsletter-otel 服务。但是,我们可以根据开发资源允许,轻松地根据需要将每个服务转换为 OTel。
因此,您可以在特定语言达到稳定状态时,将所需的内容迁移到 OpenTelemetry,然后继续迁移到 OpenTelemetry Agent。
Elastic 中集成的 Kubernetes 和 OpenTelemetry 视图
Elastic 使用 Elastic Agent 管理您的 Kubernetes 集群,您可以在运行 OpenTelemetry 应用程序的 Kubernetes 集群上使用它。因此,您不仅可以将 OpenTelemetry 用于您的应用程序,而且 Elastic 还可以监控相应的 Kubernetes 集群。
Kubernetes 有两种配置
1. 仅在 Kubernetes 集群上部署 Elastic Agent DaemonSet。 我们在题为 使用 Elastic 可观测性管理 Kubernetes 集群 的文章中对此进行了概述。这也只会将 Kubernetes 指标和日志推送到 Elastic。
2. 部署 Elastic Agent,不仅包括 Kubernetes DaemonSet,还包括 Elastic 的 APM 集成、Defend(安全)集成和网络数据包捕获集成,以提供更全面的 Kubernetes 集群可观测性。我们在以下文章 使用 Elastic 和 OpenTelemetry 实现 Kubernetes 的现代可观测性和安全性 中概述了此配置。
两个 OpenTelemetry 可视化 示例都使用了 OpenTelemetry 演示,在 Elastic 中,我们将 Kubernetes 信息与应用程序关联起来,使您能够从 APM 中的跟踪中查看 Kubernetes 信息。这在进行故障排除时提供了一种更集成的方法。
总结
本质上,Elastic 的承诺不仅仅是支持 OpenTelemetry。我们致力于确保我们的客户不仅采用 OpenTelemetry,而且能够通过它蓬勃发展。通过我们的解决方案、专业知识和资源,我们旨在提升每个企业的可观测性之旅,将数据转化为可操作的见解,从而推动增长和创新。
开发人员资源
- Elastiflix 应用程序,使用 OpenTelemetry 检测不同语言的指南
- Python:自动检测,手动检测
- Java:自动检测,手动检测
- Node.js:自动检测,手动检测
- .NET:自动检测,手动检测
- Go:手动检测
- OpenTelemetry 的最佳实践
通用配置和用例资源
- 在 Elastic 上使用 OpenTelemetry 实现独立性
- 使用 Elastic 和 OpenTelemetry 实现 Kubernetes 的现代可观测性和安全性
- 使用 OpenTelemetry 和 Elastic 进行日志记录的 3 种模型
- 将免费开放的 Elastic APM 添加为 Elastic 可观测性部署的一部分
- 使用 Elastic 通过代码中的 OpenTelemetry API 捕获自定义指标
- 使用 OpenTelemetry 和 Elastic 为您的可观测性平台提供面向未来的保障
- Elastic 可观测性:专为 Kubernetes、OpenTelemetry、Prometheus、Istio 等开放技术而构建
还没有 Elastic Cloud 帐户?注册 Elastic Cloud 并试用我上面讨论的检测功能。我很想收到您关于使用 Elastic 获取应用程序堆栈可见性的体验的反馈。
本文中描述的任何功能或功能的发布和时间安排均由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时交付或根本无法交付。