加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 云计算 > 正文

Prometheus语法研究

发布时间:2022-07-16 14:11:28 所属栏目:云计算 来源:互联网
导读:概述 Prometheus是一套使用Go语言进行编写的监控工具,专注于基础监控,默认仅保留15天的监控数据,15天的监控数据,已经足够运维人员去排查和分析运维故障。Prometheus有专门的PQL语言,可以对采集上来的指标进行多维度、函数分析,具有高度的指标定制化能
  概述
  Prometheus是一套使用Go语言进行编写的监控工具,专注于基础监控,默认仅保留15天的监控数据,15天的监控数据,已经足够运维人员去排查和分析运维故障。Prometheus有专门的PQL语言,可以对采集上来的指标进行多维度、函数分析,具有高度的指标定制化能力。本文将同大家一起学习Prometheus的PQL语法,验证并记录下过程。
  PQL重要概念
  即时向量
  一个时间点某指标的值,如:
  Prometheus语法初探
   Prometheus语法初探
  指标类型
  Gauge,度量值,这个值是有变化的,如CPU使用率,有高有低
  Counter,累计值,从程序开始,只增不减,如开机运行时长
  标签
  一个指标,可以包括多个标签(label),用来指示这个指标的具体表示信息,起到对一个指标的修饰作用,标签可使用正则表达式进行匹配。
   当我们给这个Metric指标做了标签过滤时,相当于执行了where限制性语句,如node_cpu_seconds_total{mode="idle"},只过滤出包含mode字段,并且其值为idle,类似于SQL语句。
  Prometheus语法初探
  标签支持正则表达式,使用=~(Rexp),如node_cpu_seconds_total{mode=~"idle|iowait"},类似于SQL语句。
  Prometheus语法初探
  标签过滤器可以有多个,用逗号进行隔开,相当于执行了where … and … 语句,如node_cpu_seconds_total{mode="idle",cpu='0'},类似于SQL语句。Prometheus语法初探
  配合标签,我们可以精确的找到我们需要用于展示或者计算的指标值。
  偏移量offset
  指标通过偏移量offset关键字,可以查询相对于当前时间点之前的数据,默认获取当前最新数据,如node_cpu_seconds_total offset 5m,获取5分钟前该指标的数据。
  注释
  PQL使用"#"对语法进行注释。
  函数
  sum
  sum函数可以对瞬时向量进行求和,如sum(node_cpu_seconds_total),将统计所有值的总和。类似于select sum(value) from node_cpu_seconds_total
  sum后面可以加 by 关键字,表示通过那个维度进行数据统计求和,如sum by (mode) (node_cpu_seconds_total) 类似于 select sum(vaule) from node_cpu_seconds_total group by mode
  min
  min函数可以对瞬时向量进行求最小值,min(node_cpu_seconds_total)。类似于select min(value) from node_cpu_seconds_total
  同样,也支持by关键字,进行某个维度的求最小值
  max
  max函数可以对瞬时向量进行求最大值,max(node_cpu_seconds_total)。类似于select max(value) from node_cpu_seconds_total
  同样,也支持by关键字,进行某个维度的求最大值
  avg
  avg函数可以对瞬时向量进行求平均avg(node_cpu_seconds_total)。类似于select avg(value) from node_cpu_seconds_total
  同样,也支持by关键字,进行某个维度的求最均值
  count
  count函数可以对瞬时向量个数求总数,如count(node_cpu_seconds_total)类似于select count(*) from node_cpu_seconds_total
  同样,也支持by关键字,进行某个维度的求最总个数
   bottomk
  同topk相反,这里不再赘述。
  计算
  + 加法运算
  指标支持加法运算,一个即时向量,由于标签值不一致,所以会有多个值,这些值可以跟另外一个即时向量进行相加,这里的相加要保持一个原则,那就是需要具有同一个标签值的才会相加。node_cpu_seconds_total + node_cpu_seconds_total,这相当于所有值都多加一个原来的值,总体的值的数量是保持不变的。
  相加的两个瞬时向量个数不一致情况:node_cpu_seconds_total和node_cpu_seconds_total{mode="idle"},后者经过过滤后,数量上明显比第一个少,此时输出的结果个数同过滤后数量少的个数一致。
  两个即时向量都不具备有同样的标签值情况:如node_cpu_seconds_total + node_memory_Active_bytes,此时由于没有任何一个值具有相同的标签值,所以结果为nodata,此时我们可以用ignoring关键字,对标签值进行忽略,使他们可以进行相加。由于node_cpu_seconds_total比node_memory_Active_bytes多了cpu和mode标签,所以node_cpu_seconds_total数量个数一般大于node_memory_Active_bytes个数,所以需要使用group_left,node_cpu_seconds_total + ignoring(cpu,mode) group_left node_memory_Active_bytes,结果集以左边的node_cpu_seconds_total个数为准,如果加号两个即时向量位置相反,则可以使用group_right,如node_memory_Active_bytes + ignoring(cpu,mode) group_right node_cpu_seconds_total
  - 减法运算
  类似加法运算
  * 乘法运算
  类似加法运算
  / 除法运算
  类似加法运算
  逻辑比较
  == 判断是否相等
  ==用于判断左右两边的值是否相等,如果相等则为1(true),如果不等则为0(false),如node_cpu_seconds_total ==BOOL 0 判断是否有存在0值
  != 判断是否不等
  类似==
  >= 大于等于
  >=用于判断左边的值是否大于或等于右边的值,如果满足,则为1(true),如果不满足则为0(false)
  <=小于等于
  类似大于等于
 
  < 小于
  类似大于等于
  数据集操作
  and
  对多个指标的数据集进行标签判断,获取两个指标集具有共同的标签的值node_cpu_seconds_total and node_cpu_guest_seconds_total,类似sql select * from node_cpu_seconds_total a,node_cpu_guest_seconds_total b where a.cpu = b.cpu and a.instance = b.instance and a.job=b.job and a.mode = b.mode
  or
  对多个指标集数据进行展示,如果有标签重复,则仅显示其中一个标签的值。
  unless
  对多个指标的数据集进行标签判断,获取两个指标集不具有共同的标签的值,结果集以最左边为准,如node_memory_Active_bytes unless node_cpu_seconds_total和node_cpu_seconds_total unless node_memory_Active_bytes结果是不一样的。
  

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读