数据模型
Prometheus的存储实现上所有的监控样本都是以 time-series 的形式保存在 Prometheus 内置的TSDB(时序数据库)中,而 time-series 所对应的监控指标 (metric) 也是通过 labelset 进行唯一命名的。
样本数据
- 指标(metric):metric name 和描述当前样本特征的 labelsets;
- 时间戳(timestamp):一个精确到毫秒的时间戳;
- 样本值(value): 一个float64的浮点型数据表示当前样本的值。
<--------------- metric ---------------------><-timestamp -><-value->
http_request_total{status="200", method="GET"}@1434417560938 => 94355
http_request_total{status="200", method="GET"}@1434417561287 => 94334
http_request_total{status="404", method="GET"}@1434417560938 => 38473
http_request_total{status="404", method="GET"}@1434417561287 => 38544
http_request_total{status="200", method="POST"}@1434417560938 => 4748
http_request_total{status="200", method="POST"}@1434417561287 => 4785
指标
指标的名称(metric name)可以反映被监控样本的含义(比如,http_request_total
- 表示当前系统接收到的HTTP请求总量)。指标名称只能由ASCII字符、数字、下划线以及冒号组成并必须符合正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*
。
<metric name>{<label name>=<label value>, ...}
Metrics类型
Counter:只增不减的计数器
Counter类型的指标数据,只增不减(除非系统发生重置)。
常见的有node_cpu_seconds_total{cpu="x",mode="idle"}
,它表示的意思是序号为x
的cpu从开机到当前的这段时间内,cpu处于空闲(idle
)状态的时间总和。
Gauge:可增可减的仪表盘
Gauge类型的指标数据,可增可减,比如内存剩余量node_memory_MemAvailable
Histogram:直方图
Histogram一个典型的使用场景就是HTTP请求的响应时间。
bash
# HELP xxx_http_request_duration_seconds Histogram of latencies for HTTP requests.
# TYPE xxx_http_request_duration_seconds histogram
xxx_http_request_duration_seconds_bucket{verb="GET", le="0.1"} 10
xxx_http_request_duration_seconds_bucket{verb="GET", le="0.2"} 20
xxx_http_request_duration_seconds_bucket{verb="GET", le="0.3"} 30
xxx_http_request_duration_seconds_bucket{verb="GET", le="+Inf"} 30
xxx_http_request_duration_seconds_sum{verb="GET"} 4.5
xxx_http_request_duration_seconds_count{verb="GET"} 30
指标指定了请求数量、请求总耗时、各个时间区间的请求数量。
Summary:摘要
与 Histogram 类型类似,但它直接存储了分位数(quantile),相当于HTTP服务自已本身已经做了一次统计。
bash
# HELP xxx_http_request_duration_seconds Summary of latencies for HTTP requests.
# TYPE xxx_http_request_duration_seconds summary
xxx_http_request_duration_seconds{verb="GET", quantile="0.5"} 0.12
xxx_http_request_duration_seconds{verb="GET", quantile="0.9"} 0.22
xxx_http_request_duration_seconds{verb="GET", quantile="0.99"} 0.25
xxx_http_request_duration_seconds_sum{verb="GET"} 4.5
xxx_http_request_duration_seconds_count{verb="GET"} 30