1.6 Prometheus 的 Metric 数据类型
Prometheus 客户端提供了四种核心度量类型,在不同的场景下这些 Metric 有一些细微的差异,在存储时没有任何差异。 例如,在 Node Exporter 返回的样本中指标 node_load1 反应的是当前系统的负载状态,随着时间的变化这个指标返回的样本数据是在不断变化的。而指标 node_cpu 所获取到的样本数据却不同,它是一个持续增大的值,因为其反应的是CPU的累积使用时间,从理论上讲只要系统不关机,这个值是会无限变大的。
为了能够帮助用户理解和区分这些不同监控指标之间的差异,Prometheus 定义了4中不同的指标类型(metric type):Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要)。还有一种基本不会看到的 Untyped 类型。
Prometheus 约定,在 Exporter 返回的数据中,在注释中要包含了该数据的类型。例如:
# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
Counter
Counter 表示收集的数据是按照某个趋势(增加/减少)一直变化的,是一个累积度量,它表示一个单调递增的计数器。其值在重新启动时只能递增或重置为零。我们往往用它记录服务请求总量、错误总数等。
不要使用计数器来记录可能降低的值。例如,不要为当前正在运行的进程的数量使用 Counter,对于这种应该使用 Gauge 。
例如 Prometheus server 中 http_requests_total, 表示 Prometheus 处理的 http 请求总数,这个数值会一直累积。
Gauge
Gauge 表示搜集的数据是一个瞬时的值,它与时间没有关系,可以任意变高变低的值。往往可以用来记录内存使用率、磁盘使用率、并发请求数量等经常变化的指标。
例如 Prometheus server 中 go_goroutines, 表示 Prometheus 当前 goroutines 的数量。
Histogram
Histogram 主要用于表示一段时间范围内对数据进行采样,(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。
在 Prometheus 系统中,三种数据的作用度量指标名称
例如 Prometheus server 中 prometheus_local_storage_series_chunks_persisted, 表示 Prometheus 中每个时序需要存储的 chunks 数量,我们可以用它计算待持久化的数据的分位数。
Summary
Summary 和 Histogram 类似,主要用于表示一段时间内数据采样结果,(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。
它由
对于每个采样点进行统计,并形成分位图。举个例子,和正态分布一样,统计低于60分不及格的同学比例,统计低于80分的同学比例,统计低于95分的同学比例
统计班上所有同学的总成绩(sum)
统计班上同学的考试总人数(count)
带有度量指标的
观察时间的 φ-quantiles (0 ≤ φ ≤ 1), 显示为
Untyped
一个正常的 Metric 应该有三行数据,第一行是 HELP 信息,第二行是 TYPE 信息,第三行是 Metric 数据本身,如果缺少了第二行的 TYPE 信息,那么在 Prometheus 里查询出来的数据类型就是 Untyped