prometheus 内存


Node Exporter 有 251 个测量点
Prometheus 服务本身有 775 个测量点

sample_count(duration) = 节点数 * [ 测量点 * (duration / interval )]
例如:获取3h,100个节点,每个节点251个测量点,每隔15s,取一次样本,总共的样本数
duration = 3h
节点数 = 100
测量点 = 251
interval =15s

sample_count(3h) = 100 * [ 251 * (3*60*60 / 15)] = 18072000

由 Prometheus 的官方文档,使用 double-delta 方案对数据进行编码后,每条样本的字节大小为:sample_size=3.3B


Prometheus 对内存的使用由以下四个部分组成:
1、留存于内存的活跃样本
2、排队等待持久化的过期样本
3、索引数据
4、其他运行时内存消耗


3.1.1 留存于内存的活跃样本
假设我们要求的留存时间为 mem_retention,则所需的内存空间为:
  sample_mem_1=sample_size * sample_count(mem_retention)
例如:
  mem_retention = 6h
  节点数         = 100
  测量点         = 251
  interval      = 1s

sample_mem_1= sample_size * sample_count(mem_retention) 
            = 3.3B * sample_count(6h)
            = 3.3B * 100 * [ 251 * (6*60*60 / 1)] 
            = 1789128000B /1000 /1000 /1000
            = 1.789G



2、排队等待持久化的过期样本
为了完成对当前所有排队样本的持久化,Prometheus 需要花费的时间周期为 persist_cycle,一般情况下,持久化的时间周期为 6 个小时: persist_cycle=6h

为了不至于使 Prometheus 进入紧急模式(Rush mode),排队样本所占的空间不应超过预估空间的 80%
例如:
  节点数         = 100
  测量点         = 251
  interval      = 1s

因此,排队样本所需的内存空间为:
sample_mem_2 = [ sample_size * sample_count(persist_cycle)] / 0.8
             = [ 3.3B * sample_count(6h) ] / 0.8
             = 3.3B * 100 * [ 251 * (6*60*60 / 1)] / 0.8
             = 1789128000B / 0.8
             = 2236410000B /1000 /1000 /1000
             = 2.2364G


3、索引数据
对索引数据所需内存的估计,可以使用下面的经验公式:

series_count= 节点数 * 测量点
index_mem=series_count / 1000 MB

芒果牛奶
1 声望0 粉丝

运维背锅之路


下一篇 »
Linux Command