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通常固定的格式为:

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

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

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

node_cpu_seconds_total{mode='idle'}   和

{__name__="node_cpu_seconds_total",mode='idle'}

是一样的!!!!

前面也说明了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} ,如:

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

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

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

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

2.2、范围查询

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

pushgateway_http_requests_total{instance=~"pushgateway",method='get'}[1m]

将会返回这1分钟内的所有统计数据,除了用m表示分钟,还可以用s-秒,h-小时,d-天,w-周,y-年

2.3、时间位移查询

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

# 统计昨天一天的pushgateway中包含get请求的总请求数

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

2.4、聚合查询

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

# 查询昨天1天内pushgeteway中get的请求总量之和
sum(pushgateway_http_requests_total{instance=~"pushgateway",method='get'} offset 1d) # 按照mode计算主机CPU的平均使用时间
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. LOJ2687 BOI2013Vim 题解

    题目链接 这里只写个摘要,具体的可以看 神仙Itst的博客 大概是每相邻两个位置之间的线段要么被覆盖一次,要么被覆盖三次,然后DP,如下图: 代码: #include<bits/stdc++.h ...

  2. 日志篇 貌似win10有个磁盘bug,非常非常严重... 硬盘解密之后无法访问,参数错误 BitLocker解密

    程序员就是要穷尽一切猜想... 我的加密的硬盘解密后无法访问了,我从一年前就遇到了,现在又突然出现了..... 然后找到一个人回答,他这个回答能从形式上解决,点我去原帖 用cmd管理员模式,执行,I要 ...

  3. selenium爬虫入门(selenium+Java+chrome)

    selenium是一个开源的测试化框架,可以直接在浏览器中运行,就像用户直接操作浏览器一样,十分方便.它支持主流的浏览器:chrome,Firefox,IE等,同时它可以使用Java,python,J ...

  4. docker 学习操作记录 5

    记录5 * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/ ...

  5. @Value注解无法为static 变量赋值

    使用@Value给静态变量赋值时,出现空指针异常.经了解Spring 不允许/不支持把值注入到静态变量中.所以需要另一种方式为该变量赋值. 需要注意set方法也不要加static修饰符!

  6. GTD时间管理

    GTD就是Getting Things Done的缩写,翻译过来就是"把事情处理完",是一个管理时间的方法.GTD的核心理念概括就是必须记录下来要做的事,然后整理安排并使自己一一去 ...

  7. N x N 的矩阵,顺时针旋转

    第一种方法: 先打印外圈,再打印内圈 public class RotateMatrix1 { public static void rotate(int[][] matrix) { ; ; ; ]. ...

  8. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  9. [转帖]Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案

    Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案 https://www.cnblogs.com/xlecho/p/11834011.html echo编辑整理,欢迎转载,转 ...

  10. Java计算工作日的工具类

    有时候需要根据工作日计算指定的日期,也就是需要排除周六日. 1.  初版代码如下: package cn.xm.exam.utils; import java.util.Calendar; impor ...