zoukankan      html  css  js  c++  java
  • 第八讲:prometheus命令行使用扩展

      本讲内容

    • prometheus命令行格式
    • rate函数使用
    • increase函数使用
    • sum函数使用  

      (一)prometheus命令行格式

      我们选一个新的key来做讲解

    count_netstat_wait_connections #TCP wait_connect数
    

       这个key值不少我们熟悉的node_exporter挖掘而来

      而是我们自定义并使用bash脚本+pushgateway的方式推送到 prometheus server采集

      类型gauge

      gauge类型的数据,属于随机变化的数值,并不像Counter那样是持续增长的

      把一个key直接输入命令行之后得到的是最原始的数据输出

      相对Counter数据gauge不需要任何increase() rate()之类的函数计算

      直接输入以后就可以看到已经成型的有确实意义的曲线图,如下图

       标签:来自于采集数据也可以自定义

      例如上面数据的instance标签是指明备监控的服务器

      可以在命令中使用标签进行进一步过滤例如

    process_open_fds{instance="192.168.1.101:9100"}
    

     

       查询多个有多个结果的时候也可以使用鼠标点击进行过滤

       过滤后就只显示某一台服务器的信息

      过滤除了精确匹配 还有 模糊匹配

      例如

    process_open_fds{instance=~"192.168.1.*"}
    

       

    模糊匹配=~
    模糊不匹配!~
    

       标签过滤之后对数值过滤

    process_open_fds{instance="192.168.1.11:9100"}>8
    

       显示的就是一些片段了

      (二)rate函数

      rate函数可以说是prometheus提供的最重要的函数

      rate函数是专门搭配Counter类型数据使用的函数

      它的功能是安装设置一个时间段,取Counter在这个时间段中平均每秒的增量  

      举例说明

      网络流量key

    node_network_receive_bytes
    

       获取一分钟内平均每秒的增量

    rate(node_network_receive_bytes [1m])
    

     

       注意:所以说 我们以后在使⽤任何counter数据类型的时候,永远记 得 别的先不做 先给它加上⼀个 rate() 或者 increase() 

      接下来我们把rate()做的事情更加细化来解释一下

      例如从09:20:43-09:21:43

      累积量从1031796930910到了1031872038733

      一分钟内增加的1000bytes(假设)

      从9:21-9:26

      五分钟增加了5000bytes(假设)

      加入rate(. [1m])之后

      会把1000bytes除以1m*60秒 =~16bytes

      就是这样计算出在这一分钟内平均每秒增加16bytes

      

     

      修改把1m=》5m

      这样就把5分钟内的增量除以5m*60秒

      5分钟的增量加入是5000那么除以300以后还是约等于16bytes/s

      感觉好像一模一样

      对比1m和5m

     

       明显1分钟的曲线比5分钟的曲线平缓

      虽然平均每秒的速度都是16bytes

      如果 我们按照 rate(1m)这样来取,那么是取1分钟内的增量 除 以秒数

      如果 我们按照 rate(5m)这样来取,那么是取5分钟内的增量 除 以秒数

      ⽽这种取法 是⼀种平均的取法 ⽽且是假设的

      刚才我们说 counter在 ⼀分钟 5分钟 之内的增量 1000 和 5000  其实是⼀种假设的理想状态

      事实上 ⽣产环境 ⽹络数据接收量 可不是这么平均的 有可能在 第⼀分钟内 增加了 1000 , 到 第⼆分钟 就变成增加 了2500 ….

      所以 rate(1m) 这样的取值⽅法 ⽐起 rate(5m) ,因为它取的时 间段短,所以 任何某⼀瞬间的凸起或者降低  在成图的时候 会体现的更细致 更敏感

      ⽽ rate(5m) 把整个5分钟内的 都⼀起平均了,那么当发⽣瞬时 凸起的时候 ,会显得图平缓了⼀些 (因为 取的时间段长 把 波峰波⾕ 都给平均消下去了)
    那么我们再放⼤⼀些 看看 rate(20m) 会怎么样
      

       更加平缓了

      在我们的⼯作中 取1m 还是取5m 这个取决于 我们对于监控数据的敏感性程度来挑选

      (3)increase函数

      increase 函数 其实和rate() 的概念及使⽤⽅法 ⾮常相似

      rate(1m) 是取⼀段时间增量的平均每秒数量 increase(1m) 则是 取⼀段时间增量的总量 

      对比

     

       图形形状基本一样,但是y轴的数值是不一样的

      从这两个图 我们可以看到 其实曲线的⾛势 基本是⼀样的 但是 显⽰出来的数量级bytes 可不⼀样  3106868.4 * 60 = 186412104 (发现) 正好是 60倍  也就很好理理解了了,increase() 是不不会取⼀一秒的平均值的
      生产中应该如何选择两个函数

      采集粗糙例如每五分钟采集一次的数据,如果使用rate函数则因为是每秒的平均使用可能产生断点,则需要使用increase

      采集数据不频繁采用increase

      rate()适用于CPU 内存 硬盘IO 网络流量

      increase()适用于硬盘容量等不会经常性发送突变的

      

      (四)sum函数

      sum就是总取和

      sum会把结果集输出进行总加和

      例如

    rate(node_network_receive_bytes[1m]) 
    

       

      显⽰的结果集 会包含如 下内容

       使用sum函数以后

    sum(rate(node_network_receive_bytes[1m]) )
    

       把所有的网络流量汇总了

       我们之前也说过,如果要进⾏下⼀层的拆分 需要在 sum() 的后⾯ 加上 by (instance)

    sum(rate(node_network_receive_bytes[1m]) ) by(instance)
    

       

       但是如果 我们希望 按集群总量输出呢? ⽐如 我们返回了20台机器的数据 其中 有6台 属于 web server 10台属于 DB server 其他的 属于⼀般server

      那么我们这时候 sum() by (cluster_name) 就可以帮我们实现 集 群加合并分三条曲线输出了

      顺带⼀提的是 (cluster_name) 这个标签,默认node_exporter 是没有办法提供的 node_exporter只能按照 不同的机器名去划分

      如果希望 ⽀持cluster_name 我们需要⾃⾏定义标签(往后的课程介绍)

      (五)topk()函数

      取前几位最高值

      例如

    topk(3,node_network_receive_bytes)
    

     

     

       这个函数一般使用只适合于在console查看(返回当时瞬时的数据),针对graph的意义不大

      如下图所示

       Topk因为对于每⼀个时间点 都只取前三⾼的数值 那么必然会造成 单个机器的采集数据不连贯

      因为:⽐如 server01在在这⼀分钟的 wait_connection数量排在 所有机器的前三 ,到了下⼀分钟 可能就排到垫底了.. ⾃然其 曲线就会中断 实际使⽤的时候 ⼀般⽤topk()函数 进⾏瞬时报警 ⽽不是为 了观察曲线图

      (六)count()函数

      定义: 把数值符合条件的 输出数⽬进⾏加合

      举例

      找出当前(或者历史的)打开文件描述符大于8的机器数量

    count(process_open_fds>8)
    

     

       这个函数在实际⼯作中还是很有⽤的 ⼀般⽤它count进⾏⼀些模糊的监控判断

      count返回的是一个加和的数值

      ⽐如说 企业中有100台服务器,那么当只有10台服务器CPU⾼ 于80%的时候 这个时候不需要报警 但是 当符合80%CPU的服务器数量 超过 30台的时候 那么就 会触发报警 count()
      更多函数查看官网:https://prometheus.io/docs/prometheus/latest/querying/functions/

      

  • 相关阅读:
    [Android] Android 手机下 仿 今日头条 新闻客户端
    [Android] Android Error: Suspicious namespace and prefix combination [NamespaceTypo] when I try create Signed APK
    [Android] Android Build 时报错: java.io.IOException: Could not parse XML from android/accounts/annotations.xml
    Uva 10557 XYZZY
    Uva 705
    Uva532(三维搜索)
    Uva657
    B. Bear and Three Musketeers
    1092 回文字符串(51nod)
    1050 循环数组最大子段和
  • 原文地址:https://www.cnblogs.com/minseo/p/13367692.html
Copyright © 2011-2022 走看看