如何估计 Prometheus 的内存使用情况

dor*_*and 6 prometheus

我们使用 Prometheus 来抓取指标并将其保留 8 小时(对于更长时间,我们使用 Victoria Metrics)。我试图找出,对于当前的系列数量,Prometheus 应该有多少 MEM。我发现Prometheus 2.x 需要多少 RAM 来进行基数和摄取?用计算器。从这篇文章中,我有一些不清楚的地方:

  • 时间序列数* - 它应该是max_over_time(prometheus_tsdb_head_series[1d])查询的结果。就我而言,有多个结果,所以我用 求和sum(max_over_time(prometheus_tsdb_head_series[1d]))。这种做法对吗?
  • 每个时间序列的平均标签* - 统计所有标签的键值对数量并计算平均值。例如{a="123", b="456"}算作2。
  • 唯一标签对的数量* - 查找唯一键值对。例如{a="123", b="456"}{a="123", b="abc"}等于 2 个 uniq 标签对
  • 每个标签对的平均字节数*(包括 =、“” 和 ,) - 例如{ "__name__": "up", "app_version": "0509b54", "instance": "1", "job": "event-metric-exporterd", "stack_version": "MR" }。我删除了空格和{, }。所以最终的字符串是"__name__":"up","app_version":"0509b54","instance":"1","job":"event-metric-exporterd","stack_version":"MR". 然后,我对其进行编码并utf-8获取字符串长度,在本例中为 106。我对每个 uniq 标签执行此过程并计算平均值。这是正确的吗?
  • 每个样本的字节数- 有一个查询rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1d])/rate(prometheus_tsdb_compaction_chunk_samples_sum[1d]),在我的例子中返回多个系列。之所以需要,是max()因为这是最坏的情况。

计算器计算:

  • 基数内存- 普罗米修斯需要多少内存来处理各种系列/基数?我理解正确吗?
  • 摄取内存- Prometheus 用于摄取数据的内存 - 从目标加载和处理数据?

我对基数内存摄取内存的理解正确吗?我的计算过程正确吗?有没有更好的方法来估计普罗米修斯的内存?

在 docker 中使用 Prometheus prometheus:v2.29.1