prometheus数据模型和类型
数据模型
promtheus从根本上将所有数据存储为 时间序列 ,属于同一指标和同一组标记维度的带时间戳的值流
指标名称和标签
指标名称
定义
- 指定所测量系统的一般特征,例如
http_requests_total表示收到的http请求总数
命名规则
- 指标名称可以包含 ASCII字母、数字、下划线和冒号。它必须匹配正则表达式
[a-zA-Z_:][a-zA-Z0-9_:]*
指标标签
- Prometheus 的维度数据模型可以通过标签组合来唯一标识同一指标名称的不同维度实例。例如,通过指定标签,可以标识某个具体的指标实例,比如:所有使用
POST方法访问/api/tracks路径的 HTTP 请求。Prometheus 的查询语言(PromQL)支持基于这些标签维度进行过滤和聚合操作,从而灵活地分析和处理监控数据 - 任何标签值的更改(包括添加或删除标签)都会创建新的时间序列,在 Prometheus 中,每个时间序列是通过指标名称和标签组合唯一标识的。如果某个标签的值 发生变化,或者增加/删除了某个标签,Prometheus 会将其视为一个新的时间序列,从而独立存储和处理该数据
- 标签可以包含 ASCII 字母、数字和下划线。它们必须匹配正则表达式
[a-zA-Z_][a-zA-Z0-9_]* - 以
__(两个_)开头的标签名称保留供内部使用 - 标签值可以包含任何 Unicode 字符
- 标签的值如果为空,相当于该标签不存在,在 Prometheus 中,如果某个标签的值是空字符串 (
""),它会被视为与没有这个标签的情况等价。也就是说,label=""和完全没有label是一样的,不会创建新的时间序列
样本
样本(Samples)构成了实际的时间序列数据。每个样本包含以下内容:
-
时间戳(Timestamp) 表示该样本的具体时间,通常以毫秒为单位的 Unix 时间戳存储
-
值(Value) 样本的实际数值,通常是一个浮点数,表示在特定时间点上的指标数据
这两个组成部分共同定义了时间序列中的一个数据点,用于描述某个时间点上某个指标的具体数值
表示方法
给定一个指标名称和一组标签,时间序列通常使用以下表示法来标识:
<metric_name>{<label_name1>="<label_value1>", <label_name2>="<label_value2>", ...}
-
<metric_name>:指标的名称,例如http_requests_total -
{}:大括号包含一组标签 -
<label_name>和<label_value>:标签名称和对应的标签值,例如method="POST",handler="/api/tracks"
一个描述 POST 方法访问 /api/tracks 路径的 HTTP 请求总数的时间序列,可以表示为如下
http_requests_total{method="POST", handler="/api/tracks"}
数据类型
Counter
计数器(Counter) 是一种累积型指标,表示一个单调递增的计数器,其值只会增加,或者在重启时被重置为零
示例:
- 请求数(Requests served):用计数器表示已处理的请求总数
- 任务完成数(Tasks completed):记录已完成的任务总数
- 错误数(Errors):记录发生的错误总数
特点:
-
单调递增:计数器的值只会增长,不能减少
-
重置为零:当系 统或服务重启时,计数器的值会被重置为零
使用场景:
- 用于监控和统计只会累加的数据,比如总请求数、总错误数或某项操作的累计次数
Prometheus 中常用计数器的场景包括 HTTP 请求总数 (http_requests_total)、任务完成总数 (tasks_completed_total) 等
Gauge
仪表盘(Gauge) 是一种指标,表示一个单一的数值,这个数值可以任意增加或减少。
特点:
- 值的变化:Gauge 的值可以上升、下降,也可以保持不变。
- 当前状态:Gauge 通常用于表示某个瞬时状态的值,而不是累积的历史数据。
使用场景:
- CPU 使用率:表示当前 CPU 的使用百分比,比如
cpu_usage。 - 内存占用:记录当前的内存使用量,比如
memory_usage_bytes。 - 温度:显示当前温度,比如
temperature_celsius。 - 队列长度:反映当前队列中等待处理的任务数量,比如
queue_length。
示例:
假设监控当前内存使用情况:
memory_usage_bytes{instance="server1"} = 524288000
表示服务器 server1 当前的内存使用为 500MB。
Gauge 适用于表示当前状态数据,与只能累积增长的计数器(Counter)不同,它能灵活反映实时的变化
Histogram
直方图(Histogram) 会对观测值(例如请求持续时间或响应大小等)进行采样,并根据配置的区间(桶)进行计数。此外,它还提供所有观测值的总和。直方图暴露的时间序列
当 Prometheus 拉取直方图的指标数据时,基于其基础指标名称 <basename>,会暴露以下多个时间序列:
-
观测桶的累积计数器
- 格式:
<basename>_bucket{le="<上限>"} - 每个桶的累积计数器表示值落入该桶范围内的总数量
- 例如,
http_request_duration_seconds_bucket{le="0.5"}表示所有请求中持续时间 ≤ 0.5 秒的数量
- 格式:
-
所有观测值的总和
- 格式:
<basename>_sum - 表示所有观测值的总和,用于计算平均值等指标
- 格式:
-
观测事件的总计数