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,通常用来统计事件发生的数量,比如请求、错误或者完成的任务的数量。

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
2
3
4
5
6
# GET /actuator/health接口返回200的请求耗时为0.003秒,也就是3毫秒
http_server_requests_seconds{exception="None", method="Get", status="200", uri="/actuator/health"} 0.003
# GET /actuator/health接口返回200请求的请求数量为10个
http_server_requests_seconds_count{exception="None", method="Get", status="200", uri="/actuator/health"} 10.0
# GET /actuator/health接口返回200请求的总耗时是351.271864943秒
http_server_requests_seconds_sum{exception="None", method="Get", status="200", uri="/actuator/health"} 351.271864943

Summary

和直方图histogram类似,也是计算一段时间内的样本数据。

但是它并不是计算指定buckets内数值,而是计算滑动窗口内的样本数值。