【云原生Prometheus篇】Prometheus PromQL语句详解 1.0

news2025/1/18 17:06:33

文章目录

  • 一、前言
    • 1.1 Prometheus的时间序列
      • 1.1.1 指标名称
      • 1.1.2 标签
      • 1.1.3 使用的注意事项
    • 1.2 样本数据格式
    • 1.3 Prometheus 的聚合函数
  • 二 、PromQL 理论部分
    • 2.1 PromQL简介
    • 2.2 PromQL的数据类型
    • 2.3 时间序列选择器
      • 2.3.1 瞬时向量选择器 (Instant Vector Selectors)
        • Part1 定义
        • Part2 构成
        • Part3 怎么定义瞬时向量选择器?
        • Part4 注意事项
      • 2.3.2 区间向量选择器 (Range Vector Selectors)
        • Part1 定义和工作原理
        • Part2 时间范围
      • 2.3.3 偏移向量选择器

一、前言

1.1 Prometheus的时间序列

Prometheus 中,每个时间序列都由指标名称(Metric Name)标签(Label)唯一标识

格式: <metric_name>{<label_name>=<label_value>, ...}

1.1.1 指标名称

通常用于描述系统上要测定的某个特征。

例如,prometheus_http_requests_total 表示接收到的 HTTP 请求总数。

1.1.2 标签

键值型数据,附加在指标名称之上,从而让指标能够支持多纬度特征;可选项。

双下划线的标签(例如 __address__ )是 Prometheus 系统默认标签,是不会显示在 /metrics 页面里面的;

常见的系统默认标签
__address__当前 target 实例的套接字地址 :
__scheme__采集当前 target 上指标数据时使用的协议(http 或 https)
__metrics_path__采集当前 target 上的指标数据时使用 URI 路径,默认为 /metrics
__param_<name>传递的 URL 参数中第一个名称为 的参数的值
__name__此标签是标识指标名称的预留标签,能够使用标签选择器对指标名称进行过滤

1.1.3 使用的注意事项

1)指标名称和标签的特定组合代表着一个时间序列

不同的指标名称自然代表着不同的时间序列;而指标名称相同,但标签不同的组合也代表着不同的时间序列。

2)尽可能地保持标签的稳定性

PromQL支持基于定义的指标维度进行过滤和聚合,更改任何标签值(包括添加或删除标签),都会创建一个新的时间序列。

如果标签不稳定,很可能会创建新的时间序列,更甚者会生成一个动态的数据环境,并使得监控的数据源难以跟踪,从而导致建立在该指标之上的图形、告警及记录规则变得无效。

1.2 样本数据格式

Prometheus 的每个数据样本两部分组成,毫秒精度的时间戳float64 格式的数据

prometheus_http_requests_total{code="200", handler="/targets", instance="localhost:9090", job="prometheus"}  @1434317560885         28

prometheus_http_requests_total{code="200", handler="/targets", instance="localhost:9090", job="prometheus"}  @1434317561483         35
|                            ||                                                                           |  |            |          |
 ---------- 指标名称 --------  ------------------------ 标签 ---------------------------------------------    -- 时间戳 --        样本值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.3 Prometheus 的聚合函数

内置函数描述示例查询
sum()对样本值求和sum(my_metric)
min()求取样本值中的最小值min(my_metric)
max()求取样本值中的最大值max(my_metric)
avg()对样本值求平均值avg(my_metric)
count()对分组内的时间序列进行数量统计count(my_metric)
stddev()对样本值求标准差,帮助了解数据的波动大小stddev(my_metric)
stdvar()对样本值求方差,是求取标准差过程中的中间状态stdvar(my_metric)
topk()返回最大的 k 个样本值及其时间序列topk(5, my_metric)
bottomk()返回最小的 k 个样本值及其时间序列bottomk(5, my_metric)
quantile()返回指定百分位数的样本值quantile(0.90, my_metric)
count_values()对样本值等于指定值的时间序列进行计数count_values(my_metric, “value_1”)
count_values(my_metric, “value_2”)

●topk() :逆序返回分组内的样本值最大的前 k 个时间序列及其值,即最大的 k 个样本值
●bottomk() :顺序返回分组内的样本值最小的前 k 个时间序列及其值,即最小的 k 个样本值
●quantile() :分位数,用于评估数据的分布状态,该函数会返回分组内指定的分位数的值,即数值落在小于等于指定的分位区间的比例
●count_values() :对分组内的时间序列的样本值进行数量统计,即等于某值的样本个数

