上游 OpenTelemetry 收集器和语言 SDK
编辑

这是您可以用来将 Elastic 与 OpenTelemetry 集成的几种方法之一。

要比较各种方法并为您的用例选择最佳方法,请参阅将 OpenTelemetry 与 APM 结合使用

Elastic Stack 原生支持 OpenTelemetry 协议 (OTLP)。这意味着从您的应用程序和基础设施收集的跟踪数据和指标可以直接发送到 Elastic Stack。

从上游 OpenTelemetry 收集器发送数据编辑

使用 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]

接收器,例如转发 APM 代理发出的数据的OTLP 接收器,或主机指标接收器

我们建议使用批处理处理器内存限制器处理器。有关更多信息,请参阅推荐的处理器

调试导出器有助于故障排除,并支持可配置的详细程度级别:basic(默认)、normaldetailed

Elastic 可观测性端点配置。APM Server 通过 gRPC 传输上的 OTLP 协议(OTLP/gRPC)和 HTTP 传输上的 OTLP 协议(OTLP/HTTP)都支持 ProtoBuf 有效负载。要详细了解这些导出器,请参阅 OpenTelemetry 收集器文档:OTLP/HTTP 导出器OTLP/gRPC 导出器。在将端点添加到现有配置时,可以添加可选的名称组件,例如otlp/elastic,以区分如OpenTelemetry 收集器配置基础知识中所述的端点。

APM Server 端点的主机名和端口。例如,elastic-apm-server:8200

Elastic APM密钥令牌授权的凭据(Authorization: "Bearer a_secret_token")或API 密钥授权Authorization: "ApiKey an_api_key")。

特定于环境的配置参数可以方便地作为环境变量传递,这些变量已在此处记录(例如ELASTIC_APM_SERVER_ENDPOINTELASTIC_APM_SECRET_TOKEN)。

[预览] 此功能处于技术预览阶段,可能会在将来的版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版功能不受正式 GA 功能的支持 SLA 的约束。 要将 OpenTelemetry 日志发送到 Elastic Stack 版本 8.0 或更高版本,请声明logs管道。

您现在可以开始导出服务和应用程序的跟踪和指标了。

使用 OpenTelemetry 收集器时,应始终优先通过OTLP导出器将数据发送到 Elastic APM Server。其他方法,例如使用elasticsearch导出器将数据直接发送到 Elasticsearch 将数据发送到 Elastic Stack,但会绕过 APM Server 执行的所有验证和数据处理。此外,如果您使用elasticsearch导出器,则您的数据将无法在 Kibana 可观测性应用程序中查看。

从上游 OpenTelemetry SDK 发送数据编辑

本文档概述了如何将数据直接从上游 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 日志目前处于技术预览阶段。

OTEL_RESOURCE_ATTRIBUTES

描述服务和服务运行所在环境的字段。有关更多信息,请参阅资源属性

OTEL_EXPORTER_OTLP_ENDPOINT

APM Server URL。APM Server 侦听事件的主机和端口。

OTEL_EXPORTER_OTLP_HEADERS

包含 Elastic APM 密钥令牌或 API 密钥的授权标头:"Authorization=Bearer an_apm_secret_token""Authorization=ApiKey an_api_key"

有关如何格式化 API 密钥的信息,请参阅API 密钥

请注意Beareran_apm_secret_token之间以及ApiKeyan_api_key之间所需的空格。

如果您使用的是早于1.27.0版本的 Python OpenTelemetry 代理,则标头的内容必须进行 URL 编码。您可以使用 Python 标准库的urllib.parse.quote函数对标头的内容进行编码。

OTEL_METRICS_EXPORTER

要使用的指标导出器。有关更多信息,请参阅导出器选择

OTEL_LOGS_EXPORTER

要使用的日志导出器。有关更多信息,请参阅导出器选择

您现在可以开始收集跟踪和指标,然后再验证指标并在 Kibana 中可视化指标

将请求代理到 APM Server编辑

APM Server 在与 Elastic APM 代理请求相同的端口上同时支持OTLP/gRPCOTLP/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

后续步骤编辑