OpenTelemetry 指标 vs Prometheus 指标:数据模型的深度对比

OpenTelemetry 与 Prometheus 的指标数据模型在时间戳语义、累加方式、直方图结构上存在本质差异,直接影响速率计算与查询结果。本文深入对比两者数据模型,帮助你在迁移或混用时避开数值误读的坑。

最佳实践
OpenTelemetry 指标 vs Prometheus 指标:数据模型的深度对比封面

OpenTelemetry 指标与 Prometheus 指标的核心差异在于数据模型:OTel 数据点携带起止时间戳并区分 Delta/Cumulative 累加语义,Prometheus 只有抓取时刻的单点时间戳与单调计数器——同一组测量值在两种模型下的查询语义不同,混用时若不理解差异,速率、占比计算都可能出错。

核心要点速览

  • OTel 区分 Delta(间隔内增量)与 Cumulative(累计总量),Prometheus 只有 Cumulative;
  • OTel 数据点带起止时间戳,速率计算无需依赖抓取间隔;
  • OTel 指数直方图(Exponential Histogram)比 Prom 固定边界直方图更省更准;
  • 属性命名规则不同:OTel 点分层级(http.server.duration),Prom 下划线(http_server_duration_seconds)。

累加语义:Delta vs Cumulative

Prometheus 的 counter 只记录「自启动以来的累计值」,速率由 rate() 在查询时基于两个抓取点估算。

OTel 支持两种 temporality:

  • Cumulative:与 Prom 类似,记录累计总量;
  • Delta:记录「上个周期内的增量」,速率就是数值本身,无需查询期再算。

Delta 对push 模型与多跳管道更友好(每个间隔的数据独立完整),Cumulative 对断点续传更宽容。观测云对两种语义都能正确解析。

时间戳模型的影响

Prometheus 数据点只有抓取时刻的时间戳,「这个值覆盖哪个时间段」依赖抓取间隔推断——抓取抖动会污染速率计算。OTel 数据点显式携带 start_timetime,聚合区间精确可知,在管道多次转发后依然保真。

直方图:固定桶 vs 指数桶

Prometheus 直方图在埋点时固定边界桶(如 0.1/0.5/1/5s),跨实例聚合没问题,但边界选错无法事后补救。

OTel 除兼容固定桶外,提供指数直方图:桶边界按指数自动划分,任意分位数都能事后计算,且体积随精度对数增长——高延迟分布场景更省更准。

命名与单位约定

  • OTel:http.server.request.duration,单位秒(UCUM 标准),属性点分;
  • Prometheus:http_server_request_duration_seconds,单位编码进指标名。

混用体系时建议在入库前统一命名,避免同一含义两套指标并存。

观测云落地:双模型统一

  1. OTLP 指标:原生接收并正确解析 Delta/Cumulative 语义;
  2. Prometheus 指标:DataKit 抓取或 remote write 接入,文本协议自动转换;
  3. 统一查询:DQL 对两类数据提供一致的速率与聚合语义;
  4. 迁移建议:存量 Prom 指标直接接入,新埋点按 OTel 规范(语义约定)实施,渐进统一。

常见问题(FAQ)

Q:Delta 和 Cumulative 查询结果会不一样吗? 语义正确实现下结果一致;差异在于管道可靠性:Delta 丢一个点只影响一个周期,Cumulative 丢点后速率会毛刺。

Q:OTel 直方图能转成 Prom 直方图吗? 固定桶直方图可以转换;指数直方图需按目标桶边界重聚合,会有精度损失,建议平台侧原生支持(观测云支持)。

Q:迁移期两套指标并存会不会混乱? 用命名规范区分(如老指标保留 prom 风格,新指标用 OTel 风格),并在视图中统一别名,过渡期后逐步下线老指标。

Q:Gauge 在两种模型下有区别吗? Gauge 语义一致(瞬时值),是迁移中最省心的类型;注意 OTel 的 Observable Gauge 是回调读取,Prom 的 Gauge 可直接 set。

系列阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台