如何配置Prometheus告警:process_running指标上报超3小时触发告警
解决Prometheus进程运行超时告警问题
你的核心需求是检测单台主机上的进程持续运行超过3小时,之前误用absent()函数(它是用来检测指标不存在的场景),所以无法生效。以下是正确的实现方案:
核心逻辑
进程运行时会每分钟推送process_running指标,进程退出后指标消失。因此我们需要检测的是:某个instance维度下,该指标持续存在的时长超过3小时。
告警规则实现
方法一:基于样本数量统计
由于进程每分钟推送一次样本,3小时共180个样本。通过统计过去3小时内的样本数量,判断指标是否持续存在:
groups: - name: process_alerts rules: - alert: ProcessStuckRunning expr: count_over_time(process_running{job="你的任务名"}[3h]) >= 180 AND process_running{job="你的任务名"} == 1 for: 1m labels: severity: critical annotations: summary: "实例 {{ $labels.instance }} 进程运行超时" description: "{{ $labels.instance }} 上的进程已持续运行超过3小时,可能陷入停滞"
方法二:基于样本时间戳差
获取该实例上process_running指标在过去3小时内的最早样本时间戳,计算当前时间与该时间戳的差值,判断是否超过3小时:
groups: - name: process_alerts rules: - alert: ProcessStuckRunning expr: time() - min_over_time(timestamp(process_running{job="你的任务名"})[3h]) > 10800 AND process_running{job="你的任务名"} == 1 for: 1m labels: severity: critical annotations: summary: "实例 {{ $labels.instance }} 进程运行超时" description: "{{ $labels.instance }} 上的进程已持续运行超过3小时,可能陷入停滞"
关键说明
- 替换规则中的
job="你的任务名"为实际的Prometheus任务标签值,确保匹配到目标指标 for: 1m用于过滤瞬时抖动,确保指标持续满足条件后再触发告警- 规则会自动按
instance维度生成独立告警,每个符合条件的主机都会单独触发通知
内容的提问来源于stack exchange,提问作者user1579557
相关产品推荐
相关产品推荐

