如何使用 Prometheus 监控多个 docker 实例?

问题描述

我有服务 A,它是某个队列中的消费者。

我可以使用 Prometheus 轻松监控和计算任何消耗的消息:)

from prometheus_client import start_http_server,Counter

COUNTER_IN_MSGS = Counter('msgs_consumed','count consumed messages')
start_http_server(8000)
while(queue not empty):
   A.consume(queue)
   COUNTER_IN_MSGS.inc()

但是,有一天我决定将我的消费者复制到 10 个执行相同 {A1,A2...,A10} 的消费者,使用相同的代码但在 10 个不同的 docker 上运行(在我的例子中是 K8s 上的容器) ).

如何使用 Prometheus 监控它们?我应该为每个消费者更改我的代码和一些 ID 作为标签吗?

为了能够将它们汇总在一起,同时又单独依靠每一个,最佳做法是什么?

解决方法

是的,您应该考虑使用 labels 按实例消除指标(例如计数器)的歧义。

您需要确定要使用的唯一标识符。

Kubernetes 提供了一个 Downward API,使您能够将信息从 Pod 显示到容器。这些值之一应该是有用的。

然后您可以使用 PromQL ignoring 来例如跨计数器求和并忽略一个或多个标签。

通过这种方法,您可以选择是按实例求和还是跨实例求和。