Promethes监控采集的数据统一称为metrics数据
Metrics是一种对采样数据的总成(metrice并不代表某一种具体的数据格式,是一种对于度量计算单位的抽象)

一、Metrics的几种主要类型

1.Gauges
最简单的度量指标,只有一个简单的返回值,或者叫做瞬时状态,
比如CPU可能大可能小,不规则,当前采集多少就是多少,增长降低不确定

2.Counters
是计数器,从数据量0开始累计计算,在理想状态下只能永远增长或者保持不变,但是绝对不会降低 (特殊情况另说)
Counter?数字++++?数字积累会清0?直接从很大的数值直接为0 顺时下跌

比如产品被用户访问一次是1 过段时间1000只会增长不会降低,或者无人访问保持不变

3.Histograms(比例型)
统计数据的分布情况,最小值 最大值 中间值等等等等
一种特殊的metrics数据类型,代表一种近似的百分比估算值 不好理解但是实用性强
http_response_time HTTP响应时间 代表是一次用户http请求在系统传输和执行过程中 总共花费的时间
nginx中 也会记录这一项数值 在日志中

当一个exporter(node_exporter)被安装和运行在被检控的服务器上后 使用简单的curl就可以看到exporter帮我们采集到的metrics数据的样子,以k/v 的形式展现和保存
Curl localhost:9100/metrics

二、五种常用函数
1.rate函数的使用最重要的函数之一
专门配合counter类型的数据使用的函数
按照设置的一个时间段,取counter在这个时间段中平均每秒的增量
Key node_network_receive_bytes_total 表示节点接受字节数

rate(node_network_receive_bytes_total[1m])
表示节点在1分钟之内每秒接受字节数的增量
有些数据但看没有什么效果需要加rate 看增量
只要是counter数据类型的 别的先不做,先加一个rate()或者increase()
后面1m改为其他的话 写多少是平均多少xx时间内,如果时间长的话,瞬间的突起量是无法预测的,时间越长月平缓,看自己需求来选择时间,是需要瞬间的就选择小点的,如果需要看长时间的走势就可以选择长一些

2.increase函数使用
Increase函数其实和rate()的概念和使用方法非常相似

rate()是取一段时间的增量的平均每秒数量
increase()是取一段时间增量的总量
例如
rate( 1m)表示取1分钟以内每一秒的增量
increase( 1m)表示取1分钟的增量 差60被图基本相似但是数值不一样

选择场景
监控?获取采集数据源?频率
如果比较粗糙5m采集一次这时候用rate的时候容易形成 图断链
Rate 比如cpu 内存 硬盘 IO 网络流量 瞬息万变波动非常频繁 的资源用rate
Increase 不频繁

3.sum()函数
把结果集的输出进行总加和(把所有线加一起了)
针对sum的话后面需要加拆分
by (instance) 按照服务器拆分
by (cluster_name) 按照分组进行拆分
在主配置文件同一个job name属于一个分组,cluster_name就是按照job来区分

如果上千台服务器,按照服务器区分的话会很不好,就按照job来区分
Cluster_name这个标签node提供不了 是自定义标签

4.topk()函数
取前几位的最高值
①Gauge类型的使用
topk(3,key)
②Counter类型的使用
topk(3,rate(key[1m]))
需要注意的是:这个函数的查询方式一般建议在Console(数值界面)查看,在Graph(图形界面)有些会出现被截断的现象,对于每一个时间点都只取前三最高值,会导致采集不连贯,第一分钟x可能在前三,在下一分钟采样的时候x就不在前三了,一般用作瞬时报警,
5.count()函数
把数值符合条件的 输出数目进行加和
count(key ><= 数值)
例如:有100台服务器,可能有10台主机cpu超过百分之80的时候不需要报警,但是30台服务器超过就需要报警这时候就会用到count

官网其他函数定义:https://prometheus.io/docs/prometheus/latest/querying/functions/

查询步骤

第一步获取key
node_cpu_seconds_total
第二步把空闲的CPU时间和全部的CPU时间都过滤出来 key使用{}过滤
node_cpu_seconds_total{mode=“idle”} idle表示空闲时间
node_cpu_seconds_total 全部cpu时间
第三步函数
sum(increase(node_cpu_seconds_total{mode=“idle”}[1m]))

by(instance)
这个可以把sum加到义气的数值按照制定的一个方式进行一层的拆分
Instance 代表的机器名

sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by (instance) 空闲cpu使用百分比

(1- sum(increase(node_cpu_seconds_total{mode=“idle”}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance))
一分钟内除掉空闲时间cpu使用率

标签{instance=}
可以通过标签过滤一部分
Key后面跟标签{}有过滤作用 也可以精准匹配也可以模糊匹配
node_cpu_seconds_total{instance=“192.168.74.229:9100”} 精准匹配主机
node_cpu_seconds_total{instance=~“192.168.74."} 模糊匹配
node_cpu_seconds_total{instance=~"192.168.74.
”} > 20 数值比较