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

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
可观测监控 Prometheus 版,每月50GB免费额度
简介: 【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 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
3月前
|
存储 Cloud Native 关系型数据库
Ganos实时热力聚合查询能力解析与最佳实践
Ganos是由阿里云数据库产品事业部与飞天实验室共同研发的新一代云原生位置智能引擎,集成于PolarDB-PG、Lindorm、AnalyticDB-PG和RDS-PG等核心产品中。Ganos拥有十大核心引擎,涵盖几何、栅格、轨迹等多种数据处理能力,实现了多模多态数据的一体化存储、查询与分析。本文重点介绍了Ganos的热力瓦片(HMT)技术,通过实时热力聚合查询与动态输出热力瓦片,无需预处理即可实现大规模数据秒级聚合与渲染,适用于交通、城市管理、共享出行等多个领域。HMT相比传统网格聚合技术具有高效、易用的优势,并已在多个真实场景中验证其卓越性能。
72 0
|
1月前
|
存储 Go PHP
Go语言中的加解密利器:go-crypto库全解析
在软件开发中,数据安全和隐私保护至关重要。`go-crypto` 是一个专为 Golang 设计的加密解密工具库,支持 AES 和 RSA 等加密算法,帮助开发者轻松实现数据的加密和解密,保障数据传输和存储的安全性。本文将详细介绍 `go-crypto` 的安装、特性及应用实例。
75 0
|
1月前
|
安全 测试技术 Go
Go语言中的并发编程模型解析####
在当今的软件开发领域,高效的并发处理能力是提升系统性能的关键。本文深入探讨了Go语言独特的并发编程模型——goroutines和channels,通过实例解析其工作原理、优势及最佳实践,旨在为开发者提供实用的Go语言并发编程指南。 ####
|
2月前
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
126 4
|
1月前
|
Go
|
3月前
|
域名解析 网络协议 安全
DNS查询工具简介
DNS查询工具简介
106 4
|
3月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
80 3
Golang语言之Prometheus的日志模块使用案例
|
2月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
3月前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
4月前
|
SQL 关系型数据库 MySQL

相关产品

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

    更多