如何用PromQL统计K8s集群中不同运行时长的节点数量?
Kubernetes节点运行时长分段统计方案
核心逻辑
节点运行时长 = 当前时间Unix时间戳 - 节点启动时间Unix时间戳(node_boot_time_seconds)。通过对比这个差值与目标时长(按秒计算),即可统计符合条件的节点数量。
分段统计PromQL语句
以下是针对不同时长阈值的查询语句,直接在Prometheus/Grafana中执行即可得到对应节点数:
| 运行时长范围 | PromQL查询语句 |
|---|---|
| 运行时长超过1天 | count(node_boot_time_seconds < time() - 86400) |
| 运行时长超过2天 | count(node_boot_time_seconds < time() - 172800) |
| 运行时长超过3天 | count(node_boot_time_seconds < time() - 259200) |
关于offset用法的说明
你之前尝试的sum(kube_node_info offset 1d)逻辑有误:offset是用来偏移查询的时间窗口(比如查询1天前的节点信息快照),而非统计节点的运行时长。这种方式无法得到"运行时长超过N天"的节点数,因为它只能反映过去某一时刻的节点状态,和节点持续运行的时长无关。
额外提示
- 确保集群中所有节点已部署
node_exporter,且node_boot_time_seconds指标正常采集 - 若需按自然日(而非连续秒数)统计,可结合
time()的日期函数调整,但秒数偏移的方式更通用、直观
内容的提问来源于stack exchange,提问作者Rodrigo Mantoani
相关产品推荐
相关产品推荐

