我使用Prometheus,Grafana和cAdvisor设置了一个docker监控堆栈。在使用此查询获取正在运行的容器时:
count_scalar(container_last_seen{name=~container1|container2})
它可以直接拿起容器,一旦我启动一个新的容器,它立即被拿起。问题是当一个容器被停止或移除时它没有捡起它,它仍然将它显示为一个正在运行的容器。
在cAdvisor / metrics端点,一旦容器停止,它就会被删除。
查询有问题吗?
(这是我用于堆栈的内容:https://github.com/vegasbrianc/prometheus)
答案 0 :(得分:3)
它似乎与amount of time cAdvisor stores the data in memory相关。
虽然cAdvisor将数据保存在内存中,但您仍然拥有container_last_seen
指标中的有效日期。因此count_scalar
指令仍然可以看到'容器,因为它有一个有效的值。
在我的测试设置中,cAdvisor在5分钟内保存数据。在此期限之后,我会从您的公式中获取正确的信息,因为container_last_seen
指标已消失。
您可以使用--storage_duration
标记更改此cAdvisor配置。
--storage_duration=2m0s: How long to store data.
作为替代如果您不快速提醒,您还可以考虑运行一个查询,将上次看到的日期与当前日期进行比较:
count_scalar(time()-container_last_seen{name=~"container1|container2"}<=60)