尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ssl_exporter告警实战:5条PromQL规则,提前7天精准抓住每张即将过期的证书

ssl_exporter告警实战:5条PromQL规则,提前7天精准抓住每张即将过期的证书 ssl_exporter告警实战5条PromQL规则提前7天精准抓住每张即将过期的证书【免费下载链接】ssl_exporterExports Prometheus metrics for TLS certificates项目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporterssl_exporter 是一款 TLS 证书监控 Exporter专门把证书过期时间导出为 Prometheus 指标让你用 5 条 PromQL 告警规则提前 7 天发现并告警每一张即将过期的证书从此告别“凌晨三点证书过期导致全站宕机”的惊魂时刻。 为什么你需要证书过期告警一张证书在凌晨悄悄过期可能让客户端大面积拒绝连接5xx 错误瞬间飙升。逐个登录服务器手动敲openssl检查既慢又容易漏。正确的思路是把过期时间变成一个可监控的指标让 Prometheus 替你盯着。ssl_exporter 正是为此而生它主动向目标发起连接在 TLS 握手中读取证书导出ssl_cert_not_after过期时间戳、ssl_probe_success探测是否成功等指标并附带cn通用名、issuer_cn颁发者、serial_no序列号等标签让告警可以精确路由到每一张证书。它内置 6 种探测器覆盖几乎所有证书来源探测器适用场景探测目标示例tcp任意走 TLS 的服务支持 STARTTLSexample.com:443httpsHTTPS 站点可走 HTTP 代理example.com:443file本机 PEM 证书支持 glob 通配/etc/ssl/**/*.pemhttp_file存放在远程 URL 上的 PEM 证书https://.../cert.pemkubernetesK8s 中kubernetes.io/tls类型的 Secretkube-system/nginx-certkubeconfigkubeconfig 文件内的客户端证书/etc/kubernetes/admin.conf各探测器的实现位于源码prober/目录如prober/https.go、prober/kubernetes.go指标定义集中在prober/metrics.go。⚡ 三步部署 ssl_exporter第 1 步获取并启动git clone https://gitcode.com/gh_mirrors/ss/ssl_exporter make或者直接用 Docker 一行拉起见 Dockerfile 同款构建docker run -p 9219:9219 ribbybibby/ssl-exporter:latest第 2 步手动探测验证浏览器访问http://localhost:9219/probe?targetexample.com:443返回中若出现ssl_probe_success 1说明探测链路完全正常。第 3 步接入 Prometheus与 blackbox_exporter 的思路一致通过 relabel 把目标地址传给 exporter。现成样例见examples/example.prometheus.yml核心写法如下scrape_configs: - job_name: ssl metrics_path: /probe static_configs: - targets: - example.com:443 - prometheus.io:443 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 127.0.0.1:9219 # SSL exporter 地址 5 条 PromQL 告警规则逐一拆解规则 17 天内过期的证书核心规则ssl_cert_not_after - time() 86400 * 7过期时间戳减去当前时间剩余不足 7 天604800 秒即触发。这是最常用的证书过期告警表达式7 这个数字可按团队换证流程自行调整比如改成86400 * 3作为二级紧急告警。规则 2即将过期的通配符证书ssl_cert_not_after{cn~\*.*} - time() 86400 * 7通配符证书如*.example.com是高危资产——一旦过期所有子域同时挂掉。通过cn标签单独筛出建议给它更高的severity和更短的响应时限。规则 3最可信信任链即将过期去误报ssl_verified_cert_not_after{chain_no0} - time() 86400 * 7这里涉及一个关键概念服务器下发的证书peer cert≠ 客户端实际构建的信任链。目标服务器可能附带了一张快要过期的根证书但客户端手里另有更长命的根证书实际连接并不受影响——此时规则 1 会误报。ssl_verified_cert_not_after导出的是客户端真正构建出的信任链每条链按“最晚过期”排序编号chain_no0就是最长命的那条链。对这张链告警才能抓住“真的快过期”的情况。规则 4证书已被吊销最高优先级ssl_ocsp_response_status 1ssl_exporter 会解析 OCSP 响应状态0Good、1Revoked、2Unknown。被吊销比过期更紧急建议for: 0m立即告警。规则 5探测失败兜底规则ssl_probe_success 0即使证书有效期充足只要目标连不上、握手失败或超时都可能是证书问题、网络问题或配置错误的早期信号。这条规则保证“监控本身”不沉默。一份可直接使用的告警规则文件把 5 条规则整合进rules.yml交给 Prometheus 加载即可groups: - name: ssl_certificate rules: - alert: CertExpiringWithin7Days expr: ssl_cert_not_after - time() 86400 * 7 for: 5m labels: severity: warning annotations: summary: {{ $labels.instance }} 的证书 {{ $labels.cn }} 将在 7 天内过期 - alert: WildcardCertExpiring expr: ssl_cert_not_after{cn~\*.*} - time() 86400 * 7 for: 5m labels: severity: critical annotations: summary: {{ $labels.instance }} 的通配符证书即将过期全部子域受影响 - alert: VerifiedChainExpiring expr: ssl_verified_cert_not_after{chain_no0} - time() 86400 * 7 for: 5m labels: severity: warning annotations: summary: {{ $labels.instance }} 的最长信任链将在 7 天内过期 - alert: CertRevoked expr: ssl_ocsp_response_status 1 for: 0m labels: severity: critical annotations: summary: {{ $labels.instance }} 的证书已被吊销请立即处理 - alert: SslProbeFailed expr: ssl_probe_success 0 for: 5m labels: severity: warning annotations: summary: 对 {{ $labels.instance }} 的 TLS 探测失败请检查目标与网络 核心指标速查表指标含义主要标签ssl_cert_not_after服务器下发证书的过期时间Unix 时间戳cn、issuer_cn、serial_nossl_cert_not_before证书生效时间同上ssl_verified_cert_not_after客户端信任链中每张证书的过期时间chain_no、cnssl_probe_success探测是否成功1/0—ssl_ocsp_response_statusOCSP 状态0Good 1Revoked 2Unknown—ssl_file_cert_not_after本地 PEM 文件的证书过期时间file 探测器file、cnssl_kubernetes_cert_not_afterK8s Secret 中证书的过期时间namespace、secret 进阶玩法Grafana 仪表盘与模块配置项目自带一个现成 Grafana 仪表盘contrib/grafana/dashboard.json导入即可可视化“证书剩余有效期 连接错误”把上文的告警规则做成看板展示给团队。需要自定义探测行为超时、TLS 参数、代理、client 证书等时用--config.file指定配置文件完整字段参考examples/ssl_exporter.yaml各字段的 schema 定义在config/config.go。监控 K8s 集群证书时用kubernetes探测器配target: [kube-system/*]这类 glob 表达式即可批量扫描整个命名空间的 TLS Secret节点本地证书则可以用file探测器以 DaemonSet 方式跑在每个节点上。 小结ssl_exporter把“证书什么时候过期”变成了一个可持续采集的 Prometheus 指标5 条规则各有分工7 天到期规则 1、通配符证书规则 2、可信信任链去误报规则 3、吊销检测规则 4、探测失败兜底规则 5配合 relabel 抓取配置和 Grafana 仪表盘从发现到响应只需一条流水线。证书过期是少数“完全可预防”的生产事故。今天把这套告警配上明天就不会再为它失眠。【免费下载链接】ssl_exporterExports Prometheus metrics for TLS certificates项目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表