当前位置: 首页 > news >正文

PromQL(Prometheus 查询语言)语法详解

以下是 PromQL(Prometheus 查询语言) 的核心语法详解,结合关键概念、操作符、函数及实际用例,助您快速掌握:


一、基础结构

1. 时间序列选择
  • 精确匹配
    http_requests_total{job="api-server", status="200"}  # 选择 job=api-server 且 status=200 的序列
    
  • 正则匹配
    http_requests_total{status=~"5.."}  # 匹配状态码为 5xx 的序列
    node_disk_bytes_read{device!~"nvme.*"}  # 排除 NVMe 磁盘
    
2. 数据类型
类型说明示例
即时向量单一时间戳的数据点集合node_cpu_seconds_total
范围向量指定时间窗口内的数据点集合http_requests_total[5m]
标量纯数值(可参与计算)3.14

二、核心操作符

1. 算术运算(结果为新向量)
# 将内存字节转为 MB
node_memory_used_bytes / (1024 * 1024)  
2. 比较运算(过滤数据)
# 筛选内存不足 100MB 的节点
node_memory_free_bytes < 100 * 1024^2  
3. 逻辑运算
# 合并两个条件的序列
up{job="app"} or up{job="db"}  
# 排除满足条件的序列
http_errors unless test_environment  
4. 聚合运算
# 按 job 分组计算每秒请求率
sum by(job) (rate(http_requests_total[5m]))  
# 排除 instance 标签后取最大值
max without(instance) (cpu_usage)  

三、关键函数

1. 速率与增量
函数用途示例
rate(v range)计算每秒平均增长率(推荐计数器)rate(http_requests_total[5m])
irate(v range)计算瞬时增长率(敏感但易尖峰)irate(network_bytes[1m])
increase(v range)计算时间窗口内总增量increase(user_signups[24h])
2. 时间窗口聚合
# 过去 1 小时内存可用量的平均值
avg_over_time(node_memory_free_bytes[1h])  
# 过去 30 分钟磁盘 IO 最大值
max_over_time(disk_io_ops[30m])  
3. 其他高频函数
# 预测磁盘 6 小时后是否满载
predict_linear(node_filesystem_free_bytes[1h], 6*3600) < 0  
# 统计不同状态码的数量
count by(status_code) (http_requests_total)  

四、高级技巧

1. 时间偏移(offset
# 对比今日与昨日同时段流量
rate(http_requests_total[1h] offset 1d)  
2. 子查询
# 计算过去 1 小时内每 5 分钟速率的最大值
max_over_time( rate(http_requests_total[5m])[1h:] )  

五、经典场景示例

1. CPU 使用率
100 - (  avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
)
2. HTTP 错误率
# 5xx 错误率
sum(rate(http_requests_total{status=~"5.."}[5m])) 
/ 
sum(rate(http_requests_total[5m]))
3. 内存不足预警
# 根分区剩余空间 < 20%
node_filesystem_free_bytes{mountpoint="/"} 
/ 
node_filesystem_size_bytes{mountpoint="/"} < 0.2

六、避坑指南

  1. 范围向量需搭配函数
    http_requests_total[5m] (无效)
    rate(http_requests_total[5m]) (正确)

  2. 避免全量扫描
    用标签缩小查询范围(如 {cluster="prod"})。

  3. 计数器重置问题
    使用 rate()increase() 自动处理计数器归零。


官方资源

  • PromQL 完整文档
  • 函数大全

提示:在 Grafana 中使用 Explore 模式实时验证查询,结合 Time RangeStep 调整精度。

http://www.dtcms.com/a/316289.html

相关文章:

  • 2um 精度 + 130mm 深孔扫描:新启航激光频率梳方案重塑 3D 轮廓测量标准
  • 【拓扑序】P6286 [COCI 2016/2017 #1] Cezar|省选-
  • 前端遇到页面卡顿问题,如何排查和解决?
  • DM8日常运维命令总结(四)
  • 游戏画面总是卡顿怎么办 告别延迟畅玩游戏
  • Go语言 泛型
  • TypeScript 中的协变与逆变
  • 203.移除链表元素 707.设计链表 206.反转链表
  • Python ttkbootstrap桌面应用开发示例
  • 创建一个可以edit的graph-node-test的永久登录dashboard的token
  • vue3通过按钮实现横向滚动或鼠标滚动横坐标滚动
  • 预测性维护:数字孪生如何重塑航空航天维修与寿命管理
  • Java技术栈/面试题合集(13)-网络篇
  • 李亚鹤:河南息县:淮河金沙滩开园 再添亲水休闲文旅地
  • 在Maxscript中随机化对象变换、颜色和材质
  • 拖车式变电站:灵活电力供应的“移动堡垒”,驱动全球能源转型新引擎
  • nuxt学习笔记
  • 学术论文命名:策略、方案、方法三者的区别
  • 使用Docker Desktop部署MySQL8.4.3
  • LeetCode 149:直线上最多的点数
  • 深入理解 C 语言中的拷贝函数
  • 多模态新方向|从数据融合到场景落地,解锁视觉感知新范式
  • 智能驾驶再提速!批量苏州金龙L4级自动驾驶巴士交付杭州临平区
  • 结合opencv解释图像处理中的结构元素(Structuring Element)
  • 使用PyQT创建一个简单的图形界面
  • 【面试场景题】日志去重与统计系统设计
  • 人工智能领域、图欧科技、IMYAI智能助手2025年5月更新月报
  • UGUI源码剖析(1):基础架构——UIBehaviour与Graphic的核心职责与生命周期
  • Git 中**未暂存**和**未跟踪**的区别:
  • 【深度学习-Day 41】解密循环神经网络(RNN):深入理解隐藏状态、参数共享与前向传播