用 Spring Boot 3.x 的 Micrometer Tracing 加一个 OpenTelemetry Collector,十分钟把链路追踪接入炬鲸。附依赖、配置、Collector 部署、自定义埋点与四个常见坑。
接入只需要三样:一个 Spring Boot 3.x 应用(3.2+ 内置 Micrometer Tracing,能省掉一半配置)、一个 OpenTelemetry Collector(用 Docker 起,负责接收并转发到炬鲸)、以及炬鲸平台的接入地址和 token。
Maven 加两个依赖即可:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-otel</artifactId>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
</dependency>
Spring Boot 3.2+ 通过 actuator 自动装配链路追踪,不用手动 new Tracer,也不用手写 Span 导出逻辑。
spring:
application:
name: order-service
management:
tracing:
sampling:
probability: 1.0
otlp:
tracing:
endpoint: http://localhost:4318/v1/traces
spring.application.name 会被自动用作 service.name,排查时靠它过滤服务。probability: 1.0 是 100% 采样,本地开发没问题,生产建议降到 0.1~0.3。endpoint 指向本地 Collector 的 HTTP 端口 4318。
Collector 配置 otel-collector-config.yaml:
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
exporters:
otlphttp:
endpoint: https://ob.jjhub.cn/v1/traces
headers:
Authorization: Bearer <token>
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp]
启动:docker run -v $PWD/otel-collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector-contrib
请求几次你的接口,打开炬鲸的 Trace 列表,按 service.name 过滤,就能看到整条调用链。点开某个 span,能看到耗时、状态码、自定义属性。
框架埋点覆盖 HTTP、数据库、消息,但业务关键步骤还得自己埋。注入 Tracer,给下单、扣库存这类关键方法加 span:
Span span = tracer.nextSpan().name("place_order").start();
try (var scope = tracer.withSpan(span)) {
span.setTag("txn_id", txnId);
// 业务逻辑
} finally {
span.end();
}
生产环境建议把采样交给 Collector 做 tail-based sampling:慢于 500ms 或出错的 trace 全采,其余按比例,既保住存储又不错过关键链路。
spring.application.name。