PromQL 使用基础|学习笔记(一)

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 快速学习 PromQL 使用基础

开发者学堂课程3天吃透 PrometheusPromQL 使用基础学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1244/detail/18447


PromQL 使用基础

 

内容介绍:

一、对抓取到的 metric 重新打标

二、Prometheus 相关知识及 PromQL 简介

三、PromQL 的数据类型及匹配器

四、PromQL 指标类型

 

一、对抓取到的 metric 重新打标

对于重新打标这个话题,我们已经结束relabel configure,其还剩一个叫做 metric relabel configure,它的执行逻辑和刚才我们所讲 reliable config 大致相同,所不同的地方仅在于它实现的是对抓取到的 metric 进行重新打标,而不是对target,是我们在这展示的各个 target 进行打标。而对 target 打标,各位发现是直接反映在这。

对于 metric 的打标,很可能是我们自己使用qlprometheus的查询语言,在查询时,你所能够获得的时间序列可能就会有所不同。同样的逻辑,我们可以删除指标,可以修改指标名称,可以修改或者创建新的指标标签,并给它赋予一个值。这些操作和在 target 上的指标操作是一样的,操作语法也相同。所以我这儿仅给各位看一个简单的示例就结束。

这里为 metric relabel示例之删除指标。比如某个指标我不想要怎么办?方法很简单,比如下面实例就用于在相应的 job ,在发现各 target 之上删除以 go in for 为名称前缀的指标,他的做法是对每一个指标而言也有一个叫做系统标签,叫做—name--。注意,这里直接保存有指标名,所以我们要想删除指标,匹配起来就不用匹配指标的标签,直接使用这个名称。

使用正则表达式 go in for .*。明白这个表是匹配所有 go info 开头的指标名 action drop匹配到的就删除。它能够试图用正则表达式过滤这一组 target 之上的每一个 target 上的这一类的指标名称,很简单的一个示例,也没有其他更复杂的地方。所以,它的使用逻辑跟前面 relabel config 相同。于是这个话题刚才未进的地方,我这里补充。

示例:

job_name:'nodes'  

file_sd_configs:

- files:

- targets/prometheus/node*.yaml

metric_relabel_configs:

- source labels:

- name regex: "go_info.*"  

action: drop

二、Prometheus 相关知识及 PromQL 简介

1. prometheus 时间序列

接下来我们就是我们的 PromQL。我们说过,使用 prometheus 最为关键的地方所在就是操作 prometheus 的时间序列。

image.png 

如图,它基本上代表我们 prometheus 保存时间序列的结果。假如这是prometheus 的存储,我们可以想象,当然,它存储时并不是这么存,我们来想象每一行代表一个序列,每一列代表我们时间流逝的时间点。假如这是方向,这是纵轴,等于是对于第一个来说,它的时间序列大概有这么多个样本值。

这是第二个,其实我们曾经解释过,这会形成一个矩阵,一个matrics,而在矩阵上,每一个序列它的标示符,我们为了引用序列里边的值,你需要可以标示哪个序列在识别每个序列。而每一个序列刚才解释过,都是以指标名加特定于指标序时间序列的标签来定义。所以看同一个指标名 request total,它对应于不同的标签 pass method ,代表着不同的序列。所以大家一定要记得同一名称下标签不同,分别代表不同的序列,而后每一个序列我们也可以称为一个向量,将多个序列放在同一个坐标系内,就形成一个矩阵。这种 prometheus 的时间序列我们怎么去理解它?

就来看看 PromQL。PromQL 其就是我们让我们去表达如何从这样一个矩阵当中筛选出我们所感兴趣的数据的。前面给大家或多或少提到什么叫感兴趣的数据。比如我们想找这么 3个指标最新的样本,这是一种方式,或者找这几个指标最新的样本。这其实就是表示我们叫挑感兴趣的。你可以纵着挑,也可以横着挑。比如我们去找这一个序列这个范围内的值,或者是这两个序列范围内的这三个序列这个范围内的值都可以。这就是我们要写的 PromQL 要达到的目的。我们不仅要将这些值挑选出,我们通常可能还要对挑出来的结果进行做计算。前面应该演示过如做算术运算、比较运算、逻辑运算等。因而我们可以认为PromQL 它其就是在矩阵当中查询出我们所感兴趣的样本值,并且在这个基础之上并做一些运算,得到我们所期望的结果的一种表达式。

2.promQL 简介

prometheus基于指标名称及其附属的标签,唯一定义一条时间序列,各位应该能理解。所以从某种意义上来讲,指标名称代表着监控目标上某类可测量属性的基本特征标识,而标签则是基本特征之上再次划分的多个可测量维度。现在各位应该有一个应该能有一个更加深入一点的理解。

