Prometheus 的四种数据类型

Prometheus 的四种数据类型分别是:Counter、Gauge、Histogram和Summary。这里分别做下介绍。

Counter

Counter数据类型的特点:



<br />
  • Counter 用于累计值,例如 记录 请求次数、任务完成数、错误发生次数。
  • 一直增加,不会减少。
  • 重启进程后,会被重置。
例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100

Gauge

Gauge数据类型的特点:
  • Gauge 常规数值,例如 温度变化、内存使用变化。
  • 可变大,可变小。
  • 重启进程后,会被重置
例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 < 抓取值

Histogram

Histogram 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。<span style="font-family:"font-size:13.3333px;background-color:#FFFFFF;">例如:{小于10=5次,小于20=1次,小于30=2次},count=8次,sum=8次的求和值</span>



<img src="https://www.361way.com/wp-content/uploads/2018/12/histogram.png" width="500" height="332" title="histogram" alt="histogram" />



<br />

Summary

Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。
例如:count=7次,sum=7次的值求值
它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

<br />

summary和histogram的选择

<br />
  • Summary 结构有频繁的全局锁操作,对高并发程序性能存在一定影响。histogram仅仅是给每个桶做一个原子变量的计数就可以了,而summary要每次执行算法计算出最新的X分位value是多少,算法需要并发保护。会占用客户端的cpu和内存。
  • 不能对Summary产生的quantile值进行aggregation运算(例如sum, avg等)。例如有两个实例同时运行,都对外提供服务,分别统计各自的响应时间。最后分别计算出的0.5-quantile的值为60和80,这时如果简单的求平均(60+80)/2,认为是总体的0.5-quantile值,那么就错了。
  • summary的百分位是提前在客户端里指定的,在服务端观测指标数据时不能获取未指定的分为数。而histogram则可以通过promql随便指定,虽然计算的不如summary准确,但带来了灵活性。
  • histogram不能得到精确的分为数,设置的bucket不合理的话,误差会非常大。会消耗服务端的计算资源。

所以对比得到的总结是:

<br />



<br />
  1. 如果需要聚合(aggregate),选择histograms。
  2. 如果比较清楚要观测的指标的范围和分布情况,选择histograms。如果需要精确的分为数选择summary。
<br />



<a href="https://prometheus.io/docs/concepts/metric_types/" target="_blank" rel="noopener noreferrer">METRIC TYPES</a>



<a href="https://prometheus.io/docs/practices/histograms/" target="_blank" rel="noopener noreferrer">HISTOGRAMS AND SUMMARIES</a>

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注