对比OpenTelemetry Metrics和Prometheus Metrics

📅 2026/7/18 20:11:05
对比OpenTelemetry Metrics和Prometheus Metrics
1. 前言很多人认为 OpenTelemetry(简称OTel) metrics 等于 Prometheus metrics实际上两者只有约70%重叠。 它们设计目标不同 因此在数据模型、 SDK、 聚合方式、 生命周期、语义等方面存在不少差异。OTel metrics比Prometheus要晚很多年才成熟其协议也比Prometheus复杂不少。总的来说差异性体现在Prometheus metrics协议基于浅显易懂的文本直接围绕4种metrics的数据模型(counters, gauges, summaries, and histograms)进行构建和展现。 OTel metrics 与所有OpenTelemetry 的所有Telemetry(metrics/Logs/Trace)都基于被称作OTLP(OpenTelemetry Protocol)的二进制协议其数据模型的层次更加复杂。相对于Prometheus metricsOTel metrics增加了对metrics构建管道(pipeline)的模型化。2. 数据模型的定义和构建管道(pipeline)Prometheus的metrics数据模型比较简洁就是一共有四种metricsCounter、Gauge、Histogram、Summary。Prometheus SDK就直接构建这四种metrics没有为构建管道(pipeline)定义更多的数据类型。OpenTelemetry就复杂多了OpenTelemetry对metrics的构建过程也建立了模型。先有一个Instrument过程(创建Measurement)然后是Aggregation过程创建metrics。OpenTelemetry的这个模型带来了不少灵活性也带来了一些复杂性。Instrument→Measurement→Aggregation→Metric dataOpenTelemetry SDK提供的Instrument类型包括同步Instrument(程序主动记录)Counter、UpDownCounter、Gauge、Histogram、异步Instrument(SDK定期调用Callback读取)ObservableCounter、ObservableGauge、ObservableUpDownCounterSDK Aggregation包括以下类型SumLastValueHistogramExponentialHistogramDropDefault经过Aggregation后最终OTel metricss类型包括Sum、Gauge、Histogram、ExponentialHistogram。以下是不同类型的构建管道(pipeline)的简介- Instrument: Counter, ObservableCounter Aggregation: Sum OpenTelemetry metric: - Type Sum - Monotonic true - Temporality Delta/Cumulative Convert to Prometheus metric: Counter Examples: processed requests, received bytes, disk reads - Instrument: UpDownCounter, ObservableUpDownCounter Aggregation: Sum OpenTelemetry metric: - Type Sum - Monotonic false - Temporality Delta/Cumulative Convert to Prometheus metric: Counter Examples: active requests, open connections, memory in use - Instrument: Gauge, ObservableGauge Aggregation: LastValue OpenTelemetry metric: - Type Gauge Convert to Prometheus metric: Gauge Examples: - error rate, memory utilization, cache hit rate - Instrument: Histogram Aggregation: Histogram OpenTelemetry metric: - Type Histogram Convert to Prometheus metric: Histogram Examples: request latency, request size - Instrument: Histogram Aggregation: ExponentialHistogram OpenTelemetry metric: - Type ExponentialHistogram Convert to Prometheus metric: Native Histogram Examples: same as Histogram注意对于OTel metrics既可以用累计(Cumulative)的方式展现 也可以用差值(Delta)的方式来展现。而Prometheus只能理解Cumulative。OTel metricss类型里没有Summary因为Summary无法聚合。存储方面的差异Prometheus TSDB 保存时统一都是 float64。OpenTelemetry可以保存int64和double。3. Metric data的结构和元数据Prometheus支持单层级的Metric其元数据包括Metric Name Labels。OTel metrics有四个层级(Resourcemetrics,Scopemetrics,Metric,DataPoint)数值属于最底层的DataPoint但每个层级都有自己的元数据 Attributes。OTel metrics有很多Prometheus metrics不具备(有时只好使用命名规范来近似实现类似的功能)的元数据Prometheus metrics简单地由名称、时间戳、数值和labels组成。OTel metrics有更多的元数据字段两个时间戳Timestamp, StartTimestamp。Unit 字段DataType 字段Gauge(默认), Sum, Histogram, Summary, ExponentialHistogram另外OpenTelemetry还支持Resource。Resource 是所有 Telemetry(metrics/Logs/Trace)的公共元数据。4. 数据来源的主要生态Prometheus通常以Prometheus标准文字格式用URL(比如/metrics)暴露(exporter)采用pull方式读取。(也支持 Remote Write 等push方式)OTel metrics原生使用OTLP传输metrics(push方式)但如果采用Collector其来源可以是各种方式。总的来说Prometheus仍将是OpenTelemetry的一个主要的metrics后端处理服务。而Prometheus协议由于其简易性仍将是系统暴露自身metrics的主要手段之一也是OpenTelemety获取metrics的主要来源之一。