而基于PromQL表达式,用户可以针对指定的特征即指标名,这叫指定的特征及其细分维度,就表示我们需要指定标签,进行过滤、聚合、统计等运算,并从而产生所期望的计算结果。其实从某种意义上来讲,有一定的分析的意义在里数据分析更好。

而 PromQL 是 Prometheus server 内置的数据查询语言,它有内建的这样一个 PromQL 引擎,我们将使用表达式来表达查询需求。表达式什么是表达式?我相信对各位来讲应该不难理解,我们学过 shell 脚本编程,应该也知道什么叫表达式。根据其使用的指标和标签以及时间范围,表达式的查询请求可以灵活的覆盖一个或多个时间序列的一定时间范围的样本之上,甚至是只包含单个序列的单个样本。刚才给大家描述过,你可以使用表达式,比如只获取单个系列的单个样本,甚至都可以,单个序列的一定范围内的样本也行。但对我们而言,默认获取或者大多数情况,我们期望获取的应该都是这样,都是以及时,当下这个时间为基准点进入概念。所以我们所获取的即时向量,或者我们每指定时间的时候,大多都是指最新的样本,或者是如果我们讲过它的数据类型有两种,一个叫即时向量,一个叫范围向量。即时向量就是时间序列上的最新样本值。范围向量以当前时间为基准,时间点往前延。一个时间延多长时间,我们可以指定时长,比如 5 分钟, 10 分钟, 20 分钟之类,按我们自己的需要来进行定义。各位应明白,时间长度不同,其内部的样本数量不同,就算时间长度相同,其内部的样本数量也未必相同。因为大家知道抓取周期可能会有不一样,有的 15 秒抓一次,有的 30 秒抓一次,这种可能性是存在的,只不过默认我们在配置文件中可以写上都是 15 秒或者 1 分钟之类。

3. prometheus 数据模型

我们说 Prometheus 的每个时间序列都有指标名称。这概念我们又重复一遍,希望重复这么多遍各位能记住。因为这是最基本的概念和标签。标识格式为 “{< label name>= ,┅}”,指标名称,例如http_requests_ total 就表示接收到的http请求的总数,这是某个基本特征。而指标名只能使用字母数字下划线和冒号,这可以使用冒号,而且必须能匹配RE2。RE 叫 a regular expression 的正则表达式,规范的正则表达式2,你可以搜RE2代表什么?给我学个 awk side 的vm 正则表达式已经被正则表达式蹂躏过多少遍。所以应该能够很清楚的理解正则表达到底是什么。

标签都是键值型数据,附加在指标名称之后,从而指标能够支持更多维度的特征。但是它们是可选项,指的是你不给做表达式来挑选的时候,是指标下的所有时间序列,所以指的是这个意思。可选项,比如像 http_request _total {method= GET} 和 {method =POST},就代表两个不同的时间序列。因为一个统计的是 get 这个方法的所有请求数,一个代表的是 pose 这个方法的所有请求数量,他们分别进行统计。所以我们说它代表两个不同的时间序列。因而再回头理解,标签是用来描述多维度特征的。这个意思,标签名可以使用字母数字下划线,且必须能匹配RE2 规范的正则表达式一样的。而以双下划线为前缀的名称,在 Prometheus 中是系统预留使用的。我们一般不要自己随便用这种标签。而且我们说过这种标签。以 target 为例,以 metric 为例,一旦重新标记完是不是都删掉了?所以尽量不要使用这种标签。 但是 metric 对指标名而言,它的表示方式有两种。其实刚才在讲到 metric 删除特定指标时候,第一指标名标签。我们可以把指标名当做是一个标签。我们所有的表达式都写在括号中。我们用使用__ name__ 来引用来判定标签名。在这来指定标签,意思就是指标下的拥有这两个标签的时间序列,一样的逻辑。但后边这种方式 http_request _total 更强大,因为我们可以对这个名称做什么,对第一种方式而言,我们只能通过变化后面的标签的判定条件来获取这一个指标下的多个不同的时间序列来过滤。但是这种方式甚至可以对指标名做表达式模式匹配,或者对其他更高级的匹配方式,我可以获取到多个指标名下的多个时间序列。

4.样本数据的格式

我们讲过,当我们指定Prometheus 实现数据拉取后,它的每一个样本数据都是单独存放的。我们它并不表示跟其他样本之间有什么关系。因此在其内部,每一个样本数据内部都是 k v 数据,注意每一个样本都是 KV 型的数据。

image.png