二 、PromQL 理论部分

2.1 PromQL简介

PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,支持用户进行实时的数据查询及聚合操作。

概念回顾
时间序列简称时序,也就是监控指标数据,指某个监控指标在多维度标签条件下的表达式
样本值<指标名称>{<标签key1>=<值1>, <标签key2>=<值2>, ....}
格式某个时间序列在某个时间戳下的监控指标的具体数值

2.2 PromQL的数据类型

数据类型描述
瞬时向量Instant vector特定或全部的时间序列集合上,具有相同时间戳的一组样本值
区间向量Range vector特定或全部的时间序列集合上,在指定的同一时间范围内的所有样本值
标量数据Scalar一个浮点型的数据值
字符串String一个字符串,支持使用单引号、双引号进行引用

2.3 时间序列选择器

PromQL表达式 可使用 时间序列选择器过滤出所需的样本值

用户可使用向量选择器表达式来挑选出,给定指标名称下的所有时间序列或部分时间序列的即时样本值,或至过去某个时间范围内的样本值,前者称为瞬时向量选择器,后者称为区间向量选择器

2.3.1 瞬时向量选择器 (Instant Vector Selectors)

Part1 定义

瞬时向量选择器可以返回 0 个、1 个或多个时间序列上在给定时间戳(instant)上的各自的一个样本。

Part2 构成
构成描述
指标名称可选用于限定特定指标下的时间序列,即负责过滤指标
标签选择器可选用于过滤时间序列上的标签;定义在 {} 之中

瞬时向量选择器 通过<指标名称>{<标签key1><匹配操作符><值1>, ....} 表达式得到时间序列在当前时间戳下的样本值

标签选择器支持的匹配操作符描述
=完全相等
!=不相等
=~正则表达式匹配
!~正则表达式不匹配
Part3 怎么定义瞬时向量选择器?

定义瞬时向量选择器时,以上两个部分应该至少给出一个,因此存在以下三种组合。

组合一: 仅给定指标名称,或在标签名称上使用了空值的标签选择器

返回给定的指标下,所有时间序列各自的即时样本。

#举个例子
#都是用于返回这个指标下各时间序列的即时样本
prometheus_http_requests_total 和 prometheus_http_requests_total{}

在这里插入图片描述

组合二: 仅给定标签选择器

返回所有符合给定的标签选择器的,所有时间序列上的即时样本

#举个例子
{code="200", job="prometheus"}

在这里插入图片描述
在这里插入图片描述

组合二: 指标名称和标签选择器的组合

返回给定的指标下的,且符合给定的标签过滤器的所有时间序列上的即时样本

#举个例子
prometheus_http_requests_total{code="200", job="prometheus"}
用于返回这个指标 code 为 200, 并且 job 为 prometheus 的时间序列的即时样本

在这里插入图片描述

Part4 注意事项

1)匹配到空标签值的标签选择器时,所有未定义该标签的时间序列同样符合条件

#举个例子
prometheus_http_requests_total{x= ""}
#该指标名称上所有未使用该标签(x)的时间序列也符合条件

在这里插入图片描述

2)正则表达式将执行完全锚定机制,它需要匹配指定的标签的整个值;

3)向量选择器至少要包含一个指标名称,或者至少有一个不会匹配到空字符串的标签选择器
在这里插入图片描述

4)使用 name 做为标签名称,还能够对指标名称进行过滤

#举个例子
{__name__=~".*http_requests_total"}  能够匹配所有以 http_requests_total 为后缀的所有指标

在这里插入图片描述

2.3.2 区间向量选择器 (Range Vector Selectors)

Part1 定义和工作原理

区间向量选择器 通过 <指标名称>{<标签key1>=<值1>, ....}[XX] 表达式,得到时间序列在以当前时间为基准的指定时间范围内的多个时间戳下的样本值

区间向量选择器可以返回 0 个、1 个或多个时间序列上在给定时间范值围内的各自的一组样本。

区间向量选择器的不同之处在于,需要通过在瞬时向量选择器表达式后面,添加包含在 [ ] 里的时长,来表达需在时间时序上返回的样本所处的时间范围

Part2 时间范围

时间范围: 当前时间为基准时间点,指向过去一个特定的时间长度

例如,[5m] 是指过去 5 分钟之内。

特性

