多地点场景如何配置Prometheus?

How to configure Prometheus in a multi-location scenario?

我喜欢使用 Prometheus 进行监控和警报。到目前为止,我的所有目标(节点和容器)都与监控服务器位于同一网络上。

但现在我面临一个场景,我们将把我们的应用程序堆栈(作为一堆 Docker 容器)部署到他们网络中的多个客户端机器。几乎所有的客户端网络都在防火墙或 NAT 后面。所以抓取变得相当困难。

由于我们仍然对我们的堆栈负责,我想要一个中央监控服务器、更改和仪表板。

我想知道如果想用 Prometheus 实现它,最好的架构是什么,但我找不到任何令人信服的方法。到目前为止我的想法:

  1. 在我们这边使用 Pushgateway 并将所有数据推出客户端网络。正如文档所述,它不是那样的:https://prometheus.io/docs/practices/pushing/
  2. 使用联合设置 (https://prometheus.io/docs/prometheus/latest/federation/):在反向代理后面的每个客户端网络中放置一个 Prometheus 服务器(以启用 SSL 和身份验证)并汇总相关指标那里。 Open/forward 只是一个用于联合抓取的端口。
  3. 其他更多实验性设置,例如 SSH 隧道(例如此处 https://miek.nl/2016/february/24/monitoring-with-ssh-and-prometheus/)或 VPN!?

预先感谢您的帮助!

没有人发布答案,所以我会尝试就第二个选择给出我的意见,因为这是我认为在你的情况下我会做的。

第二种设置似乎最灵活,您可以访问数据并且只需要为联合服务器打开一个端口,因此它应该仍然是安全的。

这种设置的另一个好处是,即使防火墙由于某种原因停止工作,您仍然会有普罗米修斯抓取,您会收到警报,因为您将无法访问服务器,但是当连接再次出现时,您将拥有所有数据。您不会在 grafana 仪表板上出现漏洞,因为在事件期间没有数据。

此设置的问题在于您需要维护与网络数量相当的服务器数量。一个解决方案是有一个加壳图像或者一个 ansible playbook 来部署。