PromQL
# 一、prometheus
# 1、概述
prometheus是一个开源的系统监控和报警系统,PromQL是其内置的一种查询语言。
# 2、安装
安装操作
brew install prometheus
运行操作
cd /opt/homebrew/bin #根据实际homebrew安装目录
prometheus --config.file=/opt/homebrew/etc/prometheus.yml
- --config.file 配置运行环境,请根据实际目录配置
访问终端
http://localhost:9090/
# 二、Grafana
# 1、概述
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。
# 2、安装
# 安装 grafana
brew install grafana
# 启动
brew services start grafana
# 访问
http://localhost:3000/
初次访问账号和密码都是admin。
# 三、PromQL基础用法
首先,我们访问prometheus,在输入框中输入prometheus_http_requests_total,出现如下数据:
# 1、完全匹配
过滤掉code不为200的请求:
prometheus_http_requests_total{code!='200'}
# 2、正则匹配
匹配handler 标签以 /api/v1 开头的记录:
prometheus_http_requests_total{handler=~"/api/v1/.*"}
瞬时向量和区间向量
# 瞬时向量表达式,选择当前最新的数据
prometheus_http_requests_total{}
# 区间向量表达式,选择以当前时间为基准,5分钟内的数据
prometheus_http_requests_total{}[5m]
# 3、范围查询
如果我们要查询一个时间段的数据,比如5分钟之内的数据:
prometheus_http_requests_total{}[5m]
s - 秒 m - 分钟 h - 小时 d - 天 w - 周 y - 年
# 4、时间位移操作
如果我们想查询 5 分钟前的瞬时样本数据,或昨天一天的区间内的样本数据:
# 查询五分钟之前
prometheus_http_requests_total{} offset 5m
# 查询前一天这个小时内的数据
prometheus_http_requests_total{}[1h] offset 1d
# 5、聚合操作
# 查询请求的总数
count(prometheus_http_requests_total)
# 查询请求的数据合
sum(prometheus_http_requests_total)
# 6、标量
通过sum(prometheus_http_requests_total)
返回的仍然是一个瞬时向量,我们需要将其转换为浮点型的数字值:
scalar(sum(prometheus_http_requests_total))
# 7、字符串
字符串和我们开发过程中String类似,不过多赘述。
# 四、PromQL操作符
PromQL 还支持丰富的操作符,用户可以使用这些操作符对进一步的对事件序列进行二次加工。这些操作符包括:数学运算符,逻辑运算符,布尔运算符等等。
# 1、数字运算
prometheus_http_response_size_bytes_sum/8/1024
# 2、布尔运算
prometheus_http_requests_total > bool 20
这里注意区分和范围查询的区别:
prometheus_http_requests_total > 20
语句二是会过滤掉没有大于20的数据,但是语句一是会显示全部数据,但是对于大于20的数据为1,反之为0。
# 3、集合操作
通过集合运算,可以在两个瞬时向量与瞬时向量之间进行相应的集合操作:
prometheus_http_requests_total{code='400'} or prometheus_http_requests_total{code='302'}
and 与操作:list1为 A B C,list2为 B C D,那么 list1 and list2 的结果为:B C。 or 或操作:list1为 A B C,list2为 B C D,那么 list1 or list2 的结果为:A B C D。 unless 排除操作:list1为 A B C,list2为 B C D,那么 list1 unless list2 的结果为:A。
# 五、PromQL聚合操作
# 1、求和
sum(prometheus_http_requests_total)
# 2、最大
max(prometheus_http_requests_total)
# 3、最小
min(prometheus_http_requests_total)
# 4、平均值
avg(prometheus_http_requests_total)
# 5、标准差
stddev(prometheus_http_requests_total)
# 6、计数
count(prometheus_http_requests_total)
# 7、前后几条
# 前五条
bottomk(5, prometheus_http_requests_total)
# 后五条
topk(5, prometheus_http_requests_total)
# 六、PromQL内置函数
# 1、increase
increase(v range-vector),参数 v 是一个区间向量。该函数计算的结果是该区间的增长量。
increase(node_cpu_seconds_total{instance="172.22.21.143:9100", cpu="0", mode="idle"}[2m])
该查询的结果vaule值表示,主机 172.22.21.143 的第 0 个 CPU 在过去 2 分钟时间里,idle 状态所占时长
# 2、rate
rate(v range-vector),可以直接计算区间向量在时间窗口内平均变化率。对于快速变化的 Counter,如果使用 rate,因为其计算的是平均变化率,很容易把峰值削平。除非我们把时间间隔设置的足够小,才能够减弱这种效应。
# 3、irate
irate(v range-vector),同样用于计算区间向量的变化率,但是其表示的是瞬时增长率。会取最后两个样本值计算瞬时变化率。所以相比较 rate 具有更高的灵敏度。