OpenTelemetry 指标详解:Instruments、聚合与导出
OpenTelemetry Metrics 通过 Counter、UpDownCounter、Histogram、Observable Gauge 四种仪器采集指标,经聚合后由 Reader 导出。本文讲清仪器选型、聚合方式、View 定制与导出到观测云的配置方法。
OpenTelemetry Metrics 是 OTel 的指标信号体系:应用通过多种仪器(下文列出四种常见类型)(Counter、UpDownCounter、Histogram、Observable Gauge)记录测量值,SDK 按聚合规则汇总成数据点,再由 Reader 周期导出——与链路追踪的「单请求视角」不同,指标提供「全局水位视角」,是告警与容量规划的骨干数据。
核心要点速览
- 计数用 Counter(只增),变化量用 UpDownCounter(可增可减),分布用 Histogram,瞬时值用 Observable Gauge;
- Histogram 默认聚合为显式边界桶,新版本支持指数桶(Exponential Histogram)兼顾精度与体积;
- View 可定制聚合方式与保留属性,是控制指标基数的关键手段;
- 导出到观测云:OTLP 推送或 Prometheus 拉取,两条路都支持。
四种仪器怎么选?
完整 API 还包括 Observable Counter、Observable UpDownCounter 等;读取可加和的内存用量/队列深度通常适合 Observable UpDownCounter,不能把所有瞬时值都当 Gauge。
| 仪器 | 语义 | 典型场景 |
|---|---|---|
| Counter | 单调递增 | 请求总数、错误总数、字节数 |
| UpDownCounter | 可增可减 | 当前连接数、队列深度、进行中任务 |
| Histogram | 分布统计 | 请求延迟、响应体大小 |
| Observable Gauge | 回调读取不可加和的瞬时值 | CPU 使用率、温度 |
选错仪器的典型症状:累计值随进程重启归零并非 Gauge 导致;把累计计数当 Gauge 会丢失计数器语义、用 Counter 记录瞬时值导致数据无意义。
聚合与数据点类型
SDK 把原始测量值聚合成数据点:Sum(Counter/UpDownCounter)、Gauge、Histogram(桶计数)、Exponential Histogram。聚合发生在 SDK 内,网络上传输的是聚合后的紧凑数据——这是 OTel 指标高效的原因。
View:定制与基数控制
View 允许对仪器做二次定制:改聚合方式(例如在实现支持的兼容聚合范围内将 Histogram 改为 Sum,但会丢失分布与分位数信息)、裁剪属性(丢弃高基数标签)、重命名指标。控制指标基数最有效的位置就是 View——在数据离开 SDK 前把 user_id 之类的危险属性裁掉(基数纪律见《高基数问题》)。
导出:推还是拉?
- OTLP 推送:周期性把指标推到 Collector 或 DataKit,适合服务实例动态伸缩的云原生环境;
- Prometheus 拉取:暴露
/metrics端点由 Prometheus 生态抓取,适合存量 Prom 体系。
若指标要进入观测云,OTLP 路线需开启 DataKit 的 OpenTelemetry 接收并匹配 exporter 协议与地址;Prometheus 路线则在 prom 采集器中配置已暴露的端点。先对一个 Counter 产生已知增量,核对接入后的指标名、标签、单位和数值,再扩展到业务看板。
常见问题(FAQ)
Q:OTel 指标和 Prometheus 指标能互转吗? 相应组件可转换部分模型,但并非无损互转;应验证 temporality、直方图、单位和属性映射;两者数据模型的差异与迁移要点见《OpenTelemetry 指标 vs Prometheus 指标》。
Q:Histogram 桶边界怎么设? 边界数值必须与仪器实际单位匹配,不能把默认值一概当作秒或毫秒的 Web 延迟桶;业务特殊(如 AI 推理秒级到分钟级)时通过 View 自定义边界,或改用指数桶。
Q:指标采样间隔设多少合适? PeriodicExportingMetricReader 的规范默认导出间隔为 60s,具体依 SDK/配置而定;这不是每条测量的记录间隔或 Trace 采样率。缩短间隔会增加导出频率,但成本不一定线性增长。
Q:SDK 侧聚合和平台侧聚合冲突吗? 不冲突且互补:SDK 聚合控制传输体积,平台侧查询时按维度二次聚合。仍需区分累计/增量 temporality 和重置;后端是否正确计算速率取决于接收映射和查询方式,应以已知增量验证。
系列阅读
[1]: 观测云文档《OpenTelemetry》https://docs.guance.com/integrations/opentelemetry/
[2]: 观测云文档《DataKit》https://docs.guance.com/datakit/
[3]: 观测云文档《监控》https://docs.guance.com/monitoring/