1)可用的时间单位有 ms(毫秒)、s(秒)、m(分钟)、h(小时)、d(天)、w(周)和 y(年)

2)必须使用整数时间,且能够将多个不同级别的单位进行串联组合,以时间单位由大到小为顺序,例如 1h30m,但不能使用 1.5h

举个例子

在这里插入图片描述

2.3.3 偏移向量选择器

偏移修饰器紧跟在选择器后面,使用关键字 offset 来指定要偏移的量。

偏移向量选择器 通过 <指标名称>{<标签key1>=<值1>, ....} offset XX 表达式,得到时间序列在指定时间前的时间戳下的样本值

#举个例子
prometheus_http_requests_total offset 5m 

#表示获取以 prometheus_http_requests_total 为指标名称的所有时间序列在过去 5 分钟之时的即时样本;

在这里插入图片描述

偏移向量选择器 还可以通过 <指标名称>{<标签key1>=<值1>, ....}[XX] offset XX 表达式,得到时间序列在指定时间前的指定时间范围内的多个时间戳下的样本值。

#举个例子
prometheus_http_requests_total[5m] offset 1d
#表示获取距此刻 1 天时间之前的 5 分钟之内的所有样本

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1280604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python装饰器解析(关键点:高阶函数、嵌套函数)(参数化装饰器、类装饰器)

文章目录 Python装饰器解析什么是Python装饰器基础理解 如何创建装饰器&#xff08;关键点&#xff1a;高阶函数、嵌套函数&#xff09;创建基础装饰器 使用装饰器使用示例 装饰器的返回值参数化装饰器创建参数化装饰器语法示例使用示例 类装饰器创建类装饰器语法示例使用示例 …

使用postman请求x5接口

