Prometheus之PromQL⽤法详解
Promethues是⽬前⼀个⽐较流⾏的开源监控项⽬,被使⽤也越来越多。我们都知道Prometheus是通过时序数据库来保存数据的,那么Prometheus采集到数据后,是如何保存在⾃已的时序数据库中的呢?通常我们看到Prometheus的数据指标都类似这样:
node_cpu_seconds_total{cpu="0",instance="10.20.9.183:9101",job="node_exporter",mode="system"},可以看到它是通过指标名称(metrics name)以及对应的⼀组标签(labelset)来唯⼀标识⼀条时间序列。那么如何对这种数据进⾏筛选查询、四则运算、聚合运算,以实现我们想要绘制的指标监控数据,就需要⽤到下⾯将要讲到的PromeQL 了。
1 PromQL
Prometheus提供了⼀种称为PromQL(Prometheus Query Language)的功能性查询语⾔,让⽤户可以实时选择和聚合时间序列数据。在Prometheus默认的浏览器中,表达式的结果既可以显⽰为图形,也可以以表格数据的形式显⽰,或者由外部系统通过HTTP API使⽤。
PromeQL在很多地⽅都会被⽤到,在Prometheus UI界⾯搜索监控指标时会⽤到,在Alertmanager配置告警时也会⽤到,在Grafana配置监控展⽰的时候也会⽤到。
下⾯在讲解的过程中,使⽤到了很多例⼦,可能部分例⼦在真实的监控环境中并没有具体的实际含义,仅仅是为了进⾏演⽰,便于理解学习。因为在实际的⽣产环境中,要得到⼀些⽬标监控值,是要综合多个运算符或者函数来实现的。
2
在Prometheus的表达式语⾔中,表达式或⼦表达式的计算结果可以为四种类型之⼀:
Instant vector - 瞬时数据:⼀组时间序列,每个时间序列包含⼀个样本,都共享相同的时间戳; Range vector - 区间数据:⼀组时间序列,其中包含每个时间序列随时间变化的⼀系列数据点; Scalar - 简单数据:⼀个简单的数字浮点值; String - 字符串值:⼀个简单的字符串值,⽬前未使⽤。
2.1 Instant vector
瞬时数据表⽰的是在当前时刻的数据。
查询cpu的使⽤时间
node_cpu_seconds_total
2.2 Range vector
区间数据表⽰的是在某⼀个时间范围内的数据,可以分为以下⼏种。
Time Durations表⽰持续时间,计量单位有以下这些:
ms - 毫秒
s - 秒
m - 分
h - 时
d - 天
w - 周
y - 年
查询cpu 1分钟内的使⽤时间采样周期是15s,可以看到1分钟内,每个指标有4个值
node_cpu_seconds_total[1m]
Offset modifier表⽰偏移量修饰符,允许更改查询中单个瞬间和范围向量的时间偏移量。查询cpu使⽤时间在5分钟之前的数据
node_cpu_seconds_total offset 5m
@修饰符,后⾯加上⼀个unix时间戳,可以查询该时间点的数据。
注意:这种⽤法需要prometheus启动的时候添加参数:--enable-feature=promql-at-modifier,并且以前⽼版本的prometheus可能不⽀持这种⽤法。查询2022.01.25 00:00:00 这个时刻cpu的使⽤时间
node_cpu_seconds_total @ 1643040000
2.3 Scalar
简单数据没有时间属性,每个时间点数值⼀致。
查询cpu使⽤时间,所有标签的个数
count(node_cpu_seconds_total)
3
PromQL⽀持各种条件匹配
条件匹配符有:==、!=、=~、!~
= : 选择与提供的字符串完全相同的数据 != : 选择不等于提供的字符串的数据 =~ : 选择与提供的字符串进⾏正则表达式匹配的数据 !~ : 选择与提供的字符串不匹配的数据3.1
查询cpu第⼀个核的使⽤时间
node_cpu_seconds_total{cpu="0"}
查询cpu除了第⼀个核以外的其他核的使⽤时间node_cpu_seconds_total{cpu!="0"}
查询cpu第⼀个、第⼆个核的使⽤时间
正则匹配一个或连续多个node_cpu_seconds_total{cpu=~"0|1"}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论