上游 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 Server 通过 gRPC 传输上的 OTLP 协议(OTLP/gRPC)和 HTTP 传输上的 OTLP 协议(OTLP/HTTP)都支持 ProtoBuf 有效负载。要详细了解这些导出器,请参阅 OpenTelemetry 收集器文档:OTLP/HTTP 导出器或OTLP/gRPC 导出器。在将端点添加到现有配置时,可以添加可选的名称组件,例如 |
|
APM Server 端点的主机名和端口。例如, |
|
Elastic APM密钥令牌授权的凭据( |
|
特定于环境的配置参数可以方便地作为环境变量传递,这些变量已在此处记录(例如 |
|
[预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版功能不受正式 GA 功能的支持 SLA 的约束。 要将 OpenTelemetry 日志发送到 Elastic Stack 版本 8.0 或更高版本,请声明 |
您现在可以开始导出服务和应用程序的跟踪和指标了。
使用 OpenTelemetry 收集器时,应始终优先通过OTLP
导出器将数据发送到 Elastic APM Server。其他方法,例如使用elasticsearch
导出器将数据直接发送到 Elasticsearch 将数据发送到 Elastic Stack,但会绕过 APM Server 执行的所有验证和数据处理。此外,如果您使用elasticsearch
导出器,则您的数据将无法在 Kibana 可观测性应用程序中查看。
本文档概述了如何将数据直接从上游 OpenTelemetry SDK 发送到 APM Server,这在入门时是合适的。但是,在许多情况下,您应该使用 OpenTelemetry SDK 将数据发送到处理并将数据导出到 APM Server 的 OpenTelemetry 收集器。在OpenTelemetry 文档中详细了解何时以及如何使用收集器。
要将跟踪和指标导出到 APM Server,请使用 OpenTelemetry API、SDK 或两者都使用来检测您的服务和应用程序。例如,如果您是 Java 开发人员,则需要使用OpenTelemetry Java 代理检测您的 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 Server 获取 OpenTelemetry 日志目前处于技术预览阶段。 |
|
描述服务和服务运行所在环境的字段。有关更多信息,请参阅资源属性。 |
|
APM Server URL。APM Server 侦听事件的主机和端口。 |
|
包含 Elastic APM 密钥令牌或 API 密钥的授权标头: 有关如何格式化 API 密钥的信息,请参阅API 密钥。 请注意 如果您使用的是早于1.27.0版本的 Python OpenTelemetry 代理,则标头的内容必须进行 URL 编码。您可以使用 Python 标准库的 |
|
要使用的指标导出器。有关更多信息,请参阅导出器选择。 |
|
要使用的日志导出器。有关更多信息,请参阅导出器选择。 |
您现在可以开始收集跟踪和指标,然后再验证指标并在 Kibana 中可视化指标。
APM Server 在与 Elastic APM 代理请求相同的端口上同时支持OTLP/gRPC和OTLP/HTTP协议。为了简化设置,我们建议在将请求代理或负载均衡到 APM Server 时使用 OTLP/HTTP。
如果您使用的是 OTLP/gRPC 协议,则对 APM Server 的请求必须使用 TLS 上的 HTTP/2 或 HTTP/2 明文 (H2C)。无论使用哪种协议,OTLP/gRPC 请求都将具有标头:"Content-Type: application/grpc"
。
使用 AWS ALB 等第 7 层 (L7) 代理时,必须以确保对 APM Server 的请求遵循上述规则的方式代理请求。例如,使用 ALB 时,您可以创建规则以根据进入 ALB 的请求的标头选择备用后端协议。在此示例中,当请求上存在"Content-Type: application/grpc"
标头时,您将选择 gRPC 协议。
有关如何配置 AWS ALB 以支持 gRPC 的更多信息,请参阅此 AWS 博客文章:应用程序负载均衡器支持端到端 HTTP/2 和 gRPC。
有关 APM Server 如何服务 gRPC 请求的更多信息,请参阅多路复用 gRPC 和 HTTP/1.1。