从部署 OpenTelemetry Collector 到应用埋点、导出到炬鲸 OBSERVE,一条可复制的接入路径。含 Java/Go 配置示例、验证步骤、常见报错与排查清单,新手照做即可跑通。
先明确三件事:应用用什么语言、跑在哪里、炬鲸 OBSERVE 的接入地址。OBSERVE 同时支持 OTLP/HTTP 和 OTLP/gRPC,Java、Go、Python、Node.js 都有官方 SDK。本文以 Java 应用 + OTLP/gRPC 为例,其他语言只换依赖和初始化代码。
不建议应用直接连后端。中间放一个 OpenTelemetry Collector,负责接收、批处理、重试和导出,应用只连本地 Collector。
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
otlphttp:
endpoint: https://ob.jjhub.cn/otlp/v1
headers:
Authorization: Bearer ${OBSERVE_TOKEN}
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp]
关键点:导出端配的是 OBSERVE 的 token,应用侧无需知道后端地址。这层解耦以后换后端只改 Collector,不动应用。
Java 用 OpenTelemetry Agent,零代码注入,启动时加一行 JVM 参数:
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-Dotel.service.name=order-service \
-Dotel.traces.exporter=otlp \
-jar app.jar
Go 需要引入 SDK 手动初始化,核心三行:
exp, _ := otlptracegrpc.New(ctx,
otlptracegrpc.WithEndpoint("localhost:4317"),
otlptracegrpc.WithInsecure())
Python、Node.js 类似:装对应 SDK,配置同样的 OTLP endpoint,设置 service.name。
发一次真实请求,等 30 秒,在 OBSERVE 链路查询页按 service.name 过滤。能看到请求即成功;看不到按下面顺序排查:
Exporting 记录。没有说明应用没连上 Collector,检查端口和网络。先在 staging 跑通再上生产,用低采样率观察一周,确认 span 数量、存储增长和查询延迟都在预期内,再逐步调高。埋点这件事,先跑通比埋全更重要——一条真实链路的价值远大于一堆空 span。