阿里云Prometheus支持对基于持久化的关键状态的采集器自动扩容。

术语解释

  • 容器:一种运行应用程序的环境,如K8s。
  • 采集器:一种用来采集应用程序内监控信息的进程。
  • 扩容:增加容器内某进程的机器数(副本数)。
  • 副本数:同一个进程的数量。

背景信息

由于配置的Prometheus采集器的副本数量不足,导致采集器不断产生内存溢出发生重启。因此Prometheus新增HPA功能,可以自动调整采集器的副本数。

阿里云Prometheus HPA和开源K8s HPA对比

开源K8s HPA

开源K8s HPA原理:通过HPA进程采集各类指标数据,如采集内存使用率,然后配置一个指标阈值,如75%,超过75%则自动发起扩容操作。

开源K8s HPA的缺点:

  • 需要指定一个可以判断容器是否需要扩容的指标,如内存使用率或者请求数,这个指标不易找,并且指标阈值都是根据经验设置的。
  • 需要一个周期检测外部进程并进行判断,但是部分场景的发生瞬间就结束,来不及采集指标,如内存溢出,外部进程从外面采集,无法捕获到这个瞬间状态。

阿里云Prometheus HPA

阿里云Prometheus HPA原理:

Prometheus HPA原理
  1. 阿里云Prometheus HPA的采集器初次以1个副本的形式运行在容器中。
  2. 当需要采集的数据量过大时,采集进程会发生内存溢出,从而被K8s重启。
  3. 重启后,在进程内部会先检测采集器自身上一次被重启的原因,如果是OOMKilled,那么这个时候会发起一个需要副本扩容的请求给外部控制器ARMS Console。
  4. ARMS Console对K8s发起采集器副本+1的请求,目前仅支持最多扩容到10 个副本。
  5. ARMS Console对K8s发起对所有采集器重启一次的命令,用于清理上次OOMKilled的重启原因,并且对采集的任务进行重新分发起负载均衡的作用。

因此,阿里云Prometheus HPA可以解决以下问题:

  • 通过OOMKilled的状态可以准确的解决难以找到一个指标用来描述是否需要扩容的问题。
  • 当需要扩容的时,OOMKilled状态会被记录到K8s的状态里,所以当采集器启动时可以从K8s状态里发现是否需要扩容,从而解决指标的瞬间状态无法获取的问题。