k8s-prometheus-memory
Posted 芒果牛奶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s-prometheus-memory相关的知识,希望对你有一定的参考价值。
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
以上是关于k8s-prometheus-memory的主要内容,如果未能解决你的问题,请参考以下文章