首页 > 其他分享 >PromQL 实用语句

PromQL 实用语句

时间:2023-05-11 16:56:55浏览次数:33  
标签:语句 node seconds 样本 实用 PromQL 序列 total cpu

1、PromQL


Prometheus 通过指标名称(metrics name)以及对应的一组标签(label)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤、聚合、统计从而产生新的计算后的一条时间序列。

PromQL 是 Prometheus 内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在 Prometheus 的日常应用当中,包括对数据查询、可视化、告警处理。可以这么说,PromQL 是 Prometheus 所有应用场景的基础,理解和掌握 PromQL 是我们使用 Prometheus 必备的技能。

2、时间序列
前面我们通过 node-exporter 暴露的 metrics 服务,Prometheus 可以采集到当前主机所有监控指标的样本数据。例如:

# HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 6.62885731e+06
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 2.29
1
2
3
4
5
6
其中非 # 开头的每一行表示当前 node-exporter 采集到的一个监控样本:node_cpu_seconds_total 和 node_load1 表明了当前指标的名称、大括号中的标签则反映了当前样本的一些特征和维度、浮点数则是该监控样本的具体值。

Prometheus 会将所有采集到的样本数据以时间序列的方式保存在内存数据库中,并且定时保存到硬盘上。时间序列是按照时间戳和值的序列顺序存放的,我们称之为向量(vector),每条时间序列通过指标名称(metrics name)和一组标签集(labelset)命名。如下所示,可以将时间序列理解为一个以时间为 X 轴的数字矩阵:

^
│ . . . . . . . . . . . . . . . . . . . node_cpu_seconds_total{cpu="cpu0",mode="idle"}
│ . . . . . . . . . . . . . . . . . . . node_cpu_seconds_total{cpu="cpu0",mode="system"}
│ . . . . . . . . . . . . . . . . . . node_load1{}
│ . . . . . . . . . . . . . . . . . .
v
<------------------ 时间 ---------------->
1
2
3
4
5
6
7
在时间序列中的每一个点称为一个样本(sample),样本由以下三部分组成:

指标(metric):metric name 和描述当前样本特征的 labelsets
时间戳(timestamp):一个精确到毫秒的时间戳
样本值(value): 一个 float64 的浮点型数据表示当前样本的值
如下所示:

<--------------- metric ---------------------><-timestamp -><-value->
http_request_total{status="200", method="GET"}@1434417560938 => 94355
http_request_total{status="200", method="GET"}@1434417561287 => 94334

http_request_total{status="404", method="GET"}@1434417560938 => 38473
http_request_total{status="404", method="GET"}@1434417561287 => 38544

http_request_total{status="200", method="POST"}@1434417560938 => 4748
http_request_total{status="200", method="POST"}@1434417561287 => 4785
1
2
3
4
5
6
7
8
9
在形式上,所有的指标(Metric)都通过如下格式表示:

<metric name>{<label name> = <label value>, ...}
1
指标的名称(metric name)可以反映被监控样本的含义(比如,http_request_total - 表示当前系统接收到的 HTTP 请求总量)。指标名称只能由 ASCII 字符、数字、下划线以及冒号组成并必须符合正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。
标签(label)反映了当前样本的特征维度,通过这些维度 Prometheus 可以对样本数据进行过滤,聚合等。标签的名称只能由 ASCII 字符、数字以及下划线组成并满足正则表达式 [a-zA-Z_][a-zA-Z0-9_]*。
每个不同的 metric_name和 label 组合都称为时间序列,在 Prometheus 的表达式语言中,表达式或子表达式包括以下四种类型之一:

瞬时向量(Instant vector):一组时间序列,每个时间序列包含单个样本,它们共享相同的时间戳。也就是说,表达式的返回值中只会包含该时间序列中的最新的一个样本值。而相应的这样的表达式称之为瞬时向量表达式。
区间向量(Range vector):一组时间序列,每个时间序列包含一段时间范围内的样本数据,这些是通过将时间选择器附加到方括号中的瞬时向量(例如[5m]5分钟)而生成的。
标量(Scalar):一个简单的数字浮点值。
字符串(String):一个简单的字符串值。
所有这些指标都是 Prometheus 定期从 metrics 接口那里采集过来的。采集的间隔时间的设置由 prometheus.yaml 配置中的 scrape_interval 指定。最多抓取间隔为30秒,这意味着至少每30秒就会有一个带有新时间戳记录的新数据点,这个值可能会更改,也可能不会更改,但是每隔 scrape_interval 都会产生一个新的数据点。

