2.1.1 Prometheus 的指标定义

Prometheus 的所有监控指标(Metric)被统一定义为
指标定义涉及指标名称和标签这两部分,下面分别对这两部分进行讲解。

1.指标名称(metric name)

指标名称用于说明指标的含义,例如 httprequest_total 代表 HTTP 的请求总数。
指标名称必须由字面、数值下画线或者冒号组成,符合正则表达式[a-zA-Z
:][a-zA-Z0-9_:]*,其中的冒号指标不能用于 exporter。

2.标签(label)

标签可体现指标的维度特征,用于过滤和聚合。它通过标签名(label name)和标签值(label value)这种键值对的形式,形成多种维度。
例如,对于指标 httprequesttotal,可以有{status=「200」,method=「POST」}和{status=「200」,method=「GET」}这两个标签。在需要分别获取 GET 和 POST 返回 200 的请求时,可分别使用上述两种指标;在需要获取所有返回 200 的请求时,可以通过 httprequesttotal{status=「200」}完成数据的聚合,非常便捷和通用。
指标的某些标签是以「
」开头的,这些标签是在 Prometheus 系统内部使用的。在形式上,http_request_total{status=「200」} 和 {__name
=「http_request_total」,status=「200」}代表相同的指标。Prometheus 指标采用标签的方式能够很好地与容器结合,无论是原生 Docker 还是 Kubernetes,都通过标签关联资源。

2.1.2 Prometheus 的指标分类

Prometheus 指标分为 Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)和 Summary(摘要)这 4 类,下面对这 4 类进行讲解。

1.Counter

Counter 是计数器类型,它的特点是只增不减,例如机器启动时间、HTTP 访问量等。

2.Gauge

Gauge 是仪表盘,表征指标的实时变化情况,可增可减,例如 CPU 和内存的使用量、网络 I/O 大小等,大部分监控数据都是 Gauge 类型的。如图 2-3 所示是内存使用量监控图,内存使用量随着时间的推移不断变化。

3.Summary

Summary 同 Histogram 一样,都属于高级指标,用于凸显数据的分布状况。如果需要了解某个时间段内请求的响应时间,则通常使用平均响应时间,但这样做无法体现数据的长尾效应。例如,一个 HTTP 服务器的正常响应时间是 30ms,但有很少几次请求耗时 3s,通过平均响应时间很难甄别长尾效应,这时可以通过 Histogram 或者 Summary 展现。Histogram 和 Summary 这两种指标类型在本质上是可以相互转化的。
这里先了解一下数据分位:φ 代表分位数,0≤φ≤1,分位数是在 N 个观测值中按数量 φ·N 排序的观测值。例如,0.9 分位数代表第 90% 位置上的数,如果总数是 100 个,那么将是第 90 个数。
Summary 是采样点分位图统计,用于得到数据的分布情况。例如,如果在要统计的班级中,有 90% 学生的成绩低于 93 分,有 95% 学生的成绩低于 96 分,则采用 Summary 能够更好地展示数据的分布情况。

4.Histogram

Histogram 反映了某个区间内的样本个数,通过{le=「上边界」}指定这个范围内的样本数。Prometheus 中表示每个本地存储序列保存的 chunk 数量的指标