OpenTelemetry 如何促进应用程序的自动和手动检测。
为了使系统可观测,必须对其进行检测:也就是说,来自系统组件的代码必须发出跟踪、指标和日志。
无需修改源代码,您就可以使用自动检测从应用程序收集可观测数据,如果您之前使用 APM 代理从您的应用程序中提取可观测数据,自动检测将为您提供类似的开箱即用体验。
为了进一步加强应用程序的检测,您可以通过针对 OpenTelemetry API 进行编码来手动检测您的应用程序。
为此,您不需要检测应用程序中使用的所有依赖项:
-
通过直接调用 OpenTelemetry API 本身,可以开箱即用地观察到您的一些库。这些库有时被称为本地检测。
-
对于没有这种集成的库,OpenTelemetry 项目提供特定于语言的 Instrumentation Libraries。
请注意,对于大多数语言,可以同时使用手动和自动检测:自动检测将使您能够快速地检测您的应用程序,与此同时,手动检测将使您能够将细粒度的可观察性嵌入到您的代码中。
手动和自动检测的确切安装机制因您开发的语言而异,但在以下各节中介绍了一些相似之处。
自动检测
如果适用,OpenTelemetry 的特定语言实现将提供一种在不接触源代码的情况下检测应用程序的方法。虽然底层机制取决于语言,但至少这会将 OpenTelemetry API 和 SDK 功能添加到您的应用程序中。此外,他们可能会添加一组 Instrumentation Libraries 和 exporter 依赖项。
配置可通过环境变量和可能的语言特定方式(例如 Java 中的系统属性)获得。至少,必须配置服务名称以标识正在检测的服务,提供各种其他配置选项,可能包括:
-
数据源特定配置
-
导出器配置
-
Propagator配置
-
资源配置
手动检测
导入 OpenTelemetry API 和 SDK
您首先需要将 OpenTelemetry 导入您的服务代码,如果你正在开发一个库或其他一些旨在被可运行二进制文件使用的组件,那么你将只依赖于 API。如果您的组件是一个独立的流程或服务,那么您将依赖于 API 和 SDK。有关 OpenTelemetry API 和 SDK 的更多信息,请参阅规范。
配置 OpenTelemetry API
为了创建跟踪或指标,您需要首先创建一个跟踪器或指标提供程序。一般来说,我们建议 SDK 应该为这些对象提供一个默认的提供者。然后,您将从该提供商处获得一个跟踪器或指标生成器,并为其指定名称和版本。您在此处选择的名称应该能够准确识别所检测的内容,如果你正在编写写一个代码库,那么您应该以您的代码库命名它(例如com.legitimatebusiness.myLibrary),因为这个名称将命名所有生成的跟踪或指标事件。并且还建议您提供与您的库或服务的当前版本相对应的版本字符串(即 semver:1.0.0)。
配置 OpenTelemetry SDK
如果您正在构建服务流程,您还需要使用适当的选项配置 SDK,以便将可观测数据导出到某些分析后端。我们建议通过配置文件或其他机制以编程方式处理此配置,您可能希望根据每种语言的来调整配置选项。
创建可观测数据
配置 API 和 SDK 后,您就可以通过跟踪器和指标器对象自由创建跟踪和指标事件了,为您的依赖项使用 可检测库,查看注册表或您的语言的存储库以获取有关这些的更多信息。
导出数据
创建可观测数据后,您需要将其发送到某个地方。OpenTelemetry支持两种关键的方法把可观测数据从你的程序发送到分析后端,一种是直接发送,另外一种是通过OpenTelemetry Collector代理发送。
进程内导入要求你依赖一个或者多个Exporter或者库,可以把OTel内的span、metric对象转化为合适的可观测分析工具(如Jaeger 、Prometheus)的格式。此外,OpenTelemetry 支持称为 OTLP 的有线协议,所有 OpenTelemetry SDK 都支持该协议。该协议可用于将数据发送到 OpenTelemetry Collector,这是一个独立的二进制进程,可以作为服务实例的代理或 sidecar 运行,也可以在单独的主机上运行,然后可以将收集器配置为将此数据转发和导出到您选择的分析工具。
除了 Jaeger 或 Prometheus 等开源工具之外,越来越多的公司支持从 OpenTelemetry 获取可观测数据。有关详细信息,请参阅供应商。