当该节点的代理出现故障时,如何通过 Consul 服务发现使该节点对 Prometheus 可见?

How can I keep a node visible to Prometheus via Consul service discovery when that node's agent goes down?

我使用 Consul 在 Prometheus 中使用服务发现,它在大多数情况下运行良好。我的节点上有导出器 运行,这些相同节点上有 Consul 代理 运行,并且我已经通过代理(使用对代理的 REST 调用)在 Consul 集群中注册了导出器服务。 Prometheus 正确地找到了注册的出口商并抓取了指标。此外,当注册服务(导出器)被关闭时,Prometheus 会正确发送警报。但是……问题是,当一个节点失去了一个 Consul 代理(要么只是代理进程,要么整个节点宕机),Consul 集群根本就看不到这个节点了!然后,Prometheus 甚至不知道该节点,因此甚至不会尝试抓取其导出器指标。所以,我没有收到警报。换句话说,当代理在节点上出现故障时,它就消失了,我什至不知道。我已经在代理的 agent.json 配置中尝试了 "leave_on_terminate": false,但这并没有什么不同。

是的,我知道我也可以使用 DNS 服务记录来进行服务发现,这将使节点在 Prometheus 中保持可见,即使当 Consul 代理出现故障时也是如此,但之后我将对其余所有指标进行双重抓取代理启动的时间。我想坚持只使用 Consul 范例进行服务发现,而不是在其中混合使用 DNS 服务记录方法。我还想避免单独监视代理(即通过黑盒导出器)。

有什么想法吗?请帮忙。谢谢!

我们最终解决了这个问题。现在一切正常。

解决方案摘要:虽然在代理容器的 agent.json 配置中包含“"leave_on_terminate": false”,但确实允许当代理容器在节点上出现故障时 Consul 集群显示红色(原始问题),然后普罗米修斯只是静静地停止在该节点上抓取指标——并且不会发出警报(新问题与原始问题具有相同的效果)。我们最终也在节点上使用了 consul-exporter,以 post 节点的 consul agent 上的指标。这样一来,Prometheus 在关闭 Consul 代理时仍然没有发出警报,但 consul-exporter 指标显示它已关闭。因此,我们在 rules.yml 配置的 Consul 部分添加了 Prometheus 规则,以便在 consul-exporter 指标显示 Consul 代理已关闭时发出警报。这是端到端的。