常用查询:

https://songjiayang.gitbooks.io/prometheus/content/exporter/nodeexporter_query.html

group by 操作

sum/avg/...(子表达式) by (用于分组的字段1, 用于分组的字段2...)

sum/avg/... by (用于分组的字段1, 用于分组的字段2...) (子表达式)

例如

CPU 使用率

100 - (avg by (instance) (irate(node_cpu{instance="xxx", mode="idle"}[5m])) * 100)

CPU 各 mode 占比率

avg by (instance, mode) (irate(node_cpu{instance="xxx"}[5m])) * 100

rate和irate操作符:计算Counter指标增长率

我们知道Counter类型的监控指标其特点是只增不减,在没有发生重置(如服务器重启,应用重启)的情况下其样本值应该是不断增大的。为了能够更直观的表示样本数据的变化剧烈情况,需要计算样本的增长速率。

如下图所示,样本增长率反映出了样本变化的剧烈程度:

通过增长率表示样本的变化情况

increase(v range-vector)函数是PromQL中提供的众多内置函数之一。其中参数v是一个区间向量,increase函数获取区间向量中的第一个后最后一个样本并返回其增长量。因此,可以通过以下表达式Counter类型指标的增长率:

 
increase(node_cpu[2m]) / 120

这里通过node_cpu[2m]获取时间序列最近两分钟的所有样本,increase计算出最近两分钟的增长量,最后除以时间120秒得到node_cpu样本在最近两分钟的平均增长率。并且这个值也近似于主机节点最近两分钟内的平均CPU使用率。

除了使用increase函数以外,PromQL中还直接内置了rate(v range-vector)函数,rate函数可以直接计算区间向量v在时间窗口内平均增长速率。因此,通过以下表达式可以得到与increase函数相同的结果:

 
rate(node_cpu[2m])

需要注意的是使用rate或者increase函数去计算样本的平均增长速率,容易陷入“长尾问题”当中,其无法反应在时间窗口内样本数据的突发变化。 例如,对于主机而言在2分钟的时间窗口内,可能在某一个由于访问量或者其它问题导致CPU占用100%的情况,但是通过计算在时间窗口内的平均增长率却无法反应出该问题。

为了解决该问题,PromQL提供了另外一个灵敏度更高的函数irate(v range-vector)。irate同样用于计算区间向量的计算率,但是其反应出的是瞬时增长率。irate函数是通过区间向量中最后两个两本数据来计算区间向量的增长速率。这种方式可以避免在时间窗口范围内的“长尾问题”,并且体现出更好的灵敏度,通过irate函数绘制的图标能够更好的反应样本数据的瞬时变化状态。

 
irate(node_cpu[2m])

irate函数相比于rate函数提供了更高的灵敏度,不过当需要分析长期趋势或者在告警规则中,irate的这种灵敏度反而容易造成干扰。因此在长期趋势分析或者告警中更推荐使用rate函数。

最新文章

  1. 每天一个linux命令(36):top命令
  2. Linux 内核动态函数调用可视化工具
  3. win7(64bit)python相关环境模块搭建
  4. iOS9 UITableViewCell separatorInset设置为0分割线还是没有顶到头的问题
  5. spring data jpa自定义bean字段映射
  6. 网络协议TFTP
  7. asp.net中使用jquery ajax保存富文本的问题
  8. 原生js移动端列表无缝间歇向上滚动
  9. CEF JS实现获取剪贴板图片的DataURL
  10. C#Workbooks 对象的 Open 方法参数说明
  11. Mac下搭建react及bable
  12. 8个超炫酷仿苹果应用的HTML5动画
  13. 最大子段和问题Java实现
  14. MD5 SHA1 哈希 签名 碰撞 MD
  15. Android开发笔记——ListView模块、缓存及性能
  16. SqlServer项目经验:介质集有2个介质簇,但只提供了1个。必须提供所有成员
  17. Python——requests的安装及入门-贴吧爬虫
  18. C&C++——库头文件及其作用
  19. Redis3.2.8配置参数及说明
  20. hihoCoder1304:24点

热门文章

  1. httpclient工具使用(org.apache.httpcomponents.httpclient)
  2. Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest
  3. Kubernetes 学习14 kubernetes statefulset
  4. vue中插槽作用域的使用
  5. js之大文件断点续传
  6. HTML插入音频和视频:audio和video标签及其属性
  7. AttributeError: module 'tensorflow' has no attribute 'set_random_seed'
  8. php grpc请求go,报Yac::get(): Unserialization failed
  9. Ring3挂起进程,跟恢复进程.
  10. JS 中的prototype、__proto__与constructor