玩转prometheus提高资源利用率

494 阅读2分钟

1. 背景介绍

前段时间把公司的基础监控统一到prometheus以及其生态体系,赞叹prometheus对指标监控的理解到位以及其结构和用法的合理性。构建完后,执行PQL拉通资源利用率数据,发现利用率很低。商业公司赚取每一分钱不容易,节约也是一种赚钱。这里简单记录分析过程,以飨读者做类比。

2. 分析思路

通过对prometheus数据分析,以机器资源的CPU、内存、磁盘维度进行研究分析。

2.1 CPU维度

目前很多公司系统运行在云平台上,机器的CPU核数可以按需分配。通过对所分配的机器CPU资源基于使用率数据维度来分析,分析方法如下:

如:计算使用率低于50%(假设X=50%)的机器,PQL样例如下:

  1. (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,查询出长时间段内资源利用率曲线和趋势,给资源利用率提升、成本控制提供数据基础,避免了瞬态数据对决策影响。