在Prometheus中使用kube_pod_container_info跟踪Kubernetes部署

sg24os4d  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(1)|浏览(310)

我正在寻找一个查询,以查看容器的图像标签在Prometheus的Pod中何时发生变化。我已经尝试了几种不同的方法,我认为我已经很接近了,但我似乎无法解决的问题是如何将当前记录与5分钟前的记录进行比较,并且只有在图像发生变化时才能得到结果,但仍然包括Pod和容器数据。我有这个查询到目前为止kube_pod_container_info{namespace="test"} != on(image) kube_pod_container_info{namespace="test"} offset 5m
我在这个查询中得到一个错误,因为有多个容器运行同一个镜像。所以理想情况下,我会匹配pod/container上的当前记录/过去记录,然后检查镜像是否不匹配。下面是一些数据的例子:现行数据

kube_pod_container_info{namespace="test",pod="test-pod", container="test-container-1", image="test-image:v1"}
kube_pod_container_info{namespace="test",pod="test-pod", container="test-container-2", image="test-image:v2"}

偏移5 m数据:

kube_pod_container_info{namespace="test",pod="test-pod", container="test-container-1", image="test-image:v1"}
kube_pod_container_info{namespace="test",pod="test-pod", container="test-container-2", image="test-image:v1"}

从上面的数据会想查询返回kube_pod_container_info{pod="test-pod", container="test-container-2", image="test-image:v2"},因为它的容器图像最近被更改为标签v2。让我知道,如果你需要更多的澄清。提前感谢的帮助!

6pp0gazn

6pp0gazn1#

您可以使用类似于以下内容的内容:

kube_pod_container_info{namespace="test"} == ignoring(image)
    kube_pod_container_info{namespace="test"} offset 5m 
  unless ignoring(image)
    kube_pod_container_info{namespace="test"} ==
      kube_pod_container_info{namespace="test"} offset 5m

在这里,我们检查kube_pod_container_info是否匹配除了image之外的所有标签,但不匹配所有标签,那么这意味着image发生了变化。
编辑:查询以保存@JeffW建议的所有标签

(kube_pod_container_info{namespace="test"} == ignoring(image)
    kube_pod_container_info{namespace="test"} offset 5m 
  unless ignoring(image)
    kube_pod_container_info{namespace="test"} ==
      kube_pod_container_info{namespace="test"} offset 5m )
* on(pod,cotainer) group_left(image) kube_pod_container_info{namespace="test"}

相关问题