要监控 SSL 证书过期,标准方案是 Prometheus + Blackbox Exporter:用 Blackbox 探测 HTTPS 站点、读取证书有效期,再用 Prometheus 规则做 "即将过期" 告警。
一、安装 Blackbox Exporter
bash
# 下载(以最新版为例)
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz
tar zxf blackbox_exporter-*.tar.gz
cd blackbox_exporter-*
# 启动(默认 9115 端口)
./blackbox_exporter --config.file=blackbox.yml
二、配置 Blackbox(blackbox.yml)
专门用来强制检查 SSL 证书:
modules:
http_ssl_cert:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
method: GET
# 允许自签/过期(只看证书有效期)
fail_if_ssl: false
fail_if_not_ssl: true
tls_config:
insecure_skip_verify: true
三、Prometheus 配置(prometheus.yml)
scrape_configs:
- job_name: "blackbox_ssl"
metrics_path: /probe
params:
module: [http_ssl_cert] # 对应上面的 module
static_configs:
- targets:
- https://www.baidu.com
- https://your-domain.com
- https://api.yourapp.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115 # Blackbox 地址
四、关键指标
probe_ssl_earliest_cert_expiry:证书过期时间戳(Unix 秒)probe_success:探测是否成功(1 = 成功)
五、告警规则(ssl_rules.yml)
groups:
- name: ssl_cert_alerts
rules:
# 30天内过期(警告)
- alert: SSL_Cert_Expire_In_30_Days
expr: (probe_ssl_earliest_cert_expiry - time()) / 86400 < 30
for: 5m
labels:
severity: warning
annotations:
summary: "SSL证书即将过期(30天内)"
description: "实例 {{ $labels.instance }} 证书还有 {{ $value | printf \"%.0f\" }} 天过期"
# 7天内过期(严重)
- alert: SSL_Cert_Expire_In_7_Days
expr: (probe_ssl_earliest_cert_expiry - time()) / 86400 < 7
for: 2m
labels:
severity: critical
annotations:
summary: "SSL证书即将过期(7天内)"
description: "实例 {{ $labels.instance }} 证书还有 {{ $value | printf \"%.0f\" }} 天过期"
# 已过期
- alert: SSL_Cert_Expired
expr: probe_ssl_earliest_cert_expiry - time() <= 0
for: 1m
labels:
severity: disaster
annotations:
summary: "SSL证书已过期"
description: "实例 {{ $labels.instance }} 证书已过期,请立即更换"
六、在 prometheus.yml 加载规则
rule_files:
- "ssl_rules.yml"
七、重载生效
# 热重载(需 --web.enable-lifecycle)
curl -X POST http://localhost:9090/-/reload
# 或重启
systemctl restart prometheus
八、验证
-
Prometheus → Status → Targets:看
blackbox_ssl是否 UP -
Prometheus → Graph:执行 plaintext
probe_ssl_earliest_cert_expiry能看到时间戳
-
Prometheus → Alerts:看是否触发 SSL 相关告警
九、常用查询(剩余天数)
promql
# 所有域名剩余天数
(probe_ssl_earliest_cert_expiry - time()) / 86400
# 30天内过期
(probe_ssl_earliest_cert_expiry - time()) / 86400 < 30
十、Grafana 面板(可选)
导入 Dashboard ID:13230(Blackbox Exporter HTTPS/SSL)
总结
- Blackbox Exporter 负责探测 HTTPS、读取证书有效期
- Prometheus 抓取指标
probe_ssl_earliest_cert_expiry - 告警规则 判断剩余天数(30/7/0 天)
- Alertmanager 发邮件 / 企业微信 / 钉钉