prometheus

Prom QL语句

    1 prometheus metrics type

prometheus监控中采集过来的数据统一称为Metrics数据,其并不是代表具体的数据格式,而是一种统计度量计算单位。

 

当我们需要为某个系统或者某个服务做监控时,就需要使用到metrics。

 

prometheus支持的metrics包括但不限于以下几种数据类型:

    guage: 所见即所得

       最简单的度量指标,只是一个简单的返回值,或者叫瞬时状态。

       比如说统计硬盘,内存等使用情况。

   

    couter:

       就是一个计数器,从数据量0开始累积计算,在理想情况下,只能是永远的增长,不会降低(有特殊情况,比如粉丝量)。

       比如统计1小时,1天,1周,1一个月的用户访问量,这就是一个累加的操作。

      

    histograms:

       是统计数据的分布情况,比如最小值,最大值,中间值,中位数等,代表的是一种近似百分比估算数值。

       通过histograms可以分别统计处在一个时间段(1s,2s,5s,10s)内nginx访问用户的响应时间。

      

    summary:

       summary是histograms的扩展类型,主要弥补histograms不足。

本。

2 PromQL初体验

       2.1 查看某个特定的key

node_cpu_seconds_total

       2.2 查看某个节点的指标

node_cpu_seconds_total{instance="10.0.0.41:9100"}

       2.3 查看某个节点的某刻CPU的某种状态

node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}

       2.4 查询最近10s内某个节点CPU的某种状态时间

node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}[10s]

       2.5 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,非空闲状态使用的总时间

node_cpu_seconds_total{mode!="idle",cpu="0", instance="10.0.0.42:9100"}[1m]

       2.6 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,mode名称以字母”i”开头的所有CPU核心。

node_cpu_seconds_total{mode=~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m]

       2.7 统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,mode名称不是以字母”i”开头的所有CPU核心。

node_cpu_seconds_total{mode!~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m] 

统计cpu繁忙程度:

先进行cpu压力测试(stress 命令)10分钟,内存只占256M

stress –cpu 8 –io 4 –vm 2 –vm-bytes 128M –timeout 10m

验证繁忙程度:

prometheus查询cpu:node_cpu_seconds_total为key,{}里面叫做标签选择器–用于过滤指标,cpu选择1,[10m]10分钟内

查询114.55.148.180这台机器第1颗cpu十分钟内CPU使用的总时间:node_cpu_seconds_total{instance=”114.55.148.180:9100″,cpu=”1″}[10m]

查看数据中代表的时间 date -s "@1749997721" -R
Sun, 15 Jun 2025 22:28:41 +0800
当前时间 date
Sun Jun 15 10:28:44 PM CST 2025

3 Prometheus常用的函数

       3.1 increase

increase函数:

    用来针对counter数据类型,截取其中一段时间总的增量。

举个例子:

    increase(node_cpu_seconds_total{mode=”idle”,cpu=”0″, instance=”10.0.0.42:9100″}[1m])

       统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,空闲状态使用的总时间增量。

 

 

       3.2 sum

sum函数:   加和的作用。

举个例子:

sum(increase(node_cpu_seconds_total{mode=”idle”,cpu=”0″}[1m]))

       统计1分钟内,使用标签过滤器查看所有节点的第0颗CPU,空闲状态使用的总时间增量,并将返回结果累加。

    3.3 by       by函数:按照括号内的值进行分组

    将数据进行分组,类似于MySQL的”GROUP BY”。

举个例子:

    sum(increase(node_cpu_seconds_total{mode=”idle”}[1m])) by (instance)

       统计1分钟内,使用标签过滤器查看CPU空闲状态,并将结果进行累加,基于instance进行分组。

    3.4 rate

rate函数:

    它的功能是按照设置的时间段,取counter在这个时间段中平均每秒的增量。

举个例子:

 rate(node_cpu_seconds_total{mode=”idle”,cpu=”0″, instance=”10.0.0.42:9100″}[1m])

       统计1分钟内,使用标签过滤器查看”10.0.0.42:9100″节点的第0颗CPU,空闲状态使用的每秒的增量。

    

increase和rate如何选择:

    (1)对于采集数据频率较低的场景建议使用increase函数,
因为使用rate函数可能会出现断点,比如针对硬盘容量监控。


    (2)对于采集数据频率较高的场景建议使用rate函数,
比如针对CPU,内存,网络流量等都是可以基于rate函数来采集等。

 

    3.5 topk

topk函数:

    取前几位的最高值,实际使用的时候一般会用该函数进行瞬时报警,而不是为了观察曲线图。

举个例子:

    topk(3, rate(node_cpu_seconds_total{mode=”idle”}[1m]))

       统计1分钟内,使用标签过滤器查看CPU,所有状态使用的每秒的增量,只查看前3个节点。按照空闲时间排序,越闲的cpu数值越高

    3.6 count

count函数:

    把数值符合条件的,输出数目进行累加加和。

    比如说企业中有100台服务器,如果只有10台服务器CPU使用率高于80%时候是不需要报警的,但是数量操作70台时就需要报警了。

举个例子:

 count(oldboyedu_tcp_wait_conn > 500):

       假设oldboyedu_tcp_wait_conn是咱们自定义的KEY。

       若TCP等待数量大于500的机器数量就判断条件为真。

 

    count(rate(node_cpu_seconds_total{cpu=”0″,mode=”idle”}[1m]))

       对统计的结果进行计数。

  count(rate(node_cpu_seconds_total{cpu=”0″,mode=”idle”}[1m]) > 0.5)

       统计1分钟内编号为0空闲cpu每秒空闲大于0.5的节点有几个。

    3.7 其他函数

推荐阅读:

https://prometheus.io/docs/prometheus/latest/querying/functions/

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部