标签:语句,node,seconds,样本,实用,PromQL,序列,total,cpu
From: https://www.cnblogs.com/gaoyanbing/p/17391579.html

相关文章

  • SQL语句的优化方法一
    现场工作过程中,在对一个SQL语句进行优化分析的时候,我们经常会用到HINT(提示),有时候会发现DBA在使用了HINT后,ORACLE的性能有了明显提高,它主要是通过嵌入到SQL语句里来完成的,现总结一下在SQL语句优化过程中常见OracleHINT的用法:1./*+ALL_ROWS*/表明对语句块选择基于开销的优化方......
  • 保姆级别的 PromQL 教程
    这篇文章介绍如何使用PromQL查询Prometheus里面的数据。包括如何使用函数,理解这些函数,Metrics的逻辑等等,因为看了很多教程试图学习PromQL,发现这些教程都直说有哪些函数、语法是什么,看完之后还是很难理解。比如[1m]是什么意思?为什么有的函数需要有的函数不需要?它对Grafana......
  • 详解一条SQL语句在MySQL架构中的执行过程
    详解一条SQL语句在MySQL架构中的执行过程时代Java 2023-05-0907:40 发表于北京↑ 点击上面 “时代Java”关注我们,关注新技术,学习新知识! 1.单表查询SQL在MySQL架构中的各个组件的执行过程先简单用一张图说明下,MySQL架构有哪些组件,接下来给大家用SQL语句分析假......
  • SQL语句性能优化
    1,对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。 2,应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应该使用NOTNULL,或者使用一个特殊的值,如0,-1作为默认值。 3,应尽量避免在where子句中使用!=......
  • mysql语句性能优化(一)
    1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引2、应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应该使用NOTNULL,或者使用一个特殊的值,如0,-1作为默认值3、应尽量避免在where子句中使用!=或<>......
  • 用sql语句实现sqlserver不同库间表相互同步
    同步表的方式有很多种因为不想太过于麻烦所以就用存储过程来实现某些表同步createproccopytbaleas--表名declare@namenvarchar(50)--创建表declare@createtablenvarchar(200)--删除表declare@deletetablenvarchar(200)--定义游标declaretabnameCURSORF......
  • 退出循环语句
    退出循环语句#案例1while1:name=input("用户名:")pwd=input("密码:")ifname="rain"andpwd=="123"print("登录成功!")breakelse:print("登录失败")print(&q......
  • Conda实用命令
    虚拟环境配置1.新建虚拟环境condacreate—nameenvNamepython=3.x名为envName的虚拟环境,基于python3.x新创建的环境中多建几个包:condacreate-nenvNamepython=3.xnumpypandas2.切换和退出conda虚拟环境#切换conda环境condaactivateenvName#退出conda环境co......
  • 如何进行MySQL源码调试(一条select语句的执行流程)
    一、背景MySQL是当今世上最受欢迎的使用最广泛的开源数据库,它的繁荣离不开它的开源特性。放在过去商业数据库的时代,大家都没有机会接触到数据库的源代码,但在如今开源数据库的时代,越来越多的人开始研究数据库的源码,并给社区贡献代码,MySQL官方每次发布新版本都要感谢一些在社区上贡......
  • KingbaseES V8R6 Deallocate 语句使用说明
    用途DEALLOCATE被用来释放一个之前PREPARE好的SQL语句。如果不显式地释放一个PREPARE语句,那么会话结束时会释放它。prepare语句类似oracle的绑定变量绑定过程:1)PREPARE,准备绑定变量SQL2)EXECUTE,绑定并执行3)DEALLOCATE,释放绑定变量测试1.只有本地会话可以看的prepare语句......