prometheus监控pod内存使用率

  • 发生背景
  • 问题伊始
  • 根因分析
  • 解决方案:

发生背景

  1. pod内存使用率过高需要自动重启pod防止被kill影响线上业务
  2. 制定计算规则
  • 首先制定的规则:(container_memory_usage_bytes - container_memory_cache) / memory_limit > 90
  • container_memory_usage_bytes和container_memory_cache是Cadvisor中采集的数据,和memory_limit不是一个采集器收集上来的,标签不一致没办法计算,所以有了如下改版进行,标签选择使前后的指标的标签一致
  • 进行标签选择之后的规则sum(container_memory_usage_bytes{container!="", container!="POD"} - container_memory_cache{container!="", container!="POD"}) by(env, namespace, pod, container) / on(pod, container, env, namespace) label_replace(label_replace(memory_limit{status=~"Running.*"}, "pod", "$1", "pod_name", "(.+)"), "container", "$1", "container_name", "(.+)") * 100 != +inf > 90
  • 因为进行env, namespace, pod, container标签筛选之后能够确定只有一条指标,所以算出来的数据判断是没有问题的,该计算指标就上线了

问题伊始

  1. 某天下午突然一个线上环境触发了大量的pod重启,原因是因为pod内存过高导致触发了pod的自动重启,但是排查发现那一时刻的Pod内存使用率没有任何问题的,于是就来排查是否是告警误报导致的
  2. 经过排查发现了有同事给一个机器打了一个label,然后导致Cadvisor五分钟左右收集上来的数据存在两条基本一致的监控数据,唯一的区别是一个带新增的label,一个不带,然后我们的计算规则是sum的,这样就导致了监控指标计算出来的数值是实际的两倍大,从而触发了大量的pod重启

根因分析

  1. 虽然是因为node上打标签导致存在了两个类似的指标,但这只是诱因,归根结底还是因为sum函数的使用有问题
  2. sum函数是用来求和的,by只是相当于一个维度筛选器(These operators can either be used to aggregate over all label dimensions or preserve distinct dimensions by including a without or by clause.[摘自官网]),所以我们在使用sum的时候如果不是要使用他的聚合功能,就一定要保证by聚合之后的数据只有一条.

解决方案:

  1. 修改指标为sum(container_memory_usage_bytes{container!="", container!="POD"} - container_memory_cache{container!="", container!="POD"}) by(env, namespace, pod, container) / count(container_memory_usage_bytes{container!="", container!="POD"} - container_memory_cache{container!="", container!="POD"}) by(env, namespace, pod, container) / on(pod, container, env, namespace) label_replace(label_replace(memory_limit{status=~"Running.*"}, "pod", "$1", "pod_name", "(.+)"), "container", "$1", "container_name", "(.+)") * 100 != +inf > 90
    这样就能保证哪怕短时间内出现数据重合也能保证数据的稳定性
  2. 另外的方式就是将sum函数变更为max函数,因为env, namespace, pod, container四个维度基本已经决定了只有一条数据,如果出现特殊情况我们就以最大的值来进行计算就好了
    prometheus官方文档函数描述地址

记一次prometheus监控pod内存使用率错误使用sum函数引发的血案相关推荐

  1. shell脚本监控cpu/内存使用率 转

    该脚本检测cpu和内存的使用情况,只需要调整memorySetting.cpuSetting.userEmail要发邮件报警的email地址即可 如果没有配置发邮件参数的哥们,已配置了的,直接飞到代码 ...

  2. Winform中实现监控CPU内存使用率(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个窗体 ...

  3. JavaEE项目bug修复记——一场由特殊空字符(160号ASCII码)引发的血案

    我负责维护的一个JavaEE项目中有这样一个功能:可以用poi批量导入Excel表中的学号并在该系统中创建对应的用户.上周三中午,接到用户反馈,将Excel导入系统后用其中的用户名出现了无法登陆提示用 ...

  4. 服务器磁盘性能多少分正常,服务器内存使用率多少为正常

    服务器内存使用率多少为正常 内容精选 换一换 当您发现云服务器的运行速度变慢或云服务器突然出现网络断开现象,则可能是云服务器的带宽和CPU使用率过高导致.如果您已经通过云监控服务创建过告警任务,当CP ...

  5. Prometheus 监控进程的内存使用率 PromQL 多对一向量匹配

    使用 process-exporter 监控进程,node-expoert 监控节点 获取每个进程的内存使用量的表达式为 node_process_namegroup_memory_bytes{job ...

  6. 利用shell监控cpu、磁盘、内存使用率

    利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...

  7. zabbix-agent端自定义监控项(free -m)服务器内存使用率

    Agent端操作 [root@agent ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf 末行追加 UserParameter=memory_user ...

  8. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...

    由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...

  9. java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

    java 监控linux服务器cpu.内存.java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目有十几个服务器,每个服务器上有十几个服务.接手后的几个星期天天有事,要 ...

最新文章

  1. MVC3学习 四 EF删除操作
  2. 从ACT-R探讨认知智能
  3. map vs hash_map
  4. linux内核功能关闭透明大页 功能,redhat linux 7.4关闭透明大页
  5. 《深度学习》图像超分初识
  6. Git添加多个SSH key公钥
  7. 经典原型链、继承解析
  8. 最全的AI教程。自学人工智能攻略!
  9. Python中用于身份证验证的库函数
  10. 微俱聚平台更新日志jquery时间轴特效
  11. Mathmatica9 注册不了
  12. 解锁京东云底层技术密码:京东四大数智供应链技术亮相
  13. 【Busybox】Busybox源码分析-04 | ash和login程序
  14. c语言实现运输问题表上作业法,运输问题的表上作业法
  15. 读计算机专业广东那间学校好,读计算机专业广东省中职3+2学校那个好
  16. 高德地图 行政区域查询 DistrictSearch
  17. 本周AI热点回顾:机器人写稿同样拥有著作权、大脑中竟存在“分布强化学习”
  18. Redis Replication
  19. html制作的动态粒子图像,一种基于AnimateCC+Canvas的随机粒子动画效果设计
  20. 音视频进阶教程|如何实现游戏中的实时语音

热门文章

  1. php语言编写一个下载器,PHP实现音乐搜索下载器
  2. 搜狗高速浏览器2.0使用体验
  3. 关于comsol技术剖析的超强干货
  4. CSRF(Cross-site request forgery 跨站请求伪造)
  5. braintree_Laravel和Braintree,坐在树上……
  6. firebase分析_为什么我在下一个项目中不使用Firebase分析
  7. 鸿蒙harmonyOS方舟框架ARK etsUI 页面跳转动画translate不显示的问题
  8. 2.4.2 算术逻辑单元的功能和结构(改进)
  9. AC-DC--------单相可控整流电路
  10. ubuntu18.04搭建Mysql,C++连接Mysql数据库