Prometheus(3)监控指标
数据模型
Prometheus以时间序列的形式存储所有的数据,每一个指标数据都包含:
- 指标名称
- 一些标签
- 对应的数据(64位浮点数据)
- 时间戳(精确到毫秒)
比如监控CPU的一条记录node_cpu{cpu="cpu0",mode="idle"} 666666.6666
node_cpu
监控的指标为节点的CPU使用时间,单位是秒cpu="cpu0"
和mode="idle"
标记CPU为CPU0,并且模式是idle模式的数据666666.6666
cpu0的空闲时间,单位是秒
使用者可以自定义指标和标签,但是名称需要满足一些规则:
- 指标名称
[a-zA-Z_:][a-zA-Z0-9_:]*
- 标签名称
[a-zA-Z_][a-zA-Z0-9_]*
- 标签的值可以包含Unicode字符
指标类型
数据指标主要有四种类型:
- Counter 计数
- Gauge 数值
- Histogram 直方图
- Summary 统计
Counter
counter是一个累计型的指标,仅仅支持递增或者重置为0,通常用来统计事件发生的数量,比如请求、错误或者完成的任务的数量,或者某个数值的变化率。
只增不减,一般在指标后面加上_total
作为后缀。
Gauge
Gauge是一个纯数值类型的指标,能够随时增大或者变小。
Gauge可以用来测量某些指标,比如温度,或者当前CPU的使用量。
Histogram
Histogram直方图会对特定buckets内的一些采样数据进行统计,比如收集并且统计一段时间内的请求时间并且计算平均值。
一个直方图通常会有一个基础指标名称basename
,用来抓取的指标数据通常是在这个basename
后面增加后缀。
在buckets内的累计型计数器,
basename_bucket{le="上限值"}
。在buckets内的数据总值,
basename_sum
在buckets内的事件总数量,
basename_count
,等同于上面的basename_bucket{le="+Inf"}
比如我们希望能获取http请求的直方图,在io.micrometer
组件中有一个http_server_requests_seconds
的指标,通过抓取可以看到下面的数据。
1 | # GET /actuator/health接口返回200的请求耗时为0.003秒,也就是3毫秒 |
Summary
和直方图histogram类似,也是计算一段时间内的样本数据。
但是它并不是计算指定buckets内数值,而是计算滑动窗口内的样本数值。
命名习惯
假设采样数据指标metric叫做x,如果x是histogram或者summary类型则必须满足以下条件:
- 采样数据的总和表示为x_sum
- 采样数据的总量应该是x_count
- summary类型的采样数据的quantile应该表示为x{quantile=”y”}
- histogram类型采样分区统计数据将表示为x_bucket{le=”y”}
- histogram类型的采样必须包含x_bucket{le=”+Inf”},他的值等于x_count的值
- summary和histogram中quantile和le必须按从小到大的顺序排列