1. 背景介绍
前段时间把公司的基础监控统一到prometheus以及其生态体系,赞叹prometheus对指标监控的理解到位以及其结构和用法的合理性。构建完后,执行PQL拉通资源利用率数据,发现利用率很低。商业公司赚取每一分钱不容易,节约也是一种赚钱。这里简单记录分析过程,以飨读者做类比。
2. 分析思路
通过对prometheus数据分析,以机器资源的CPU、内存、磁盘维度进行研究分析。
2.1 CPU维度
目前很多公司系统运行在云平台上,机器的CPU核数可以按需分配。通过对所分配的机器CPU资源基于使用率数据维度来分析,分析方法如下:
如:计算使用率低于50%(假设X=50%)的机器,PQL样例如下:
- (1-avg(rate(node_cpu_seconds_total{mode="idle"}[10m])) by (instance)) * 100) < 50
出来的列表数据为瞬态数据,用图表工具拉长来看,很容易发现不连续的线段,这说明拉长时间段内,有CPU使用率高于50%的情况发生,如以下的“10.16.245.74”机器。
我们可以通过增大CPU使用率阈值,如 80%(假设Y=80%),找到这些在长时间段T内,cpu使用率出现过 [X-Y]的机器列表,并排除掉。
又,通过拉长时间区间为1天,观察集群状态。如图:
可以发现在特定时间点,集群的CPU负载是被拉起来的,如果单从一刀切的来讲,很多低使用率资源,因为一个瞬态的拉高,会被排除掉。
需要修改模型为:机器CPU使用率长时间低于 X%, 短时间运行在 X%至Y%之间,未超过Y%(X<Y)。通过设置 X和Y参数,选出CPU维度的资源。
如 X=50,Y=80,在最近1天的时间线上,获取的监控数据以及列表如下(注意一下PQL不要加上 <X的限制条件):
这样就能比较合理地,获取较长时间区间内的,CPU使用率低的机器列表。
同理,找出资源使用率较高的机器列表,如以下使用率大于80%的机器列表。
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[10m])) by (instance)) * 100 > 80
其长时间段内CPU持续维持高位,值得运维分析以及看是否要调整资源。通过以上方法,逐渐优化资源配置。
2.2 内存维度
根据以上CPU使用率分析,模型设置同理:
机器内存使用率长时间低于 X%, 短时间运行在 X%至Y%之间,未超过Y%(X<Y)。通过设置 X和Y参数,选出内存维度的资源。
如设置:X=50 ; y=70
执行如下PQL语句
((1 - (node_memory_MemAvailable_bytes{} / (node_memory_MemTotal_bytes{})))* 100 < 50) unless ((1 - (node_memory_MemAvailable_bytes{} / (node_memory_MemTotal_bytes{})))* 100 > 70)
获取到机器列表如下:
其中不连续的线,代表超过了50%,再做一次机器列表的排查,其内存使用率,在较长时间段内,如2天(2d)的使用率如图:
即找到机器内存使用率长期低于 50%,短时间运行在 50%-70% 区间,不超过70%。
同样,对内存使用率超过Y%的机器,长时间拉长看,如以下PQL:
(1 - (node_memory_MemAvailable_bytes{} / (node_memory_MemTotal_bytes{})))* 100> 70
3.分析总结
以上分析充分利用prometheus执行PQL,查询出长时间段内资源利用率曲线和趋势,给资源利用率提升、成本控制提供数据基础,避免了瞬态数据对决策影响。