手把手教程:部署 OpenTelemetry Collector、配置 OTLP 导出到炬鲸 OBSERVE,用 Java 自动埋点生成链路,附验证步骤与常见坑排查,让链路追踪在 15 分钟内跑起来。
开始前确认三件事:已部署炬鲸 OBSERVE 并拿到 OTLP 接入地址(形如 https://obs.example.com/otlp);有一个 Java 8+ 服务用于演示;服务器能出网或与 Collector 在同一内网。
架构很简单:应用通过 OTel SDK 把 Trace 数据用 OTLP 协议推到 Collector,Collector 统一做缓冲、脱敏、采样后导出到炬鲸 OBSERVE。
先起一个 OpenTelemetry Collector,用 Docker 最省事:
receivers:
otlp:
protocols:
grpc:
http:
exporters:
otlphttp:
endpoint: https://obs.example.com/otlp
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp]
把配置挂载后运行:
docker run -p 4317:4317 -p 4318:4318 \
-v $PWD/otel-config.yaml:/etc/otelcol/config.yaml \
otel/opentelemetry-collector-contrib
4317 是 gRPC 端口,4318 是 HTTP 端口。只是试跑也可以跳过 Collector,应用直接连 OBSERVE 的 OTLP 端点;但生产环境务必保留 Collector,它是缓冲、脱敏、采样三件事的统一落点。
用 Java Agent 零代码接入。下载 opentelemetry-javaagent.jar,启动时加上:
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.service.name=order-service \
-Dotel.exporter.otlp.endpoint=http://localhost:4317 \
-Dotel.traces.exporter=otlp \
-Dotel.metrics.exporter=none \
-jar app.jar
service.name 会作为链路里的服务名,务必取有业务含义的名字,建议「环境-服务」格式。自动埋点覆盖 Spring MVC、HTTP Client、数据库驱动、Redis、Kafka 等主流组件,不用改一行业务代码。
启动后发几个请求,到炬鲸 OBSERVE 的「链路追踪」页面:
order-service 过滤,能看到请求列表。常见坑:
endpoint 是否写了 http:// 前缀。默认采样是全量,压测或高流量场景会推爆。建议在 Collector 配 probabilistic_sampler,平时保留 10%~20%,出问题时再临时调高。链路追踪的价值在「能不能定位」,不在「存了多少」。