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

文章目录

  • 一、前言
    • 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         28prometheus_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.mzph.cn/news/194236.shtml

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

相关文章

vue 前端实现login页登陆 验证码

实现效果 // template <el-form :model"loginForm" :rules"fieldRules" ref"loginForm" label-position"left" label-width"0px" class"login-container"><span class"tool-bar"></sp…

【动态规划】LeetCode-面试题 17.16. 按摩师

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

软件工程单选多选补充

2. 4. 5. 6. 7. 8. 9. 10. 12。 13.

〖大前端 - 基础入门三大核心之JS篇㊻〗- JS + CSS实现动画

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

MDETR 论文翻译及理解

题目Abstract1. Introduction2. Method2.1. Background2.2. MDETR2.2.1 Architecture2.2.2 Training 3. Experiments3.1. Pre-training Modulated Detection 预训练调制检测3.2. Downstream Tasks3.2.1 Few-shot transfer for long-tailed detection 4. Related work5. Conclus…

微机原理——定时器8253(8254)学习1

目录 定时类型 8253内部结构框图 8253命令字 六种工作方式及输出波形 计数初值的计算与装入 8253的初始化 定时类型 可编程定时器8253&#xff1a;&#xff08;内部采用的是16位 减法计数器&#xff09; 8253内部结构框图 8253命令字 8253有三个命令字&#xff1a;方式命…

HGNN+笔记

1.Title HGNN: General Hypergraph Neural Networks&#xff08;Yue Gao; Yifan Feng; Shuyi Ji; Rongrong Ji&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2023】 2.Conclusion This paper extend the original conference version HGNN,…

大数据-hive

简介 hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能将SQL…

C语言练习题

C语言练习题 文章目录 C语言练习题题目一题目二题目三题目四题目五题目六题目八 题目一 #include <stdio.h> //VS2022,默认对齐数为8字节 union Un {short s[7];int n; };int main() {printf("%zd", sizeof(union Un));return 0; }代码运行结果:> 16 sizeo…

基于Springboot + vue的汽车资讯网站

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

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

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

【Openstack Train安装】一、虚拟机创建

Openstack是一个云平台管理的项目&#xff0c;它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。Openstack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者&#xff0c;这些机构与个人将 Openstack作为…

使用AOS实现网页动画效果

在现代Web开发中&#xff0c;动画效果是提升用户体验和页面交互性的重要因素之一。而AOS&#xff08;Animate On Scroll&#xff09;作为一个强大的动画库&#xff0c;可以帮助我们轻松地实现网页元素的滚动动画效果。 什么是AOS&#xff1f; AOS是一个基于CSS3和JavaScript的…

Transformer

目录 Encoder Add&Norm:&#xff08;LayerNorm&#xff09;Transformer中的归一化(五)&#xff1a;Layer Norm的原理和实现 & 为什么Transformer要用LayerNorm - 知乎 (zhihu.com) LayerNorm怎么做的&#xff1f; Feed Forward: FeedForward代码&#xff1a; 公式…

Android 12 及以上授权精确位置和模糊位置

请求位置信息权限 为了保护用户隐私&#xff0c;使用位置信息服务的应用必须请求位置权限。 请求位置权限时&#xff0c;请遵循与请求任何其他运行时权限相同的最佳做法。请求位置权限时的一个重要区别在于&#xff0c;系统中包含与位置相关的多项权限。具体请求哪项权限以及…

栈和队列的OJ题——14.用栈实现队列

14.用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 此题可以用两个栈实现&#xff0c;一个栈进行入队操作&#xff0c;另一个栈进行出队操作 出队操作&#xff1a; 当出队的栈不为空是&#xff0c;直接进行出栈操作&#xff…

算法通关村第七关—迭代实现二叉树的遍历(黄金)

迭代实现二叉树的遍历 迭代法实现前序遍历 前序遍历是中左右&#xff0c;如果还有左子树就一直向下找。完了之后再返回从最底层逐步向上向右找。不难写出如下代码&#xff1a;&#xff08;注意代码中&#xff0c;空节点不入栈&#xff09; public List<Integer>preorde…

VSCode 中将头文件和头文件函数分离,编译主函数跳出 undefined reference to 的问题解决

VSCode 编写 C &#xff08;.h&#xff0c;.cpp 文件分离&#xff09;代码&#xff0c;编写完成后&#xff0c;编译遇到了编译错误 undefined reference to xxx。 开始还以为使用了 -stdc20 而不能使用 #include “xxx.h" 方式头文件&#xff0c;但仔细一想虽然引入了 im…

基于YOLOv7算法的的高精度实时通用目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时检测识别系统可用于日常生活中检测与定位多种目标&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练数据集…

OpenHarmony 应用(HarmonyOS 原生应用)- 写一个 Hello World 并在华为手机上跑起来

OpenHarmony 简介 ArkUI 开发框架 OpenHarmony 提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI 框架&#xff09;。 两种开发范式 支持两种开发范式&#xff0c;分别是基于ArkTS的声明式开发范式&#xff08;简称“声明式开发范式”&#xff09;和兼容J…