如何用PromQL查询符合条件的activation_time指标,实现应用长时间未重启告警?
用PromQL实现长时间未重启应用的告警查询
完全可以通过PromQL实现这个需求,以下是具体的查询方法和细节:
核心查询语句
要筛选出启动时间超过2个月(近似60天)的应用,直接用这条PromQL:activation_time < (time() - 60*60*24*60) * 1000
语句解释
time():PromQL内置函数,返回当前Unix时间戳(单位:秒)60*60*24*60:60天的总秒数(1天=86400秒,60天=86400*60)- 乘以1000是为了把秒级时间戳转成毫秒级,和你的
activation_time指标单位对齐(你的示例值是1689550299110,属于毫秒级) - 这条查询会返回所有启动时间早于60天前的应用实例的
activation_time指标
告警规则示例
如果要把这个查询做成Prometheus告警规则,可以参考下面的配置:
groups: - name: application_health rules: - alert: ApplicationLongRunning expr: activation_time < (time() - 60*60*24*60) * 1000 for: 5m # 持续5分钟满足条件才触发告警,避免误报 labels: severity: warning annotations: summary: "应用 {{ $labels.instance }} 运行超60天未重启" description: "该应用启动时间为 {{ $value | humanizeTimestamp }},已连续运行超过60天,建议重启以规避性能下降风险。"
注意事项
- 关于"2个月"的精确性:因为不同月份天数不同(比如28/29/30/31天),PromQL没有直接处理自然月的函数,所以通常用近似天数替代。你可以根据实际业务调整天数,比如用56天(8周)或63天(9周)更贴近两个月的平均时长。
- 时间戳单位校验:如果你的
activation_time实际是秒级时间戳(比如1689550299),那去掉查询里的*1000即可,保证单位一致才能正确比较。
内容的提问来源于stack exchange,提问作者Sarkie
相关产品推荐
相关产品推荐

