首页 > 解决方案 > 如何将一个 Prometheus 服务器中的单个目标列表联合/Hashmod 到多个相同的导出器?

问题描述

遇到我在数据中心运行并受服务器大小限制的情况。我在一台服务器上运行一个 Prometheus 实例和一个导出器。出口商的目标数量很大,有数千个。这对服务器来说负载太大,我无法扩展。但是,我可以添加更多相同大小的服务器。

我想我可以联合并运行多个相同的 Prom 实例,每个实例都带有导出器(就像我当前的设置一样),并将它们输入到 Leader Prom 实例中。但是,我正在抓取一长串目标,并且 Prom 实例没有使用很多资源,出口商正在使用更多资源(出口商使用了 85% 的资源)。因此,设置几个相同的导出器可能是有意义的,每个导出器都在自己的服务器上,然后使用我的单个 Prom 实例将列表中 1/3 的目标发送到每个导出器服务器。

这与联合用例略有不同,因为我不想运行多个 Prom 服务器。此外,生成了带有目标列表的文件,并且很难将其拆分为多个文件,否则我可以在 prometheus.yml 中创建不同的作业,其中每个作业使用指向包含 1/3 的唯一文件的 file_sd_configs目标(如targets1.json、targets2.json、targets3.json)

理想情况下,我想为 file_sd_configs 提供一个文件,“targets.json”,然后使用重新标记/hashmod(或其他什么?)将它们平均划分并将子集发送到特定服务器。这是可能的吗?

标签: prometheusexporter

解决方案


将此添加到您的重新标记配置中:

- source_labels: [instance]
  modulus:       4    # 4 replicas
  target_label:  __tmp_hash
  action:        hashmod
- source_labels: [__tmp_hash]
  regex:         ^1$  # This is the 2nd replica
  action:        keep

每个副本一个,每个副本不同__address__

另一种选择是使用负载平衡器。


推荐阅读