采样时间戳 + 指标 + 指标值平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~
1.Prometheus数据模型
Prometheus基本上将所有数据存储为时间序列。时间序列即:属于相同指标和相同标签的时间戳值流。除了存储的时间序列,Prometheus还可以将查询的结果生成临时的派生时间序列。假设我们对up{instance=”prometheus”, job=”jobName”}指标进行采样3次(采样间隔15秒),则得到3个Sample采样点,这三个采样点就组成了一条时间序列!如下:
采样点 | 采样时间 | 指标 | 值 |
采样点1 | 20240227102501 | up{instance=”prometheus”, job=”jobName”} | 0 |
采样点2 | 20240227102516 | up{instance=”prometheus”, job=”jobName”} | 1 |
采样点3 | 20240227102531 | up{instance=”prometheus”, job=”jobName”} | 1 |
(时间序列示例表)
下面我们将prometheus的时间序列中的每个采样点进行拆解,一起认识一下prometheus的数据模型,便于对prometheus的理解,便于后续文章内容的理解!
1.1.时间序列
对同一个指标进行间隔采样,得到的多个采样点的序列就是时间序列。如上面的“时间序列示例表”所示。时间序列由同一个指标的多个采样点组成。
每条时间序列由指标名称(metrics)和一组标签(label)确定并命名,也就是说一个指标名称可能对应很多条时间序列。可以将时间序列理解为一个以采样时间为轴的矩阵,如下图所示,有三条时间序列在时间轴上分别对应不同的值:
上图中,每条时间序列上的 每一个点称为一个样本(sample)。
1.2.采样点
时间序列上的具体的一个点,称为采样点或样本。采样点 = 采样时间戳 + 指标 + 指标值, 即每个sample样本包括:
(1)样本信息(指标)
(2)一个以毫秒精度的时间戳
(3)一个float64格式的值
Prometheus会定时到指定的exportor上拉取(pull)当前时刻的样本数据,然后根据pull的时间以时间序列的方式保存在内存数据库中,并且定时持久化到硬盘上,exportor只维护指标的值。多个采样样本构成了实际的时间序列数据。
1.3.指标名称
被采集的指标的名称。如:up。
指标名称可以包含ASCII字母、数字、下划线和冒号。它必须匹配正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。注意:冒号保留给用户定义的记录规则。
1.4.指标标签
被采集的指标的维度。如:instance、job。
Promql查询表达式中可以基于这些维度进行过滤和聚合。注意:指标的任何标签值的更改,包括添加或删除标签,都将创建一个新的时间序列。
指标标签可以包含ASCII字母、数字和下划线。它们必须匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*。以__(两个“_”)开头的标签名称保留用于内部使用。标签值可以包含任何Unicode字符。标签值为空的标签被认为等同于不存在的标签。
1.5.指标
指标就是要采集的指标目标。指标由“指标名称 + 一组指标标签”组成。如:up{instance=”prometheus”, job=”jobName”}。
一个指标可以有多个指标标签。
1.6.指标值
被prometheus定时抓取的某指标的采样值(float64类型)。如:1,1.0023191等。