You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus中按实例筛选最新补丁记录并统计实例数

问题描述

需要统计最近31天打过补丁的Windows服务器实例数,原查询为:

count(((time() - windows_update_patch_state_time) / 86400) > 0 < 31)

此前自定义exporter仅上报每个实例的最后一个补丁,查询可正常统计;但现在exporter会上报31天内所有补丁,导致单实例有多条记录,原本216个实例却统计出512条结果。

示例导出数据:

windows_update_patch_state_time{instance="instance1", kb="KB890830", title="Windows Malicious Software Removal Tool x64 - v5.135 (KB890830)"} 1755125323
windows_update_patch_state_time{instance="instance2", kb="KB5063877", title="2025-08 Cumulative Update for Windows Server 2019 for x64-based Systems (KB5063877)"} 1755124898

windows_update_patch_state_time{instance="instance2", kb="KB890830", title="Windows Malicious Software Removal Tool x64 - v5.135 (KB890830)"}   1755127104
windows_update_patch_state_time{instance="instance2", kb="KB5063757", title="Security update for SQL Server 2019 RTM CU (KB5063757)"}   1755125788
windows_update_patch_state_time{instance="instance2", kb="KB5063877", title="2025-08 Cumulative Update for Windows Server 2019 for x64-based Systems (KB5063877)"}  1755126947

需求:每个实例仅保留最新补丁记录,再统计符合条件的实例数量。

可行查询方案

使用以下PromQL即可实现需求:

count(
  max by (instance) (windows_update_patch_state_time) 
  > (time() - 31 * 86400)
)

逻辑说明

  1. max by (instance) (windows_update_patch_state_time):按instance维度聚合,取每个实例的最大补丁时间戳,也就是该实例最近一次打补丁的时间,自动过滤掉同一实例的旧补丁记录。
  2. > (time() - 31 * 86400):判断该最新补丁时间是否在31天以内(31*86400是31天对应的秒数),等价于原查询中时间差在0到31天的条件(补丁时间必然早于当前时间,所以无需额外判断>0)。
  3. count(...):统计所有符合条件的实例数量,确保每个实例只被计数一次。

内容的提问来源于stack exchange,提问作者Saf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:16:10