配置Prometheus SSL证书到期前置告警失败,请求排查解决
问题分析
你当前的告警规则未触发的核心原因是使用了==进行精确匹配:probe_ssl_earliest_cert_expiry - time() == 86400 * 30。由于Prometheus的采样间隔(通常是数分钟到数十分钟)和时间计算精度限制,证书剩余有效期刚好等于30天整秒数的概率极低,因此规则几乎不可能命中。
解决方案
以下是满足你需求的完整告警规则配置,包含30天触发一次、15天触发一次、7天每日告警的逻辑,同时通过区间判断+Alertmanager抑制规则避免重复告警:
1. Prometheus告警规则配置
groups: - name: ssl-cert-expiry rules: # 到期前30天触发一次告警(剩余有效期在15-30天区间) - alert: SSL-Cert-Expiring-In-30-Days expr: probe_ssl_earliest_cert_expiry - time() <= 86400 * 30 and probe_ssl_earliest_cert_expiry - time() > 86400 * 15 for: 5m labels: severity: warning alert_type: one_time annotations: description: "TLS证书将于{{ $value | humanizeDuration }}后到期(实例: {{ $labels.instance }})" summary: "SSL证书即将在30天内到期" # 到期前15天触发一次告警(剩余有效期在7-15天区间) - alert: SSL-Cert-Expiring-In-15-Days expr: probe_ssl_earliest_cert_expiry - time() <= 86400 * 15 and probe_ssl_earliest_cert_expiry - time() > 86400 * 7 for: 5m labels: severity: warning alert_type: one_time annotations: description: "TLS证书将于{{ $value | humanizeDuration }}后到期(实例: {{ $labels.instance }})" summary: "SSL证书即将在15天内到期" # 到期前7天每日触发告警(剩余有效期≤7天) - alert: SSL-Cert-Expiring-In-7-Days expr: probe_ssl_earliest_cert_expiry - time() <= 86400 * 7 for: 5m labels: severity: critical alert_type: daily annotations: description: "TLS证书将于{{ $value | humanizeDuration }}后到期(实例: {{ $labels.instance }})" summary: "SSL证书即将在7天内到期,每日告警"
2. Alertmanager抑制规则配置(可选,避免重复告警)
在Alertmanager配置文件中添加以下规则,确保进入下一阶段告警时,自动抑制上一阶段的告警:
inhibit_rules: - source_match: alertname: SSL-Cert-Expiring-In-15-Days target_match: alertname: SSL-Cert-Expiring-In-30-Days equal: ['instance'] - source_match: alertname: SSL-Cert-Expiring-In-7-Days target_match: alertname: SSL-Cert-Expiring-In-15-Days equal: ['instance']
关键说明
- 区间判断:通过
<=和>组合定义有效期区间,确保每个阶段的告警只会在对应时间窗口内触发,避免精确匹配的问题。 for参数:设置为5分钟,过滤临时网络波动或采样异常导致的误告警。- 每日告警实现:对于7天内的告警,可在Alertmanager路由配置中设置
repeat_interval: 24h,确保每天只发送一次告警通知。
内容的提问来源于stack exchange,提问作者stackinfo
相关产品推荐
相关产品推荐

