一.概述
Prometheus提供了一种功能强大的表达式语言PromQL(Prometheus Query Language)。PromQL允许用户实时选择和汇聚时间序列数据,是Prometheus自已开发的数据查询DSL语言,使用这个查询语言能够进行各种聚合、分析和计算。
时序数据库(Time Series Database, TSDB)用于保存时间序列(按时间顺序变化)的海量数据,是一种高性能、低成本、稳定可靠的专业化数据库。它可以提供高效的读写、高压缩比低成本存储、降精度、插值、多维聚合计算和查询功能,解决由于设备采集点数据量巨大、数据采集频率高而造成的存储成本高、写入和查询分析低的问题。
时间序列数据的特别如下:
1)数据写入特点------写入平稳,持续,高并发高吞吐,写多读少,在写操作上时序数据能达到95%以上;无更新,实时写入最近生成的数据。
2)数据查询特点------按时间范围读取一段时间的数据; 对最近生成的数据读取概率高,对历史数据查询概率低;按照数据点的不同密集实现多精度查询。
3)数据存储特点-----数据存储量比较大;具有时效性,数据通常会有一个保存周期;多精度数据存储。
对时序数据库的基本要求如下:
1)能够支撑高并发,高吞吐的写入。
2)交互级的聚合查询,能够达到低查询延迟。
3)依据场景设计可以支撑海量数据存储。
4)在线应用服务场景中,需要高可用架构支撑。
二.数据模型和数据类型
Prometheus与其它主流TSDB一样,在数据模型的核心定义上,一条Prometheus数据会包含一个指标名称(metric)和一个或多个标签(label)以及metric value。 metric name加一组label作为唯一标识来定义time series,也就是时间线。在查询时,支持根据标签条件查找 time series,支持简单的条件也支持复杂的条件。
1)数据模型
# TYPE net_conntrack_dialer_conn_failed_total counter net_conntrack_dialer_conn_failed_total{dialer_name="alertmanager",reason="refused"} 0
该数据指标类型为:counter,指标名称为:net_conntrack_dialer_conn_failed_total, 标签有dialer_name 和 reason, 该指标值为0
2)数据类型
PromQL数据类型归类为以下四种:
即时向量(instant vector),是指同一时刻的一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间截,即每个时序只有一个点。
区间向量(range vector),是指在任何一个时间范围内的一组时间序列。包含每个时间序列随时间变化的一系列数据点,这时每个时序有多个点。
标量(scalar),即纯量数据,一个简单的数据浮点值,只有一个数字,没有时序。
字符串(string),一个目前未被使用的简单字符串值。
三.时间序列选择器
1. instant vector selectors
即时向量选择器,它返回查询计算时间之前的最新样本的即时向量,即一个包含零个或多个时间序列的列表。这些时间序列中的每一个都有一个样本,样本包含值和时间截。
下面是最简单的例子,也就是PromQL直接输入监控指标名称,在Graph页面中输入用于target的健康检查的 UP表达式,点击Execute进行查询,如下所示:
这时也可以指定某个label进行查询,如下所示:
以上就是instant vector selectors写法,这里仅仅使用"="号,除此之处还可以对标签值进行反向匹配,或者将标签值与正则表达式进行匹配,下面列出的匹配的运算符:
运算符 | 描述 |
= | 相等匹配模式,例如:job="canal" |
!~ | 反向匹配模式,例如:job!="canal" |
=~ | 正则表达式匹配模式,例如: job=~"node_.*" (.*)前缀匹配,当然也可以后缀匹配 |
!~ | 反向正则表达式匹配模式,例如job!~"nginx-.*" |
2. Range Vector Selectors
区间向量选择器可以为每个时间序列返回许多样本。从语法上看,范围持续时间被添加到向量选择器未尾的方括号[ ]中,用来获取过去一段时间范围内的样本数据。如下所示:
在过去一分钟内有3个样本,除了m表示分钟,s秒,h小时,d天,w周,y年。
在即时向量和区间向量表达式中,都以当前时间作为基准,例如指标process_resident_memory_bytes 内存使用量的变化:
上图15分钟内的指标内存值, [email protected], @前的是指标值, @后的是指时间截。
如果想查询15分钟前的即时样本数据,或昨天一天内的样本数据时,就需要使用时间偏移操作了,关键字为offest,。
四.聚合操作
Prometheus为使用者提供了内置的聚合操作符,这些聚合操作符仅仅适用于单个即时向量进行聚合操作,如下图所示:
语法中的without关键字可以把列出的标签从计算结果中删除,而其他未列出的标签被保留输出,上面没有了标签为instance的。
下面是用的by关键字,正好与without相反,是列出标签包含instance的,如下所示:
除了sum,还有max, min,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile
五.PromQL 运算符
1. 算术运算符
+ ,- ,* ,/,%,^(幂运算)
如下图所示,将样本从字节转成MB,新的时间序列不会包含指标名称
下图是二个指标相加,新的时间序列不会包含指标名称
2.关系运算符
6种关系运算符 == 相等、 !=不相等, >大于,<小于,>=大于等于, <=小于等于。
如下图所示:
标签:样本,查询,Prometheus,PromQL,时间,序列,数据 From: https://www.cnblogs.com/MrHSR/p/16737861.html