如何将一个 Prometheus 服务器中的单个目标列表联合/Hashmod 到多个相同的导出器?

Posted

技术标签:

【中文标题】如何将一个 Prometheus 服务器中的单个目标列表联合/Hashmod 到多个相同的导出器?【英文标题】:How to Federate / Hashmod Single List of Targets from One Prometheus Server to Multiple Identical Exporters? 【发布时间】:2019-05-16 18:05:03 【问题描述】:

遇到我在数据中心运行并受到服务器大小限制的情况。我在一台服务器上运行一个 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(或其他什么?)将它们平均划分并将子集发送到特定服务器。这有可能吗?

【问题讨论】:

这是哪个出口商? 这是黑盒。 【参考方案1】:

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

- 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__

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

【讨论】:

这很有帮助,谢谢!如果可以避免,宁愿不使用负载均衡器,但最终可能会对其进行测试,因为它也是一个简单的解决方案。我当前的重新标记配置是这样的,它基本上直接来自文档,你能帮我看看你发布的配置适合哪里吗? relabel_configs: - source_labels: [address] target_label: param_target - source_labels: [__param_target] target_label: instance - target_label: __address 替换:127.0.0.1:9115

以上是关于如何将一个 Prometheus 服务器中的单个目标列表联合/Hashmod 到多个相同的导出器?的主要内容,如果未能解决你的问题,请参考以下文章

liunx四周目之网络基础

使用 Prometheus 如何监控每个实例提供自己的 /metrics 的扩展 Docker 服务?

如何将 /actuator/health 中的所有健康检查信息发布到 /actuator/prometheus?

如何通过 JMX 将 Spring Boot 应用程序中的 Kafka 指标公开给 Prometheus?

Prometheus 仪表板未更新网站状态

Prometheus 跟踪自动扩展服务器中的请求