1. 为什么是 OpenTelemetry
统一语义与 SDK,避免厂商锁定;在成本、迁移与可观测性深度间取得平衡。
2. 数据模型与采集面
- Metrics:RED/USE 指标体系;直方图与基数问题;采样策略。
- Logs:结构化日志,关联 TraceId/SpanId;落地与保留策略。
- Traces:端到端链路;采样(Head/Tail);关键属性建模。
3. 采集与导出
- SDK/Auto Instrumentation;Exporter:OTLP/HTTP/gRPC。
- Collector:集中转发与加工(过滤、采样、重命名、聚合)。
- 后端:Prometheus/Grafana、Tempo/Jaeger、Loki/ELK、云厂商。
4. Java 示例
// build.gradle
implementation("io.opentelemetry:opentelemetry-api:1.40.0")
implementation("io.opentelemetry:opentelemetry-sdk:1.40.0")
implementation("io.opentelemetry:opentelemetry-exporter-otlp:1.40.0")
// 运行时:-Dotel.service.name=demo -Dotel.exporter.otlp.endpoint=http://otel-collector:4317
5. 采样与成本
区分关键路径与普通请求;对高基数标签做降维;使用 Tail-based 采样保留异常与慢请求。
6. 治理与可用性
- 命名规范与标签基线;版本控制与回滚;集群故障降级。
- 可视化:SLO/错误预算、服务依赖拓扑、容量与热度地图。
7. 与业务结合
将业务指标嵌入可观测三件套,构建从用户体验到服务内部的闭环。