如何详尽掌握Grafana Prometheus监控中PromQL所有内置函数的用法?

摘要:1、Prometheus简介 -> 关注清哥聊技术公众号,了解更多技术文章 Prometheus(中文名:普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).
1、Prometheus简介->关注清哥聊技术公众号,了解更多技术文章 Prometheus(中文名:普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发, 是Google BorgMon监控系统的开源版本。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态, 任意组件只要提供对应的HTTP接口就可以接入监控. 不需要任何SDK或者其他的集成过程。输出被监控组件信息的HTTP接口被叫做exporter,目前开发常用的组件大部分都有exporter可以直接使用, 比如Nginx、MySQL、Linux系统信息、Mongo、ES等 企业架构图: 2、PromQL内置函数 A、聚合函数 1)、sum (求和)对样本值求和; 比如:需要计算整个应用的HTTP请求总量,可以直接使用表达式: sum(prometheus_http_requests_total) 2)、min (最小值)求取样本值中的最小者; 3)、max (最大值)求取样本值中的最大者; 4)、avg (平均值)对样本值求平均值,这是进行指标数据分析的标准方法; 5)、stddev (标准差)对样本值求标准差,以帮助用户了解数据的波动大小(或称之为波动程度); 6)、stdvar (标准差异)对样本值求方差,它是求取标准差过程中的中间状态; 7)、count (样本数量计数)对分组内的时间序列进行数量统计; 8)、count_values (对 value 进行计数)对分组内的时间序列的样本值进行数量统计; count_values用于时间序列中每一个样本值出现的次数。count_values会为每一个唯一的样本值输出一个时间序列,并且每一个时间序列包含一个额外的标签。 例如: count_values("count", prometheus_http_requests_total) 9)、bottomk (样本值最小的 k 个元素)顺序返回分组内的样本值最小的前k个时间序列及其值; 10)、topk (样本值最大的k个元素)逆序返回分组内的样本值最大的前k个时间序列及其值; 例如:获取HTTP请求数前5位的时序样本数据,可以使用表达式: topk(5, prometheus_http_requests_total) 11)、quantile (分布统计)分位数用于评估数据的分布状态,该函数会返回分组内指定的分位数的值,即数值落在小于等于指定的分位区间的比例; quantile用于计算当前样本数据值的分布情况quantile(φ, express)其中0 ≤ φ ≤ 1。 例如,当φ为0.5时,即表示找到当前样本数据中的中位数: quantile(0.5, prometheus_http_requests_total) B、其他函数 1)、abs(instant-vector) 求瞬时向量绝对值 2)、absent(v instant-vector) 传入一个瞬时非空向量则返回空向量,否则返回不带名称值为1的指标,用来监控空数据的情况 3)、ceil(v instant-vector) 四舍五入取整 ceil(v instant-vector) 将 v 中所有元素的样本值向上四舍五入到最接近的整数。例如: node_load5{instance="192.168.1.15:8090"} # 结果为 2.79 ceil(node_load5{instance="192.168.1.15:8090"}) # 结果为 3 4)、floor(v instant-vector) 函数与 ceil() 函数相反,舍弃小数部分取整 5)、changes(v range-vector) 计算区间向量中每个样本值变化次数,返回的是瞬时向量 changes(v range-vector) 输入一个区间向量, 返回这个区间向量内每个样本数据值变化的次数(瞬时向量)。例如: # 如果样本数据值没有发生变化,则返回结果为 1 changes(node_load5{instance="192.168.1.15:8090"}[1m]) # 结果为 1 6)、clamp_max(v instant-vector, max scalar) 瞬时向量值如果大于max 则值修改为max,否则值不变(用于将向量规范到一个不大于max的区间内) clamp_max(v instant-vector, max scalar) 函数,输入一个瞬时向量和最大值,样本数据值若大于 max,则改为 max,否则不变。
阅读全文