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

PromQL 从基础入门教程

PromQL 从基础入门教程

PromQL(Prometheus Query Language)是 Prometheus 的查询语言,用于从时间序列数据库中提取和计算监控数据。本教程从基础语法开始,逐步介绍 PromQL 的核心概念和常见用法。


1. PromQL 基础概念

1.1 时间序列(Time Series)

Prometheus 存储的数据是 时间序列(Time Series),格式如下:

<指标名称>{<标签1>=<值1>, <标签2>=<值2>, ...} <时间戳> <值>

例如:

http_requests_total{method="GET", status="200"} @1650000000 42
  • http_requests_total 是指标名
  • {method="GET", status="200"} 是标签(用于筛选)
  • 1650000000 是时间戳(Unix 时间)
  • 42 是该时间点的值

1.2 数据类型

PromQL 支持 4 种数据类型:

  1. 瞬时向量(Instant Vector):某一时刻的所有时间序列(如 node_cpu_seconds_total)。
  2. 区间向量(Range Vector):某段时间内的多个时间序列(如 rate(node_cpu_seconds_total[5m]))。
  3. 标量(Scalar):单个数值(如 42)。
  4. 字符串(String):文本(较少使用)。

2. 基本查询

2.1 查询瞬时数据

node_cpu_seconds_total  # 查询所有 CPU 时间
node_cpu_seconds_total{mode="idle"}  # 只查询空闲 CPU 时间
node_cpu_seconds_total{instance="10.0.0.1:9100"}  # 查询特定实例

2.2 查询区间数据

node_cpu_seconds_total[5m]  # 查询过去 5 分钟的数据
rate(node_cpu_seconds_total[5m])  # 计算 5 分钟内的平均增长率

3. 常用运算符

3.1 算术运算

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes  # 计算已用内存
node_filesystem_free_bytes / node_filesystem_size_bytes * 100  # 计算磁盘剩余百分比

3.2 比较运算

node_memory_MemAvailable_bytes < 1e9  # 可用内存 < 1GB
rate(node_network_receive_bytes_total[5m]) > 1e6  # 网络接收速率 > 1MB/s

3.3 逻辑运算

node_load5 > 5 or node_load5 < 1  # 高负载或低负载
up == 0  # 宕机的实例

4. 聚合操作

4.1 sum() 求和

sum(node_cpu_seconds_total)  # 所有 CPU 时间总和
sum by(instance)(node_cpu_seconds_total)  # 按实例分组求和

4.2 avg() 求平均

avg(node_memory_MemAvailable_bytes)  # 平均可用内存

4.3 max() / min() 最大/最小值

max(rate(node_network_receive_bytes_total[5m]))  # 最大网络接收速率

4.4 count() 计数

count(node_cpu_seconds_total)  # 有多少个 CPU 核心

5. 高级查询

5.1 rate() 计算增长率

rate(http_requests_total[5m])  # 5 分钟内 HTTP 请求的增长率

5.2 increase() 计算增量

increase(http_requests_total[1h])  # 过去 1 小时的 HTTP 请求增量

5.3 irate() 瞬时增长率

irate(node_network_receive_bytes_total[5m])  # 更灵敏的网络流量计算

5.4 predict_linear() 预测未来值

predict_linear(node_filesystem_free_bytes[1h], 4*3600)  # 预测 4 小时后磁盘剩余空间

6. 实战示例

6.1 CPU 使用率

100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

6.2 内存使用率

(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

6.3 磁盘使用率

(node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100

6.4 网络流量

rate(node_network_receive_bytes_total[5m]) / 1024 / 1024  # MB/s

7. 总结

功能示例
基本查询node_cpu_seconds_total
标签过滤node_cpu_seconds_total{mode="idle"}
区间查询node_cpu_seconds_total[5m]
聚合计算sum by(instance)(node_cpu_seconds_total)
增长率rate(http_requests_total[5m])
预测predict_linear(node_filesystem_free_bytes[1h], 3600)

8. 学习资源

  • Prometheus 官方文档
  • PromQL Cheat Sheet
  • Grafana + Prometheus 实战

现在你可以尝试在 Prometheus 的 Graph 或 Grafana 中运行这些查询!
🚀 进阶学习:尝试编写告警规则(Alert Rules)和 Dashboard 可视化。

相关文章:

  • html5视频播放器和微信小程序如何实现视频的自动播放功能
  • Linux编辑器——vim的使用
  • 优雅草最新实战项目技术Discuz X3.5电子签约插件开发项目实施方案优雅草·卓伊凡
  • QT 框架学习笔记
  • 什么是 WPF 技术?什么是 WPF 样式?下载、安装、配置、基本语法简介教程
  • 用户配置文件(Profile)
  • 网络安全方向在校生有哪些证书适合考取?
  • 安卓开发用到的设计模式(3)行为型模式
  • EasyRTC嵌入式SDK音视频实时通话助力WebRTC技术与智能硬件协同发展
  • kubernetes网络详解(内部网络、Pod IP分配、CNI)
  • FlagOS 新里程:开源面向多种硬件架构的统一AI 编译器 FlagTree
  • 机器学习笔记【Week6】
  • Redis 集合、有序集合与通用命令详解
  • [Vue] ref及其底层原理
  • 单片机(MCU)的 IO 口静电、浪涌、电压异常等保护
  • 【机器学习基础】机器学习入门核心算法:支持向量机(SVM)
  • 大模型的开发应用(四):深度学习模型量化与QLoRA微调
  • WordPress免费网站模板下载
  • Android studio 查看aar源码出现/* compiled code */
  • 三天掌握PyTorch精髓:从感知机到ResNet的快速进阶方法论
  • 太仓建设网站/网站百度关键词优化
  • 外贸出口网站建设/今天的最新消息新闻
  • html5自适应手机网站模板/免费网站流量
  • 医疗营销网站建设/软文推广发稿
  • 房山网站开发/百度做广告多少钱一天
  • 弄淘宝招牌图什么网站可以做/百度推广收费