首页 > 其他分享 >Prometheus PromQL

Prometheus PromQL

时间:2022-12-26 12:44:33浏览次数:48  
标签:样本 查询 Prometheus PromQL 时间 序列 数据

一.概述

  Prometheus提供了一种功能强大的表达式语言PromQL(Prometheus Query Language)。PromQL允许用户实时选择和汇聚时间序列数据,是Prometheus自已开发的数据查询DSL语言,使用这个查询语言能够进行各种聚合、分析和计算。

  时序数据库(Time Series Database, TSDB)用于保存时间序列(按时间顺序变化)的海量数据,是一种高性能、低成本、稳定可靠的专业化数据库。它可以提供高效的读写、高压缩比低成本存储、降精度、插值、多维聚合计算和查询功能,解决由于设备采集点数据量巨大、数据采集频率高而造成的存储成本高、写入和查询分析低的问题。

  时间序列数据的特别如下:

    1)数据写入特点------写入平稳,持续,高并发高吞吐,写多读少,在写操作上时序数据能达到95%以上;无更新,实时写入最近生成的数据。

    2)数据查询特点------按时间范围读取一段时间的数据; 对最近生成的数据读取概率高,对历史数据查询概率低;按照数据点的不同密集实现多精度查询。

    3)数据存储特点-----数据存储量比较大;具有时效性,数据通常会有一个保存周期;多精度数据存储。 

  对时序数据库的基本要求如下:

    1)能够支撑高并发,高吞吐的写入。

    2)交互级的聚合查询,能够达到低查询延迟。

    3)依据场景设计可以支撑海量数据存储。

    4)在线应用服务场景中,需要高可用架构支撑。

 

二.数据模型和数据类型

  Prometheus与其它主流TSDB一样,在数据模型的核心定义上,一条Prometheus数据会包含一个指标名称(metric)和一个或多个标签(label)以及metric value。 metric name加一组label作为唯一标识来定义time series,也就是时间线。在查询时,支持根据标签条件查找 time series,支持简单的条件也支持复杂的条件。

  1)数据模型

# TYPE net_conntrack_dialer_conn_failed_total counter
net_conntrack_dialer_conn_failed_total{dialer_name="alertmanager",reason="refused"} 0

  该数据指标类型为:counter,指标名称为:net_conntrack_dialer_conn_failed_total, 标签有dialer_name 和 reason,  该指标值为0

  2)数据类型

    PromQL数据类型归类为以下四种:

      即时向量(instant vector),是指同一时刻的一组时间序列,每个时间序列包含一个样本,所有样本共享相同的时间截,即每个时序只有一个点。

      区间向量(range vector),是指在任何一个时间范围内的一组时间序列。包含每个时间序列随时间变化的一系列数据点,这时每个时序有多个点。

      标量(scalar),即纯量数据,一个简单的数据浮点值,只有一个数字,没有时序。

      字符串(string),一个目前未被使用的简单字符串值。

三.时间序列选择器

  1. instant vector selectors

    即时向量选择器,它返回查询计算时间之前的最新样本的即时向量,即一个包含零个或多个时间序列的列表。这些时间序列中的每一个都有一个样本,样本包含值和时间截。

    下面是最简单的例子,也就是PromQL直接输入监控指标名称,在Graph页面中输入用于target的健康检查的 UP表达式,点击Execute进行查询,如下所示:

 

    这时也可以指定某个label进行查询,如下所示:

 

 

    以上就是instant vector selectors写法,这里仅仅使用"="号,除此之处还可以对标签值进行反向匹配,或者将标签值与正则表达式进行匹配,下面列出的匹配的运算符:

