• prometheus.(4).函数计算公式


    数学理论基础-计算公式

    作者声明:本博客内容是作者在学习以及搭建过程中积累的内容,内容采自网络中各位老师的优秀博客以及视频,并根据作者本人的理解加以修改(由于工作以及学习中东拼西凑,如何造成无法提供原链接,在此抱歉!!!)

    作者再次声明:作者只是一个很抠脚的IT工作者,希望可以跟那些提供原创的老师们学习

    原文:大米运维

    CPU的构思

    %Cpu(s): 2.2 us, 1.9 sy, 0.0 ni, 95.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
    

    CPU的使用率 = (所有非空闲状态的CPU使用时间总和 )/(所有状态CPU时间的总和)

    (1-((sum(increase(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) / (sum(increase(node_cpu_seconds_total[5m])) by (instance)))) * 100
    
    
    (sum(increase(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) / sum(increase(node_cpu_seconds_total[5m])) by (instance) )* 100
    

    函数

    rate()

    rate函数,rate用来计算两个 间隔时间内发生的变化率(一段时间内平均每秒的增量)。

    专门用来搭配Counters类型的数据,rate(指标名{筛选条件}[时间间隔])

    比如 查看1分钟内非idle的cpu使用率

    rate(node_cpu_seconds_total{mode!="idle"}[1m])
    

    irate()

    rate与irate的区别

    irate和rate都会用于计算某个指标在一定时间间隔内的变化速率。但是它们的计算方法有所不同:irate取的是在指定时间范围内的最近两个数据点来算速率,而rate会取指定时间范围内所有数据点,算出一组速率,然后取平均值作为结果。

    所以官网文档说:irate适合快速变化的计数器(counter),而rate适合缓慢变化的计数器(counter)。

    根据以上算法我们也可以理解,对于快速变化的计数器,如果使用rate,因为使用了平均值,很容易把峰值削平。除非我们把时间间隔设置得足够小,就能够减弱这种效应。

    相同函数,截取不同时间的图形分析

    rate(node_network_receive_bytes_total{device="ens32",instance="k8s-node1"}[1m])
    

    1分钟内 增加了 1000bytes (假设)

    5分钟内 增加了 5000bytes (假设)

    会把1000bytes除以 1m*60秒,=~16bytes/s 就是这样计算出在这1分钟内,平均每秒钟增加 16bytes

    1584428753976

    把5分钟内的增量 除以 5m*60s ,5分钟的增量 假如是 5000 , 那么除以300 以后 也还是约等于 =~ 16bytes/s

    1584428799672

    以上两种时间段的取法,都是假设成⼀种平均的取法,这是一种假设的理想状态,事实上生产环境 网络数据接收量 可不是这么平均的。有可能在 第一分钟 增加了 1000, 到 第二分钟 就变成增加了2500….

    所以 rate(1m) 这样的取值方法比起 rate(5m) ,因为它取的时间段短,所以 任何某⼀瞬间的凸起或者降低在成图的时候会体现的更细致 更敏感而rate(5m)把整个5分钟内的都⼀起平均了,那么当发生瞬时凸起的时候,会显得图平缓了⼀些 (因为 取的时间段长 把波峰波谷都给平均消下去了)

    increase()

    increase 函数 在promethes中,是用来针对Counter 这种持续增长的数值,截取其中⼀段时间的 增量(一段时间内的总增量)

    increase(node_cpu_seconds_total[1m]) =》 这样 就获取了 CPU总使用时间在1分钟内的增量

    sum( )

    比如上面得到各个指标的cpu使用率,如果我想计算总的cpu使用率怎么办?

    sum( ) 就如其字⾯意思⼀样 起到value 加合的作用 sum( increase(node_cpu_seconds_total[1m]) ) 外⾯套⽤⼀个sum 即可把所有核数值加合

    问题1:所有机器的CPU 也全都加到⼀起了,变成 服务器集群 总CPU平均值了?

    by()

    by (instance) 这个函数 可以把 sum加合到⼀起的数值 按照指定的⼀个方式进行一层的 拆分

    instance 代表的是 机器名

    意思就是说 把sum函数中 服务器加合的这个糗事 再给它强行拆分出来

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

    sum() by (cluster_name) 可以帮我们实现集群加合并分三条曲线输出了,顺带一提的是 (cluster_name) 这个标签,默认node_exporter是没有办法提供的,node_exporter只能按照不同的机器名去划分。如果希望支持cluster_name 我们需要自行定义标签。

    topk()

    topk() 函数的定义是:取前面x位的最高值,最简单理解就是数学的top,当我们有很多服务器我们想要获取某个key的数据排在前3位的服务器。

    Gauge类型使用方式:

    topk(3,key)
    

    Counter类型使用方式

    topk(3,rate(key[1m]))
    

    注意:此种函数获得数据并不是很适用图形化展示,实际使用的时候 ⼀般用topk()函数 进行瞬时报警而不是为了观察曲线图

    count()

    定义: 把数值符合条件的 输出数目进行加合

    例如:找出当前(或者历史的)当数值数大于2000的机器数量

    1584432005529

    更多函数:https://prometheus.io/docs/prometheus/latest/querying/functions/

    标签匹配

    模糊匹配 =~

    模糊不匹配 !~

  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/orange-lsc/p/12825562.html
Copyright © 2020-2023  润新知