golang 项目 OpenTelemetry 实践

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 头部进行鉴权。

Elastic APM 文档

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 示例:

    promql 复制代码
    rate(trans_latency_hist_sum[1m]) by (endpoint)
    /
    rate(trans_latency_hist_count[1m]) by (endpoint)

3. 指标导出到阿里云可观测链路 OpenTelemetry版

  • 通过 OTLP 上传至阿里云可观测平台。一样是配置阿里云平台提供的 Endpoint 和 上报接口。

🚧 三、问题与解决方案

  • 查询界面: 两种方式并不统一
  • meter Histogram:好多接收放都不支持 min/max 的统计
相关推荐
涡能增压发动积17 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
Wenweno0o17 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
swg32132117 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung17 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald17 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川18 小时前
深入拆解 Java 内存模型:从原子性、可见性到有序性,彻底搞懂 happen-before 规则
java·后端
元宝骑士18 小时前
FIND_IN_SET使用指南:场景、优缺点与MySQL优化策略
后端·mysql
用户319523703477118 小时前
记一次 PostgreSQL WAL 日志撑爆磁盘的排查
后端
nghxni18 小时前
LightESB PlatformHttp v3.0.0:JSONPath 订单转换 HTTP 路由实战
后端
武子康18 小时前
大数据-263 实时数仓-Canal 增量订阅与消费原理:MySQL Binlog 数据同步实践
大数据·hadoop·后端