x5接口简介 1.接口样例 {"header"{"appid":"bpmnew_fanwei","sign":"C033162E86E4CADE80C7EB44D68A5AD2","sign_type":"md5","url":"https://oa.mioffice.cn/api/bpm/xm/app/show/tod…

MySQL索引优化实战二

分页查询优化 很多时候我们业务中实现分页功能时可能会用如下SQL来实现&#xff1a; select * from employees LIMIT 10000,10表示从表中中区从10001行开始的10行记录&#xff0c;看似只查了10条记录&#xff0c;但是这条SQL是先读取10010条记录&#xff0c;然后抛弃前10000条…

【个人笔记】-python-强化学习-类-在内存中的值

{int} 数值 {int} 200 {float} 数值 {float} 0.9 {narray:维度} 数值 {narray:(1,)} [2.] {bool} True {bool} False {类名} 对象1 {类名} 对象2

LLM 开发模式 RAG,MRKL,Re-Act,Plan-Execute 模式对比

本心、输入输出、结果 文章目录 LLM 开发模式 RAG&#xff0c;MRKL&#xff0c;Re-Act&#xff0c;Plan-Execute 模式对比前言RAG、MRKL、Re-Act和Plan-Execute模式的一些对比花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 LLM 开发模式 RAG&#xff0c;MRKL&…

MySQL进阶_EXPLAIN重点字段解析

文章目录 第一节.准备1.1 版本信息1.2 准备 第二节.type2.1 system2.2 const2.3 eq_ref2.4 ref2.5 ref_or_null2.6 index_merge2.7 unique_subquery2.8 range2.9 index2.10 all 第三节. Extra3.1 No tables used3.2 No tables used3.3 Using where3.4 No matching min/max row3…

基于springboot实现的垃圾分类管理系统

一、系统架构 前端&#xff1a;html | layer | jquery | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、 代码及数据库 三、功能介绍 01. 登录页 02. 系统设置-用户管理 03. 系统设置-页面管理 04. 系统设置-角色管…

Python练习题(二)

&#x1f4d1;前言 本文主要是【Python】——Python练习题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

三极管在数字电路中的应用

一、认识三极管 三极管拥有3个引脚&#xff0c;分别对应3个级&#xff1a;基极(Base)、发射极&#xff08;Emitter&#xff09;、集电极(Collector)&#xff0c;如下图所示&#xff1b;下图横向左侧的是基极&#xff0c;带箭头的那个引脚就是发射极&#xff0c;另一个就是集电…

ElementPlus中 使用ElLoading.service, spinner: ‘el-icon-loading‘不生效

let downloadLoadingInstance ElLoading.service({ text: "正在下载数据&#xff0c;请稍候",spinner: el-icon-loading, background: "rgba(0, 0, 0, 0.7)", })使用以上代码时&#xff0c;加载的圆圈出不来&#xff0c;使用f12查看&#xff0c;即使能出…

代理模式介绍(静态代理、jdk动态代理、cglib代理)

一、静态代理 &#xff08;一&#xff09;定义 1、定义 为其他对象提供一种代理以控制对这个对象的访问&#xff1b; 2、涉及到的角色 &#xff08;1&#xff09;抽象主题角色&#xff1a;真实主题和代理主题的共同接口&#xff0c;便于在使用真实主题的地方都可以使用代理…

blue beacon rssi 指纹室内定位数据集

数据集是开展实验的基础&#xff0c;搜集并分享。如果你有关于室内定位的问题&#xff0c;请联系博主。 namedatesetpapercommentBLEBeacon: A Real-Subject Trial Dataset from Mobile Bluetooth Low Energy Beaconshttps://github.com/dimisik/BLEBeacon-Datasethttps://arxi…

React18 入门与进阶

React18 入门与进阶 前言一、核心概念与类组件使用1、虚拟DOM与新的渲染写法2、JSX 与 JSX 的使用3、类组件和函数组件4、类组件与类组件通信5、props详解与注意事项6、类组件中事件的使用7、类组件响应式数据实现与原理8、PureComponent 与 shouldComponentUpdate9、immutable…

Kubernetes(K8s)_15_CNI

Kubernetes&#xff08;K8s&#xff09;_15_CNI CNI网络模型UnderlayMAC VLANIP VLANDirect Route OverlayVXLAN CNI插件FlannelCalico CNI配置内置实现 CNI CNI(Container Network Interface): 实现容器网络连接的规范 Kubernetes将网络通信可分为: Pod内容器、Pod、Pod与Se…

YOLOv7+姿态估计Pose+tensort部署加速

YOLOv7-Pose YOLOv7是一种高效的目标检测算法&#xff0c;用于实时物体检测。姿态估计Pose是一种用于识别和跟踪人体关键点的技术。TensorRT是一个针对深度学习推理任务进行加速的高性能推理引擎。 将YOLOv7和姿态估计Pose与TensorRT结合可以实现快速而准确的目标检测和姿态估…

Element UI 实战:跨页保存表格选中状态与判断状态可选性的高效方案

引言 在前文中&#xff0c;我们曾深入探讨了在修改数据后跨页时提醒用户可能丢失数据的问题。虽然这种方式对于一些场景是足够的&#xff0c;但当涉及选择框时&#xff0c;我们需要更为智能和高效的解决方案。在本文中&#xff0c;我们将分享一种基于 Element UI 的实际案例&am…

opencv学习二:加载显示图片

文章目录 加载显示图片&#xff08;一&#xff09;函数1.imread()读取图片&#xff08;1&#xff09;matplotlib和opencv中imread函数的区别 加载显示图片 &#xff08;一&#xff09;函数 1.imread()读取图片 Mat imread(const string& filename, int flags1 );第一个参…

ASP.NET-BS结构的城市酒店入住信息管理系统的设计

2 理论基础 2.1 数据库技术 数据库技术应用中&#xff0c;经常用到的基本概念有&#xff1a;数据库&#xff08;DB&#xff09;、数据库管理系统&#xff08;DBMS&#xff09;、数据库系统&#xff08;DBS&#xff09;、数据库技术及数据模型。 数据库技术是研究数据库的结构、…

【Linux服务器Java环境搭建】04 JDK安装(JAVA环境安装)

【Linux服务器Java环境搭建】01购买云服务器以及在服务器中安装Linux系统 【Linux服务器Java环境搭建】02 通过xftp和xshell远程连接云服务器 【Linux服务器Java环境搭建】03 Git工具安装 【Linux服务器Java环境搭建】04 JDK安装&#xff08;JAVA环境安装&#xff09; 【Linux服…

【Linux服务器Java环境搭建】02 通过xftp和xshell远程连接云服务器

【Linux服务器Java环境搭建】01购买云服务器以及在服务器中安装Linux系统 【Linux服务器Java环境搭建】02 通过xftp和xshell远程连接云服务器 【Linux服务器Java环境搭建】03 Git工具安装 【Linux服务器Java环境搭建】04 JDK安装&#xff08;JAVA环境安装&#xff09; 【Linux服…