什么是 OpenTelemetry?
OpenTelemetry是一个云原生计算基金会 (CNCF) 沙盒项目,它提供了供应商中立的、特定于语言的代理、SDK 和 API,您可以使用它们从所有受监控的应用程序中收集分布式跟踪、指标和日志数据。OpenTelemetry 代理能够自动检测应用程序代码以显示性能数据,这些数据对于帮助您了解服务的健康状况非常重要——为应用程序开发人员提供了选择和选择哪些代理监控其应用程序的灵活性。
致力于开放标准支持
从开源到开源代码,开放性是我们 Elastic 的 DNA。我们不仅从我们编写和发布的代码的角度,而且从我们摄取的数据的角度来拥抱这种开放性。我们一直站在采用开放标准的最前沿,以此为我们的用户提供灵活性,让他们可以选择他们希望如何将数据传送到 Elasticsearch 并利用 Elastic Stack 的功能。这种支持开放标准的承诺体现在我们对其他开放标准和其他流行的开源项目的支持上,例如 Prometheus、OpenTracing、W3C Trace-Context和Jaeger。
2019 年初,OpenTracing 和 OpenCensus 开始了标准化 API 并构建完整解决方案的旅程,使用户能够更轻松地跨所有检测服务捕获跟踪和遥测数据。在Elastic APM中构建了对 OpenTracing 的支持后,我们作为 OpenTelemetry 项目的成员积极参与。
如何开始使用 Elastic APM 和 OpenTelemetry
为了向 Elastic APM 添加对 OpenTelemetry 的支持,我们扩展了OpenTelemetry 收集器 contrib 存储库并添加了 Elastic APM 导出器。导出器将从您的服务收集的 OpenTelemetry 跟踪数据转换为 Elastic 的协议,然后再通过 APM 服务器将数据发送到 Elastic APM。扩展 OpenTelemetry 收集器意味着无需对已埋点的服务进行任何更改即可开始使用 Elastic APM。只需将 Elastic 导出器放到您的 OpenTelemetry 设置中,然后在 Elastic APM 中查看您的跟踪数据。
部署导出器并将数据发送到 Elastic 后,您可以在 APM 应用程序中可视化这些数据,就像您对 Elastic APM 代理捕获的任何其他跟踪一样。
OpenTelemetry 收集器贡献存储库包含一个简单的入门示例。只需按照入门指南将 Elastic APM 作为导出器添加到示例中即可。
入门指南
本指南假定您已经使用 OpenTelemetry API 和/或 SDK 检测了您的服务。如果您还没有,请参阅 Elastic APM安装和运行指南以开始使用 Elastic APM 代理。
下载收集器
opentelemetry-collector-contrib repository
Docker 镜像在dockerhub上可用:
您还可以通过克隆并运行来构建collector-contrib:
配置收集器
yaml
至少,您必须定义要向其发送数据的 APM 服务器实例的 URL。例如:
有关其他配置选项,请参阅配置参考,例如指定 API 密钥、秘密令牌或 TLS 设置。
service.pipelines.traces.exporters
如果我们将所有内容放在一起,这是一个示例配置文件,它接受来自 OpenTelemetry 代理的输入、处理数据并将其发送到 Elasticsearch Service 实例。
概念验证
根据入门示例,我们可以通过docker快速的启动多个使用opentelemetry sdk埋点的应用,并且启动一个Elastic collector-contrib,以及一个APM server:
并将colletor的配置设置为:
这里定义的export会将数据发送到Elastic APM server,在APM UI上,将可以看到来自otel sdk发来的数据:
因为都遵循同样的分布式追踪的逻辑,可以无缝使用Elastic APM上的各种分析工具:
解决方案的灵活性
通过将 OpenTelemetry 与Elastic Observability解决方案和 Elastic Stack 相结合,您可以灵活地选择要使用哪些代理(Elastic 或 OpenTelemetry)来检测您的应用程序。无论您选择什么,您都可以在 APM 应用程序中可视化端到端的分布式跟踪。您还可以获得一个统一的解决方案来可视化跟踪以及指标和日志、强大的分析以及机器学习和具有灵活性和规模的警报等功能的好处。
随着 OpenTelemetry 发展为包含指标和日志,我们将努力增强我们的支持,以便您可以将我们的代理和 Beats 与 OpenTelemetry 代理无缝结合使用。同时,如果您正在寻找捕获指标或日志,您可以使用Metricbeat和Filebeat模块为您提供监控堆栈的完整可见性。