golang 项目 OpenTelemetry 实践
本文整理了 OpenTelemetry 在项目中的 trace 和 metric 实践,涵盖 Golang 开发、Elastic APM 对接和阿里云可观测性平台的集成方式。
🧩 一、Trace 实践
1. Golang 接入方式
- 使用
go.opentelemetry.io/otel
作为核心库。 - HTTP 层使用
otelhttp
中间件自动注入 trace context。 - 自定义 RPC 协议中,通过手动注入/提取 context 实现分布式追踪。
- 对 grpc/http client 请求使用
otelhttp.NewTransport()
包装 trace。
Golang 官方文档 里面有完整的示例。
2. Elastic APM 对接
- 使用 OTLP 导出器(HTTP 或 gRPC)将 trace 数据发送至 Elastic APM Server。
- 设置
OTEL_EXPORTER_OTLP_ENDPOINT
指向 Elastic APM 的入口。 - 配置
OTEL_EXPORTER_OTLP_HEADERS
头部进行鉴权。

3. 阿里云 可观测链路 OpenTelemetry版 对接
- 开通阿里云的 OpenTelemetry 可观测服务
- 会得到对应的 Endpoint 和 上报路径。例如
/adapt_@xxxxxxxxxxxx@xxxxxx/api/otlp/traces

📊 二、Metric 实践
1. 指标采集方式
- 使用
go.opentelemetry.io/otel/metric
,定义 Counter、Histogram 等。 - 创建
MeterProvider
并配置 Prometheus 或 OTLP Exporter。 - 示例指标:
api_login_request_duration_seconds_histogram
trans_latency_hist
(每个 endpoint 的延迟分布)
2. 指标导出到 Elastic
-
通过 Metricbeat 拉取 OTLP Collector 的 Prometheus Endpoint。
-
使用标准命名如
_sum/_count/_bucket
配合 Histogram。 -
PromQL 示例:
promqlrate(trans_latency_hist_sum[1m]) by (endpoint) / rate(trans_latency_hist_count[1m]) by (endpoint)

3. 指标导出到阿里云可观测链路 OpenTelemetry版
- 通过 OTLP 上传至阿里云可观测平台。一样是配置阿里云平台提供的 Endpoint 和 上报接口。
🚧 三、问题与解决方案
- 查询界面: 两种方式并不统一
- meter Histogram:好多接收放都不支持 min/max 的统计