Prometheus提供的客户端库提供了四种核心metric类型,但这些类型目前只是在客户端库和wire protocol中进行区分。Prometheus server 并不区分这些类型,而是统一视为无类型的时间序列,这在未来可能会发生改变。
Counter
Counter 类型是表示一种样本数据单调递增的metric,即只增不减,除非监控系统重启。例如,可以使用 counter 类型的metric来表示服务的请求数、已完成的任务数、错误发生的次数等。
不要将 counter 类型应用于样本数据非单调递增的指标,例如:当前正在运行的进程数。
Gauge
Gauge 是一种表示单个数值的metric,可增可减。
Gauge 通常用于像当前温度或者当前内存使用量这些类型的指标数据,也可以表示能随时增加或减少的“总数”,例如:当前的并发请求数。
Histogram
Histogram在一段时间范围内对数据进行采样(通常是请求持续时间或响应数据大小),并计入到可配置的buckets中。后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。
Histogram 类型的样本会提供三种指标(假设指标名称为 <basename>):
样本的值分布在 bucket 中的数量,命名为 <basename>_bucket{le="<上边界>"}。简单来说,这个值表示指标值小于等于上边界的所有样本数量
所有样本值的大小总和,命名为 <basename>_sum
样本总数,命名为 <basename>_count。值和 <basename>_bucket{le="+Inf"} 相同
可以通过 histogram_quantile() 函数来计算 Histogram 类型样本的分位数。Histogram 还可以用来计算应用性能指标值(Apdex score)。
注1:分位数可以理解为分割数据的点。举个例子,假设样本的 9 分位数(quantile=0.9)的值为 x,即表示小于 x 的采样值的数量占总体采样值的 90%
注2:bucket 可以理解为是对数据指标值域的一个划分,划分的依据应该基于数据值的分布。注意后面的采样点是包含前面的采样点的,假设 xxx_bucket{...,le="0.01"} 的值为 10,而 xxx_bucket{...,le="0.05"} 的值为 30,那么意味着这 30 个采样点中,有 10 个是小于 10 ms 的,其余 20 个采样点的响应时间是介于 10 ms 和 50 ms 之间的。
Summary
与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。
Summary 类型的样本也会提供三种指标(假设指标名称为 <basename>):
样本值的分位数分布情况φ-quantiles (0 ≤ φ ≤ 1),命名为 <basename>{quantile="<φ>"}
所有样本值的大小总和,命名为 <basename>_sum
样本总数,命名为 <basename>_count
可以看出 Histogram 与 Summary 的异同为:
都包含了 <basename>_sum 和 <basename>_count 指标
Histogram 需要通过 <basename>_bucket 来计算分位数,而 Summary 则直接存储了分位数的值。
以上四种类型对应的Vector类型
Prometheus Metrics 中有一种将样本数据以标签(Label)为维度作切分的数据类型,称为Vector。四种基本类型也都有对应的 Vector 类型:
CounterVec
GaugeVec
HistogramVec
SummaryVec
Vector 相当于一组同名同类型的 Metrics,以 Label 做区分。Label 可以有多个,Prometheus 实际会为每个 Label 组合创建一个 Metric。Vector 类型记录数据时需先打 Label 才能调用 Metrics 的方法记录数据。
例如 HTTP 请求延迟指标,由于 HTTP 请求可在多个地区的服务器处理并且具有不同的方法,于是,可定义名称为 http_request_latency_seconds 的 SummaryVec,标签有region和method,用来表示不同地区服务器的不同请求方法的请求延迟。