Prometheus 查询语言(PromQL):深入解析

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测链路 OpenTelemetry 版,每月50GB免费额度
性能测试 PTS,5000VUM额度
简介: 【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。

引言

Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。

PromQL 基础

PromQL 的设计旨在简化时间序列数据的查询和处理过程。PromQL 的核心概念包括:

  • 向量:PromQL 处理的数据基本单位。
  • 时间序列:具有相同标签集的一组向量。
  • 标签:键值对形式的元数据,用于标识不同的时间序列。

基本查询

PromQL 支持通过标签选择器来过滤时间序列数据。

选择时间序列
up{job="node"}

这个查询返回所有带有 job=node 标签的时间序列,其中 up 表示监控目标的状态。

指定时间范围
up{job="node"}[5m]

这个查询返回过去 5 分钟内 up 指标的所有样本。

向量操作

向量操作允许对时间序列进行算术运算。

算术运算
node_memory_MemFree_bytes + node_memory_Buffers_bytes

这个查询计算了节点空闲内存加上缓冲区内存的总和。

比较运算
node_cpu{mode!="idle"} > 0.1

这个查询筛选出 CPU 使用率超过 10% 的时间序列。

聚合函数

PromQL 提供了多种内置的聚合函数,如 sum, avg, min, max, count 等。

聚合函数示例
sum(node_memory_MemTotal_bytes) by (instance)

这个查询计算每个实例的总内存,并按实例分组。

标签操作

标签操作允许对标签进行操作,如添加、删除或替换标签。

添加标签
node_memory_MemFree_bytes{env="production"}

这个查询返回 node_memory_MemFree_bytes 指标,并添加了一个 env=production 的标签。

删除标签
ignoring(job) sum(node_memory_MemFree_bytes)

这个查询计算所有 node_memory_MemFree_bytes 的总和,并忽略 job 标签。

时间偏移

时间偏移功能允许查询过去的时间点的数据。

时间偏移
irate(node_cpu_seconds_total{mode!="idle"}[5m]) offset 1h

这个查询返回过去 1 小时前的每分钟 CPU 使用率的增长率。

向量匹配

向量匹配用于连接两个向量,基于它们共有的标签。

向量匹配
node_memory_MemFree_bytes / on(instance) node_memory_MemTotal_bytes

这个查询计算每个实例的空闲内存占总内存的比例。

率和增量

PromQL 提供了 rateirate 函数来计算速率和瞬时速率。

计算速率
rate(node_network_receive_bytes_total[5m])

这个查询计算过去 5 分钟内每个网络接口接收字节的平均速率。

窗口函数

窗口函数用于在固定的时间窗口内执行聚合。

窗口函数
increase(http_requests_total{status_code!~"5.."}[1h])

这个查询统计过去 1 小时内成功的 HTTP 请求总数。

综合示例

假设我们想要计算过去一小时内每个实例的平均 CPU 使用率,并将其与内存使用率相比较。

# 计算 CPU 使用率
cpu_usage_rate := irate(node_cpu_seconds_total{mode!="idle"}[5m])

# 计算内存使用率
memory_usage_rate := (
  (node_memory_MemTotal_bytes - node_memory_MemFree_bytes)
  / node_memory_MemTotal_bytes
)

# 输出结果
(cpu_usage_rate * 100) vs (memory_usage_rate * 100)

结论

PromQL 是一种非常强大的查询语言,它使得查询和聚合时间序列数据变得简单直观。通过本文的学习,你应该能够掌握 PromQL 的基本用法,并能够编写复杂的查询来解决实际的监控问题。PromQL 的灵活性和表达力使得 Prometheus 成为一个非常有效的监控工具,适用于各种规模的系统。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
10天前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
18 3
Golang语言之Prometheus的日志模块使用案例
|
5天前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
16天前
|
存储 Prometheus Cloud Native
prometheus学习笔记之PromQL
prometheus学习笔记之PromQL
|
14天前
|
SQL 关系型数据库 MySQL
|
14天前
|
存储 安全 程序员
|
14天前
|
存储 Go UED
精通Go语言的命令行参数解析
【8月更文挑战第31天】
13 0
|
14天前
|
SQL 数据库
|
15天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
53 6
|
4天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析

相关产品

  • 可观测监控 Prometheus 版
  • 推荐镜像

    更多