手把手教程:用 OpenTelemetry SDK 完成 Java/Go 应用的自动埋点,配置 OTLP 导出到炬鲸 OBSERVE,验证 trace 上报,并给出采样策略与常见接入问题的排查方法。
接入 OpenTelemetry 最常见的坑,是一上来就改大量业务代码,最后卡在导出配置上。建议先跑通“埋点 → 上报 → 查询”的最小闭环,再逐步扩大范围。
以 Java 应用为例,用 javaagent 自动埋点,不改业务代码:
java -javaagent:opentelemetry-javaagent.jar -Dotel.service.name=order-service -Dotel.exporter.otlp.endpoint=http://ob.jjhub.cn:4318 -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -Dotel.logs.exporter=otlp -jar order-service.jar
agent 会自动为 Spring MVC、MySQL、HTTP 客户端等生成 span,框架边界无需手写;Go 同理,引入 otel 的 gin、gorm 等 instrumentation 包即可。
自动埋点覆盖框架边界,业务内部的关键步骤(下单、扣库存、调第三方支付)需要手动埋点才能看清:
Span span = tracer.spanBuilder("place_order")
.setAttribute("order.id", orderId)
.startSpan();
try (Scope scope = span.makeCurrent()) {
inventoryService.deduct(orderId);
paymentService.pay(orderId);
} finally {
span.end();
}
给 span 打上有意义的 attribute(订单号、用户 ID、渠道),排查时按这些字段过滤,能直接定位到具体业务对象。
OBSERVE 接收 OTLP/HTTP(4318)和 OTLP/gRPC(4317)两种协议,生产建议走 gRPC 并开启 gzip 压缩。采样策略分场景:核心交易链路 100% 全采;一般接口用尾采样(tail-based),正常低采样、出错全采;高流量日志只导出 error 以上。
接入后按顺序验证:制造一次请求,在“链路追踪”页按 service.name 过滤应能看到 trace;点开 trace 确认 span 时序和 attribute 齐全;在“服务”页确认服务被自动发现、QPS 和延迟有数据。
常见问题:上报超时先检查 endpoint 是否带协议前缀(http:// 或 https://);trace 缺失看采样率是否为 0;span 无 attribute 确认是否已 startSpan;时间不对齐检查是否都用了 NTP。本地暂无 OBSERVE 时,可先用 otel-collector 做中转。