CentOS 7.9 上跑 blackbox_exporter 0.24,加了 https 探测,证书到期告警写的是 probe_ssl_earliest_cert_expiry < time(),结果证书过期当天才收到告警,之前一直显示正常。
一开始怀疑是「探测模块没有采集证书指标,只看了状态码」,查了一圈,方向不对。
原因不止一个,得分开看。表达式直接和 time() 比较,没有留出提前量。也可能是阈值用了 0 而不是 30 天对应的秒数。
另外,抓取间隔太长,证书更新后指标没及时刷新。
动手时先看探测返回的证书到期时间
curl -s 'http://127.0.0.1:9115/probe?target=https://example.com&module=http_2xx' | grep ssl_earliest
然后把阈值改成提前 30 天
probe_ssl_earliest_cert_expiry - time() < 30 * 86400
再往下在规则里补上剩余天数注释
expr: probe_ssl_earliest_cert_expiry - time() < 86400 * 30
校验规则语法并重载
promtool check rules /etc/prometheus/rules/ssl.yml
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。规则加载成功,证书剩余 30 天时告警进入 pending 并发出,剩余 60 天时保持正常。
这里还有个坑。证书到期时间是从对端实时读的,CDN 后面的站点要确认探的是边缘节点还是源站,否则盯错了证书。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
