上游 OpenTelemetry 收集器和语言 SDK
编辑上游 OpenTelemetry 收集器和语言 SDK
编辑这是您可以用来将 Elastic 与 OpenTelemetry 集成的几种方法之一。
要比较各种方法并为您的用例选择最佳方法,请参阅将 OpenTelemetry 与 APM 一起使用。
Elastic Stack 原生支持 OpenTelemetry 协议 (OTLP)。这意味着可以直接将从您的应用程序和基础设施收集的跟踪数据和指标发送到 Elastic Stack。
- 从上游 OpenTelemetry 收集器向 Elastic Stack 发送数据
- 从上游 OpenTelemetry 语言 SDK向 Elastic Stack 发送数据
使用 OTLP 导出器将您的 OpenTelemetry 收集器实例连接到 Elastic 可观测性
receivers: # ... otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: # ... memory_limiter: check_interval: 1s limit_mib: 2000 batch: exporters: debug: verbosity: detailed otlp: # Elastic APM server https endpoint without the "https://" prefix endpoint: "${env:ELASTIC_APM_SERVER_ENDPOINT}" headers: # Elastic APM Server secret token Authorization: "Bearer ${env:ELASTIC_APM_SECRET_TOKEN}" service: pipelines: traces: receivers: [otlp] processors: [..., memory_limiter, batch] exporters: [debug, otlp] metrics: receivers: [otlp] processors: [..., memory_limiter, batch] exporters: [debug, otlp] logs: receivers: [otlp] processors: [..., memory_limiter, batch] exporters: [debug, otlp]
调试导出器有助于进行故障排除,并支持可配置的详细级别: |
|
Elastic 可观测性端点配置。APM 服务器通过 gRPC 传输(OTLP/gRPC)和通过 HTTP 传输(OTLP/HTTP)的 OTLP 协议支持 ProtoBuf 有效负载。要了解有关这些导出器的更多信息,请参阅 OpenTelemetry 收集器文档:OTLP/HTTP 导出器或OTLP/gRPC 导出器。向现有配置添加端点时,可以添加可选的名称组件(如 |
|
APM 服务器端点的主机名和端口。例如, |
|
用于 Elastic APM 密钥令牌授权( |
|
特定于环境的配置参数可以方便地作为环境变量传递,如此处所述(例如, |
|
[预览] 此功能为技术预览版,可能会在未来的版本中更改或删除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。 要将 OpenTelemetry 日志发送到 Elastic Stack 8.0+ 版本,请声明一个 |
现在,您可以从您的服务和应用程序导出跟踪和指标了。
使用 OpenTelemetry 收集器时,应始终首选通过OTLP
导出器将数据发送到 Elastic APM 服务器。其他方法,例如使用elasticsearch
导出器将数据直接发送到 Elasticsearch,会将数据发送到 Elastic Stack,但会绕过 APM 服务器执行的所有验证和数据处理。此外,如果您使用 elasticsearch
导出器,则您的数据将无法在 Kibana 可观测性应用程序中查看。
本文档概述了如何直接从上游 OpenTelemetry SDK 向 APM 服务器发送数据,这在开始使用时是合适的。但是,在许多情况下,您应该使用 OpenTelemetry SDK 将数据发送到 OpenTelemetry 收集器,该收集器会处理数据并将其导出到 APM 服务器。请参阅OpenTelemetry 文档,详细了解何时以及如何使用收集器。
要将跟踪和指标导出到 APM 服务器,请使用 OpenTelemetry API、SDK 或两者来检测您的服务和应用程序。例如,如果您是 Java 开发人员,则需要使用适用于 Java 的 OpenTelemetry 代理来检测您的 Java 应用程序。请参阅OpenTelemetry 检测指南,以下载适用于您的语言的 OpenTelemetry 代理或 SDK。
定义环境变量以配置 OpenTelemetry 代理或 SDK,并启用与 Elastic APM 的通信。例如,如果您要检测 Java 应用程序,请定义以下环境变量
export OTEL_RESOURCE_ATTRIBUTES=service.name=checkoutService,service.version=1.1,deployment.environment=production export OTEL_EXPORTER_OTLP_ENDPOINT=https://apm_server_url:8200 export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer an_apm_secret_token" export OTEL_METRICS_EXPORTER="otlp" \ export OTEL_LOGS_EXPORTER="otlp" \ java -javaagent:/path/to/opentelemetry-javaagent-all.jar \ -classpath lib/*:classes/ \ com.mycompany.checkout.CheckoutServiceServer
[预览] 此功能为技术预览版,可能会在未来的版本中更改或删除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。 通过 APM 服务器进行的 OpenTelemetry 日志摄取目前处于技术预览阶段。 |
|
描述服务和运行服务的环境的字段。有关更多信息,请参阅资源属性。 |
|
APM 服务器 URL。APM 服务器侦听事件的主机和端口。 |
|
包含 Elastic APM 密钥令牌或 API 密钥的授权标头: 有关如何格式化 API 密钥的信息,请参阅API 密钥。 请注意 如果您使用的是 1.27.0 之前版本的 Python OpenTelemetry 代理,则标头的内容必须是 URL 编码的。您可以使用 Python 标准库的 |
|
要使用的指标导出器。有关更多信息,请参阅导出器选择。 |
|
要使用的日志导出器。有关更多信息,请参阅导出器选择。 |
现在,您可以收集跟踪和指标,然后再验证指标并在 Kibana 中可视化指标。
APM 服务器在与 Elastic APM 代理请求相同的端口上同时支持 OTLP/gRPC 和 OTLP/HTTP 协议。为了便于设置,我们建议在将请求代理或负载均衡到 APM 服务器时使用 OTLP/HTTP。
如果您使用 OTLP/gRPC 协议,则对 APM 服务器的请求必须使用基于 TLS 的 HTTP/2 或 HTTP/2 明文 (H2C)。无论使用哪种协议,OTLP/gRPC 请求都将包含标头:"Content-Type: application/grpc"
。
当使用 AWS ALB 等第 7 层 (L7) 代理时,必须以确保对 APM 服务器的请求遵循上述规则的方式代理请求。例如,使用 ALB 时,您可以创建规则以基于进入 ALB 的请求的标头选择替代后端协议。在此示例中,当请求上存在 "Content-Type: application/grpc"
标头时,您将选择 gRPC 协议。
有关如何配置 AWS ALB 以支持 gRPC 的更多信息,请参阅这篇 AWS 博客文章:Application Load Balancer Support for End-to-End HTTP/2 and gRPC。
有关 APM 服务器如何处理 gRPC 请求的更多信息,请参阅复用 gRPC 和 HTTP/1.1。