从零接入 OpenTelemetry 不难,本文给出步骤:部署 Collector、配 OTLP Exporter、应用埋点,再到炬鲸验证 trace。
很多团队对链路追踪「想上又不敢上」,卡点在接入成本。其实用 OpenTelemetry(OTel)标准协议接入炬鲸 OBSERVE,一条完整链路从部署到出图,熟练的话 15 分钟足够。下面按顺序走一遍。
OTel Collector 负责接收、处理、转发遥测数据。生产环境建议单独部署,用 Docker 最快:
docker run -d --name otel-collector -p 4317:4317 -p 4318:4318 -v $PWD/otel-collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector-contrib:latest
关键在配置文件,核心是 receivers 和 exporters 两段:
receivers:
otlp:
protocols:
grpc: { endpoint: 0.0.0.0:4317 }
http: { endpoint: 0.0.0.0:4318 }
exporters:
otlphttp:
endpoint: https://ob.jjhub.cn/otel
headers:
Authorization: "Bearer <你的接入令牌>"
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlphttp]
4317 走 gRPC,4318 走 HTTP,应用按语言习惯任选其一。炬鲸侧用 OTLP over HTTP 接收,鉴权靠令牌头。
Java 最省事的方式是 Java Agent,一行 JVM 参数搞定,不用改代码:
java -javaagent:opentelemetry-javaagent.jar -Dotel.service.name=order-svc -Dotel.exporter.otlp.endpoint=http://localhost:4318 -Dotel.traces.exporter=otlp -Dotel.metrics.exporter=otlp -jar order-svc.jar
Go/Python/Node 则用对应 SDK 手工埋点。以 Go 为例,初始化一个 TracerProvider 并把 exporter 指到 Collector:
ctx := context.Background()
exp, _ := otlptracehttp.New(ctx,
otlptracehttp.WithEndpoint("localhost:4318"),
otlptracehttp.WithInsecure())
tp := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exp),
sdktrace.WithResource(resource.NewWithAttributes(
semconv.ServiceName("order-svc"))))
otel.SetTracerProvider(tp)
HTTP 框架(gin、echo、chi)建议挂上官方 instrumentation 中间件,自动给每个请求生成 span,不用手写埋点。
先确认 Collector 没报错:docker logs -f otel-collector 里应看到 exporter 持续刷新。然后在应用里制造几次请求,到炬鲸 OBSERVE 的「链路追踪」页面,按 service 名过滤,应该能看到一条条 trace。点开任意一条,检查三件事:
parentbased_traceidratio 采样器,保留错误全采。链路追踪的价值,只有真的接进去、看到完整链路之后才会显现。按上面三步走,先跑通一条,再逐步覆盖更多服务。