寻求Prometheus查询:获取Pod内容器镜像标签变更的旧值
解决Pod容器镜像标签变更查询问题
原查询的问题分析
你之前用的kube_pod_container_info{} != kube_pod_container_info{} offset 5m存在明显局限:
- 固定5分钟偏移仅能对比当前与5分钟前的状态,若变更发生在这个窗口之外,就会返回NaN;
kube_pod_container_info是gauge指标,Pod重建或镜像变更时旧时间序列会被标记为失效,新序列生成,直接对比无法精准关联同一Pod的变更记录。
可行的查询方案
1. 先识别发生过镜像变更的容器
用changes()函数筛选指定时间范围内(比如1天)镜像标签有变化的容器:
changes(kube_pod_container_info{image!=""}[1d]) > 0
image!=""用于过滤无镜像的异常实例。
2. 获取变更前的镜像标签值
结合last_over_time()获取过去一段时间内的最后镜像值,再与当前值对比:
# 当前镜像标签 kube_pod_container_info{image!=""} unless # 过去1天内的最后镜像标签(变更前的值) last_over_time(kube_pod_container_info{image!=""}[1d] offset 1d)
这个查询会返回所有当前镜像与过去1天内最后记录的镜像标签不一致的容器,配合Prometheus图表可直观看到变更时刻。
3. 更高效的长期查询(借助录制规则)
如果需要长期追踪,可配置Prometheus录制规则预先缓存历史镜像值:
groups: - name: pod_image_tracking rules: - record: pod_container_image:last_24h expr: last_over_time(kube_pod_container_info{image!=""}[24h])
之后直接用以下查询即可快速对比:
kube_pod_container_info{image!=""} != pod_container_image:last_24h
4. 查看变更时刻的前后值
找到目标容器后,直接在Prometheus图表中查看kube_pod_container_info的时间序列曲线,就能清晰看到镜像标签变更的具体时间点,以及变更前后的标签值。
内容的提问来源于stack exchange,提问作者user3441194
相关产品推荐
相关产品推荐

