1、什么是PromQL???

PromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中。前面的笔记当中有说道我们通过exporter采集到的数据是以时间序列(time-series)的方式保存在内存数据库中,并定时保存到硬盘。time-series是一个按照时间戳和值的顺序存放,可以说是一种矢量值。

什么是矢量值???就是已知x轴和y轴,得出x和y交叉点的那个值就是矢量值,而这里的time-series就是这样的一个值,每条time-series通过指标名称(metrics name)和一组标签(labels)命名,比如前面的node_memory_MemFree_bytes{instance="node02",job="node02"},"node_memory_MemFree_bytes"为指标名称,{ }内的为标签集合。

metrics通常固定的格式为:

  1. <metric name>{<label name>=<label value>, ...}

指标名称只能由ASCII字符、数字、下划线以及冒号组成并必须符合正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*

其中以__作为前缀的标签,是系统保留的关键字,只能在系统内部使用。标签的值则可以包含任何Unicode编码的字符。在Prometheus的底层实现中指标名称实际上是以__name__=的形式保存在数据库中的,因此以下两种方式均表示的同一条time-series:

  1. node_cpu_seconds_total{mode='idle'}
  2. {__name__="node_cpu_seconds_total",mode='idle'}
  3. 是一样的!!!!

前面也说明了metrics的类型:

  • counter:递增计算器 --> 用于递增类的指标,如请求的总速率http_request_total,一般用_total作后缀。

  • gauge:可增可减仪表盘 --> 用于统计内存,硬盘的使用率,如node_memory_MemFree_bytes。

  • hitogram/summary:统计和分析样本分布情况 --> 通俗地说统计一段时间内的量化指标,比如cpu的平均使用率,页面响应等等。

2、如何查询???

2.1、监控指标名称查询

通过监控指标名称查询,也就是我们上面metrics的名称,而通过指标名称查询又可以分为完全匹配和正则匹配查询。

完全匹配查询,即 metrics_name{xxx=ooo 或 metrics_name{xxx!=ooo} ,如:

  1. # 如下查询了cpu的空闲和非空闲时的使用时间
  2. node_cpu_seconds_total{mode='idle'} node_cpu_seconds_total{mode!='idle'}

正则匹配查询,即 metrics_name{xxx=~"ooo"} 或 metrics_name{xxx=~"ooo",zzz!=777}

  1. pushgateway_http_requests_total{instance=~"pushgateway",method='get'}

  2. pushgateway_http_requests_total{instance=~"pushgateway",method!='get'}

2.2、范围查询

直接通过监控名称进行查询时间序列,直接返回的是一个瞬时矢量值,当我们需要获取一个时段的样本数据时,则需要使用区间矢量表达式,和瞬时矢量值的区别在于区间矢量值可以进行自定义查询的时间范围,比如统计5分钟内的数据,那么久可以通过时间范围选择器"[ ]"进行自定义。如:

  1. pushgateway_http_requests_total{instance=~"pushgateway",method='get'}[1m]
  2. 将会返回这1分钟内的所有统计数据,除了用m表示分钟,还可以用s-秒,h-小时,d-天,w-周,y-年

2.3、时间位移查询

使用时间范围查询,也只是以当前时间作为基准去进行统计,如果要统计昨天1天的统计数据时,就需要用到时间位移(offset),如下:

  1. # 统计昨天一天的pushgateway中包含get请求的总请求数
  2. pushgateway_http_requests_total{instance=~"pushgateway",method='get'} offset 1d

2.4、聚合查询

一般来说,如果描述样本特征的标签(label)在并非唯一的情况下,通过PromQL查询数据,会返回多条满足这些特征维度的时间序列。而PromQL提供的聚合操作可以用来对这些时间序列进行处理,形成一条新的时间序列:

  1. # 查询昨天1天内pushgeteway中get的请求总量之和
  2. sum(pushgateway_http_requests_total{instance=~"pushgateway",method='get'} offset 1d)
  3. # 按照mode计算主机CPU的平均使用时间
  4. avg(node_cpu_seconds_total)by(mode)

Prometheus学习笔记(7)PromQL玩法入门的更多相关文章

  1. jQuery学习笔记(一):入门

      jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操 ...

  2. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言     去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...

  3. canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)

    [下篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  4. canvas学习笔记(中篇) -- canvas入门教程-- 颜色/透明度/渐变色/线宽/线条样式/虚线/文本/阴影/图片/像素处理

    [中篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  5. canvas学习笔记(上篇)-- canvas入门教程 -- canvas标签/方块/描边/路径/圆形/曲线

    [上篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  6. C#线程学习笔记九:async & await入门二

    一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...

  7. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  8. Prometheus监控学习笔记之PromQL操作符

    0x00 二元运算符 Prometheus 的查询语言支持基本的逻辑运算和算术运算.对于两个瞬时向量, 匹配行为可以被改变. 算术二元运算符 在 Prometheus 系统中支持下面的二元算术运算符: ...

  9. Prometheus监控学习笔记之PromQL简单示例

    0x00 简单的时间序列选择 返回度量指标 http_requests_total 的所有时间序列样本数据: http_requests_total 返回度量指标名称为 http_requests_t ...

随机推荐

  1. Layui 常用知识

    原文:https://www.cnblogs.com/30go/p/11088549.html 后台框架:Layui Admin Iframe layui.form.render();

  2. 解决github release下载慢/下载失败的问题

    在使用github时,有时作者会在release中提供编译好的程序,以https://github.com/AkikoZ/alfred-web-search-suggest为例,是一个alfred3的 ...

  3. Spring注解和标签的比较说明

    待完善.... xml标签 注解 说明 xml的Spring约束头 @Configuration xml约束头表明这是用于spring的的配置文件 @Configuration注解表情这是用于Spri ...

  4. 生成随机验证码,上传图片文件,解析HTML

    1.生成随机图片验证码 1.1 页面调用createvalidatecode 生成随机图片验证码方法: <div class="inputLine"><label ...

  5. spark 读取 ftp

    class FtpShow(spark: SparkSession, map: Map[String, String]) { private val path = map(FtpOptions.PAT ...

  6. webstorm创建js文件时自动生成js注释

    设置webstorm创建js文件时自动生成js注释 settings--Editor--File and Code Temlates 黑色框框里的内容自己填写上去,以下是参考的代码块: /** * @ ...

  7. python项目文件夹

    项目的文件夹 conf 用于存放配置文件的文件夹 core 核心业务代码 .py interface 接口, 接口内写获取数据前的逻辑代码,通过后才能获取数据 db 目前我们用于存放文件信息的 lib ...

  8. unity延迟加载图片

    把加载图片所需要的信息封装成一个任务(自己写的类,包括路径,回调等信息),再将该任务添加到自己写的任务池中(在update中执行任务委托),由于只是添加任务操作,加载完成后自动调用回调函数实例化,对主 ...

  9. 关于mysql的null相关查询的一些坑

    我们先看一下效果,然后在解释,示例如下: mysql> create table test5 (a int not null,b int,c varchar(10)); Query OK, 0 ...

  10. 『正睿OI 2019SC Day8-Day17』

    于是就迎来\(10\)天的自闭考试了,每天写点小总结吧. Day8 第一天就很自闭啊,考题分别是数学题+建模题+图论. 前两道题都没有什么算法,但是难度还是有的,于是就做不太出来,特别是第一题.第二题 ...