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

寻求PCF应用服务重启时的Prometheus告警查询方案

PCF应用服务重启的Prometheus告警查询方案

问题分析

你之前用的resets(max(process_uptime_seconds{}) by (app,.....)[5m:1m]) > 0之所以只能触发一次告警,是因为resets统计的是指定时间窗口内指标重置的次数,当服务短时间内多次重启时,告警状态会持续处于firing,默认告警通知系统不会重复发送同一状态的告警。要实现每次重启都触发告警,需要更精准地捕捉每次重启的事件。

推荐查询语句(优先方案)

使用process_start_time_seconds指标(进程启动时间),这个指标在服务重启时会直接更新为新的时间戳,是检测重启最可靠的指标。结合changes()函数检测指标值的变化:

changes(process_start_time_seconds{job="你的PCF任务名"} by (app, instance)[1m:1m]) > 0
  • process_start_time_seconds:每个进程启动时会记录当前时间戳,重启后这个值会更新
  • by (app, instance):按应用名和实例维度聚合,确保每个实例的重启都能被单独检测
  • [1m:1m]:每1分钟检查过去1分钟内的指标变化,避免漏检短时间内的重启
  • changes(...) > 0:只要指标值有变化,就判定为发生了重启

基于process_uptime_seconds的替代方案

如果只能用process_uptime_seconds,可以通过检测uptime的突然下降来判断重启(重启后uptime会从0开始,最大值会骤降):

changes(max(process_uptime_seconds{job="你的PCF任务名"} by (app, instance))[1m:1m]) < 0

这个方案的原理是:正常运行时uptime持续增长,changes返回正数;重启时uptime重置为0,最大值下降,changes返回负数,以此触发告警。

告警规则配置示例

要确保每次重启都能触发通知,告警规则需要设置for: 0s(立即触发),并保留足够的维度标签:

groups:
- name: pcf-app-restart-alerts
  rules:
  - alert: PCFAppInstanceRestarted
    expr: changes(process_start_time_seconds{job="pcf-apps"} by (app, instance)[1m:1m]) > 0
    for: 0s
    labels:
      severity: warning
    annotations:
      summary: "PCF应用 {{ $labels.app }} 实例 {{ $labels.instance }} 已重启"
      description: "应用 {{ $labels.app }} 的实例 {{ $labels.instance }} 发生重启,启动时间已更新。"

注意事项

  • 确保每个应用实例都有唯一的instance标签,这样同一实例的多次重启会被识别为不同的告警事件(或状态变化),通知系统可以配置为每次状态变化都发送通知
  • 调整[1m:1m]的时间窗口,根据你的服务重启频率和监控精度需求修改,比如[30s:30s]可以更灵敏,但可能增加误报风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:32:15