6

我已经使用 Prometheus、Grafana 和 cAdvisor 设置了一个 docker 监控堆栈。使用此查询获取正在运行的容器时:

count_scalar(container_last_seen{name=~container1|container2})

它可以拾取容器,只要我启动一个新容器,它就会立即被拾取。问题是当一个容器被停止或移除时,它并没有捡起它,它仍然将它显示为一个正在运行的容器。

一旦容器停止,它就会从 cAdvisor/metrics 端点中删除。

查询有问题吗?

(这是我用于堆栈的内容:https ://github.com/vegasbrianc/prometheus )

4

1 回答 1

4

这似乎与cAdvisor 将数据存储在内存中的时间有关

虽然 cAdvisor 将数据保存在内存中,但您仍然有一个有效的container_last_seen公制日期。所以count_scalar指令仍然“看到”容器,因为它具有有效值。

在我的测试设置中,cAdvisor 将数据保存 5 分钟。在这段时间之后,我从您的公式中获得了正确的信息,因为该container_last_seen指标已经消失。

您可以使用标志更改此 cAdvisor 配置--storage_duration

--storage_duration=2m0s: How long to store data.

作为替代方案,如果您不想快速发出警报,您还可以考虑运行一个查询,将上次看到的日期与当前日期进行比较:

count_scalar(time()-container_last_seen{name=~"container1|container2"}<=60)
于 2017-06-06T13:06:55.773 回答