OpenTelemetry 本机支持编辑

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

从 OpenTelemetry 收集器发送数据编辑

使用 OTLP 导出器将您的 OpenTelemetry 收集器实例连接到 Elastic 可观测性

receivers: 
  # ...
  otlp:

processors: 
  # ...
  memory_limiter:
    check_interval: 1s
    limit_mib: 2000
  batch:

exporters:
  debug:
    verbosity: detailed 
  otlp/elastic: 
    # 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]
      exporters: [debug, otlp/elastic]
    metrics:
      receivers: [otlp]
      exporters: [debug, otlp/elastic]
    logs: 
      receivers: [otlp]
      exporters: [debug, otlp/elastic]

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

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

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

Elastic 可观测性端点配置。APM 服务器通过 OTLP 协议(通过 gRPC 传输 (OTLP/gRPC))和 OTLP 协议(通过 HTTP 传输 (OTLP/HTTP))支持 ProtoBuf 有效负载。要详细了解这些导出器,请参阅 OpenTelemetry 收集器文档:OTLP/HTTP 导出器OTLP/gRPC 导出器

APM 服务器端点的主机名和端口。例如,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 服务器。其他方法,例如使用 elasticsearch 导出器 将数据直接发送到 Elasticsearch,会将数据发送到 Elastic Stack,但会绕过 APM 服务器执行的所有验证和数据处理。此外,如果您使用 elasticsearch 导出器,您的数据将无法在 Kibana 可观测性应用程序中查看。

从 OpenTelemetry 代理发送数据编辑

要将跟踪和指标导出到 APM 服务器,请使用 OpenTelemetry API、SDK 或两者来检测您的服务和应用程序。例如,如果您是 Java 开发人员,则需要使用 适用于 Java 的 OpenTelemetry 代理 来检测您的 Java 应用程序。请参阅 OpenTelemetry 检测指南以下载适用于您的语言的 OpenTelemetry 代理或 SDK。

定义环境变量以配置 OpenTelemetry 代理并启用与 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 日志目前处于技术预览阶段。

OTEL_RESOURCE_ATTRIBUTES

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

OTEL_EXPORTER_OTLP_ENDPOINT

APM 服务器 URL。APM 服务器侦听事件的主机和端口。

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 之间需要的空格。

OTEL_METRICS_EXPORTER

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

OTEL_LOGS_EXPORTER

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

您现在可以在 验证指标 和在 Kibana 中可视化指标 之前收集跟踪和 指标

将请求代理到 APM 服务器编辑

APM 服务器在与 Elastic APM 代理请求相同的端口上支持 OTLP/gRPCOTLP/HTTP 协议。为了便于设置,我们建议在将请求代理或负载均衡到 APM 服务器时使用 OTLP/HTTP。

如果您使用 OTLP/gRPC 协议,则对 APM 服务器的请求必须使用 TLS 上的 HTTP/2 或明文 HTTP/2 (H2C)。无论使用哪种协议,OTLP/gRPC 请求都将包含以下标头:"Content-Type: application/grpc"

使用第 7 层 (L7) 代理(如 AWS ALB)时,必须以确保对 APM 服务器的请求遵循上述规则的方式代理请求。例如,使用 ALB,您可以创建规则以根据进入 ALB 的请求的标头选择备用后端协议。在此示例中,当请求上存在 "Content-Type: application/grpc" 标头时,您将选择 gRPC 协议。

有关如何配置 AWS ALB 以支持 gRPC 的更多信息,请参阅这篇 AWS 博客文章:应用程序负载均衡器对端到端 HTTP/2 和 gRPC 的支持

有关 APM 服务器如何处理 gRPC 请求的更多信息,请参阅 多路复用 gRPC 和 HTTP/1.1

后续步骤编辑