运算符 描述
= 相等匹配模式,例如:job="canal"
!~ 反向匹配模式,例如:job!="canal"
=~ 正则表达式匹配模式,例如: job=~"node_.*"    (.*)前缀匹配,当然也可以后缀匹配
!~ 反向正则表达式匹配模式,例如job!~"nginx-.*" 

 

  2. Range Vector Selectors

    区间向量选择器可以为每个时间序列返回许多样本。从语法上看,范围持续时间被添加到向量选择器未尾的方括号[ ]中,用来获取过去一段时间范围内的样本数据。如下所示:              

 

    在过去一分钟内有3个样本,除了m表示分钟,s秒,h小时,d天,w周,y年。

    在即时向量和区间向量表达式中,都以当前时间作为基准,例如指标process_resident_memory_bytes 内存使用量的变化:

 

                   上图15分钟内的指标内存值, [email protected], @前的是指标值, @后的是指时间截。  

    如果想查询15分钟前的即时样本数据,或昨天一天内的样本数据时,就需要使用时间偏移操作了,关键字为offest,。

 四.聚合操作

  Prometheus为使用者提供了内置的聚合操作符,这些聚合操作符仅仅适用于单个即时向量进行聚合操作,如下图所示:

 

 

   语法中的without关键字可以把列出的标签从计算结果中删除,而其他未列出的标签被保留输出,上面没有了标签为instance的。

  下面是用的by关键字,正好与without相反,是列出标签包含instance的,如下所示:

  

 

   除了sum,还有max, min,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile

 五.PromQL 运算符

  1.   算术运算符

    + ,- ,* ,/,%,^(幂运算)

    如下图所示,将样本从字节转成MB,新的时间序列不会包含指标名称

 

     下图是二个指标相加,新的时间序列不会包含指标名称

   2.关系运算符

    6种关系运算符 == 相等、 !=不相等, >大于,<小于,>=大于等于, <=小于等于。

    如下图所示:

 

标签:样本,查询,Prometheus,PromQL,时间,序列,数据
From: https://www.cnblogs.com/MrHSR/p/16737861.html

相关文章

  • Prometheus pushgateway(不发布)
    一.概述 前面讲到Exporter章节时,讲到了Prometheus服务器运行作业以从目标中获取指标。而指标的获取均是基于pull,即拉取模式的架构。然而在某些情况下,会出现无法从中......
  • Prometheus监控之检查工具Promtool TSDB
    一、概述Promtool在TSDB方面一个有6个子命令,分别用来进行写性能测试、TSDB分析、列出TSDB数据块、dump、从OpenMetric导入数据块、为新的记录规则创建数据块二、TSDB1、写性......
  • 【踩坑】Debian编译安装Podman和Prometheus-podman-exporter
    这个月一直在折腾Grafana,中途遇到了各种各样的问题这两天折腾得差不多了,才有空把遇到的问题写出来一方面做个记录,另一方面也当给想要折腾的小伙伴们踩踩坑估计最近......
  • 高可用kube-prometheus 5分钟快速搭建
    项目地址​​prometheus-operator/kube-prometheus:UsePrometheustomonitorKubernetesandapplicationsrunningonKubernetes(github.com)​​1.初识prometheus1.......
  • Prometheus监控之检查工具Promtool简介
    一、简介Prometheus提供了一个非常有用的支持命令行工具promtool。这个小型的Golang二进制文件可用于快速执行包括查询指标、debug服务、对数据库进行检查等等故障排除操作......
  • Prometheus监控之检查工具Promtool check
    一、检查服务发现使用Promtool可以检查配置文件中的服务发现配置,防止配置错误导致程序无法启动,或者启动后无法正常发现内容。具体命令参数为promtoolcheckservice-disco......
  • helm安装kube-prometheus-stack
    helm安装:wgethttps://get.helm.sh/helm-v3.9.2-linux-386.tar.gztar-xzvfhelm-v3.9.2-linux-386.tar.gzmvlinux-386/helm/usr/bin/ helm安装prometheus...helmr......
  • Prometheus监控之process-exporter
    一、简介有些应用程序无法直接检测,要么是因为您无法控制代码,要么是因为它们是用一种不容易用Prometheus检测的语言编写的。我们必须转而求助于挖掘/proc。二、安装配置1......
  • Prometheus高可用架构介绍
    Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可。但在多集群,大集群等场景下,Prometheus由于没有分片能力和多集群支持,......
  • Prometheus高可用架构介绍
    Prometheus作为新生代的开源监控系统,慢慢成为了云原生体系的监控事实标准,也证明了其设计得到业界认可。但在多集群,大集群等场景下,Prometheus由于没有分片能力和多集群支持,还......