prometheus metrics 指标

什么是指标(metrics)?用外行的话来说,指标是数字测量,时间序列意味着随着时间的推移记录变化。用户想要测量的内容因应用程序而异。对于 Web 服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。

指标在理解为什么您的应用程序以某种方式工作方面起着重要作用。假设您正在运行一个 Web 应用程序并发现该应用程序很慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数量很高时,应用程序可能会变慢。如果您有请求计数指标,您可以找出原因并增加服务器数量来处理负载。

Prometheus Metrics 是整个监控系统的核心,所有的监控指标数据都由其记录。Prometheus 中,所有 Metrics 皆为时序数据,并以名字作区分,即每个指标收集到的样本数据包含至少三个维度的信息:名字、时刻和数值。

1.  指标数据模型

Prometheus 采集的所有指标都是以时间序列的形式进行存储,每一个时间序列有三部分组成:

  • 指标名和指标标签集合:metric_name{<label1=v1>,<label2=v2>....},指标名:表示这个指标是监控哪一方面的状态,比如 http_request_total 表示:请求数量;指标标签,描述这个指标有哪些维度,比如 http_request_total 这个指标,有请求状态码 code = 200/400/500,请求方式:method = get/post 等,实际上指标名称实际上是以标签的形式保存,这个标签是name,即:name=。
  • 时间戳:描述当前时间序列的时间,单位:毫秒。
  • 样本值:当前监控指标的具体数值,比如 http_request_total 的值就是请求数是多少。

可以通过查看 Prometheus 的 metrics 接口查看所有上报的指标:

所有的指标也都是通过如下所示的格式来标识的:

2. 指标类型

Prometheus 底层存储上其实并没有对指标做类型的区分,都是以时间序列的形式存储,但是为了方便用户的使用和理解不同监控指标之间的差异,Prometheus 定义了 4 种不同的指标类型:计数器 counter,仪表盘 gauge,直方图 histogram,摘要 summary。

Prometheus Metrics 有四种基本数据类型:

  • Counter: 只增不减的单变量
  • Gauge:可增可减的单变量
  • Histogram:多桶统计的多变量
  • Summary:聚合统计的多变量

Counter 计数器

Counter 类型和 redis 的自增命令一样,只增不减,通过 Counter 指标可以统计 Http 请求数量,请求错误数,接口调用次数等单调递增的数据。同时可以结合 increase 和 rate 等函数统计变化速率,后续我们会提到这些内置函数。

Gauge 仪表盘

和 Counter 不同,Gauge 是可增可减的,可以反映一些动态变化的数据,例如当前内存占用,CPU 利用,Gc 次数等动态可上升可下降的数据,在 Prometheus 上通过 Gauge,可以不用经过内置函数直观的反映数据的变化情况,如下图表示堆可分配的空间大小:

上面两种是数值指标,代表数据的变化情况,Histogram 和 Summary 是统计类型的指标,表示数据的分布情况。

Histogram 直方图

Histogram 是一种直方图类型,可以观察到指标在各个不同的区间范围的分布情况,如下图所示:可以观察到请求耗时在各个桶的分布。

有一点要注意的是,Histogram 是累计直方图,即每一个桶的是只有上区间,例如下图表示小于 0.1 毫秒(le="0.1")的请求数量是 18173 个,小于 0.2 毫秒(le="0.2")的请求是 18182 个,在 le="0.2"这个桶中是包含了 le="0.1"这个桶的数据,如果我们要拿到 0.1 毫秒到 0.2 毫秒的请求数量,可以通过两个桶想减得到。

在直方图中,还可以通过 histogram_quantile 函数求出百分位数,比如 P50,P90,P99 等数据。

Summary 摘要

Summary 也是用来做统计分析的,和 Histogram 区别在于,Summary 直接存储的就是百分位数,如下所示:可以直观的观察到样本的中位数,P90 和 P99。

Summary 的百分位数是客户端计算好直接让 Prometheus 抓取的,不需要 Prometheus 计算,直方图是通过内置函数 histogram_quantile 在 Prometheus 服务端计算求出。