k 是什么?这是他的k,这是它的v。 k 就是指标名加标签,所代表的什么,时间序列标示并带上时间戳,是在哪个时间点采集的,这个时间戳意思就是指标序列或者时间序列在这个时间点采集的样本,所以这整个的被当作是k,这后面这是采集的样本值,叫value。所以每一个样本数据,每一个样本应该或者叫做采样。后来的结果都保存为 k v 格式。 k 是整个的 v 这么长,只不过对于我们的 k 而言,我们可以再分开来理解。我们讲这叫指标名,这叫标签,这叫时间戳。因此我们过滤时,就相当于在这里边把每一个时间点拿来进行分析,看看它对应的 k 是不是符合你的条件,符合条件就把它的样本值拿出,这叫样本数据格式。其中这是 float 64 双精度浮点型的数据,而后毫秒精度的时间戳,这精确的毫秒,这就意味着同一个即便是看上去所谓是同一个时间点采集的数据,大家不一定是对齐的,可能会有那么一点点漂移和偏差。

5.指标名及标签的使用注意事项

首先,指标名和标签的特定组合代表时间序列,所以指标名相同,但标签不同,分别代表不同的时间序列。接着,不同指标名称自然代表不同的时间序列。而 prom q l 支持基于定义的指标维度进行过滤和聚合。所以你一定要记得更改

任何标签池,包括添加或删除标签,都会创建新的时间序列。因为标签是它的唯一标示,或者叫标签加指标名的组合是它的唯一标示。所以我们在使用的时候应该尽可能保持标签的稳定性,否则很有可能会创建新的时间序列。而且可能会生成动态时间序列。比如你的标签值,标签不变,标签值来回变,你每一次的值变化都会生成不同的新的时间序列的。所以你标签只是动态生成就麻烦,就生成这种结果了。这样子最恶劣的结果就会生成一个动态的数据环境,并使得监控数据源难以跟踪,从而导致建立的该指标上的图形无效。因为你的每一个图形都是针对于特定的时间序列来完成的。你时间序列加个标签变一次,加个标签变一次它无法追踪,告警也没法追踪因为告警也是通过表达式来获取的技术规则也是通过表达式来获取的。所以一定要记得要尽可能保持时间序列标签的稳定性。就算重写,大家知道我们刚才可以重写它的标签,重写没问题但重写完以后不要反复重写,我们重写一两次是没有问题的。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
Prometheus 监控 Cloud Native
Prometheus PromQL语法
Prometheus PromQL语法
382 0
|
30天前
|
监控
PromQL常见的使用场景
【10月更文挑战第14天】PromQL 的核心价值体现在时序数据的筛选与计算上。面对海量时序数据,PromQL 通过查询选择器实现高效过滤,满足特定监控图表渲染或告警规则处理的需求。
|
3月前
|
存储 Prometheus Cloud Native
prometheus学习笔记之PromQL
prometheus学习笔记之PromQL
|
3月前
|
Prometheus 监控 Cloud Native
Prometheus 查询语言(PromQL):深入解析
【8月更文第29天】Prometheus 是一款开源的监控系统和时间序列数据库,广泛应用于各种系统的监控和告警。PromQL(Prometheus Query Language)是 Prometheus 用来查询和聚合时间序列数据的一种强大语言。本文将详细介绍 PromQL 的功能和语法,包括基本查询、向量操作、聚合函数等,并提供具体的代码示例。
408 2
|
3月前
|
存储 Prometheus 监控
PromQL 快速入门:理解基本查询语法
【8月更文第29天】PromQL (Prometheus Query Language) 是 Prometheus 监控系统中用于查询和聚合时间序列数据的一种表达式语言。PromQL 具有丰富的语法和功能,可以轻松地从 Prometheus 存储的数据中提取有用的信息。本文将介绍 PromQL 的基础知识,包括如何构造简单的查询语句,并通过代码示例来演示这些概念。
143 0
|
3月前
|
Prometheus Cloud Native Go
解析Prometheus PromQL
解析Prometheus PromQL
47 1
|
6月前
|
SQL 编解码 Prometheus
「译文」剖析 PromQL 查询
「译文」剖析 PromQL 查询
|
6月前
|
Prometheus Cloud Native
「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标
「译文」如何使用 PromQL join 来更有效地查询大规模的 Prometheus 指标
|
6月前
|
存储 Prometheus Cloud Native
「译文」Prometheus 查询语言 PromQL 简介
「译文」Prometheus 查询语言 PromQL 简介
|
SQL 数据采集 Prometheus
PromQL计算原理详解
## 背景 PromQL是Prometheus项目针对时序场景提供的一种查询语言,而PromQL的设计与常规意义上的SQL语句区别较大,其执行引擎的计算逻辑同样也大相径庭。在日常的客服解答中,发现较多客户对PromQL的执行原理有误解,故整理此篇文章对PromQL的原理与执行逻辑进行详细介绍。 ## 对时序的认识 时序场景下的观测对象是 “Metric”,例如这项表示“进程的常驻内存使用量
1429 2