ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ssl_exporter入门实战:3行Prometheus配置,让全站HTTPS证书到期告警不再漏报

ssl_exporter入门实战:3行Prometheus配置,让全站HTTPS证书到期告警不再漏报 ssl_exporter入门实战3行Prometheus配置让全站HTTPS证书到期告警不再漏报【免费下载链接】ssl_exporterExports Prometheus metrics for TLS certificates项目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporterssl_exporter是一款面向TLS/SSL 证书到期监控的轻量级 Prometheus exporter它连接你的网站 443 端口自动读出证书链中每张证书的 NotBefore / NotAfter 时间并暴露为 Prometheus 指标。配合几行 scrape 配置和一条告警规则就能实现HTTPS 证书到期前 7 天自动告警不再依赖邮件提醒和人工巡检。 ssl_exporter 解决什么问题很多人是在浏览器弹出此网站的安全证书不受信任时才惊觉证书快过期了。常见痛点人工巡检几个域名还能记几十个域名必然漏自动续期工具的邮件提醒容易被埋没错过就出事故内部服务、自签证书根本没有 CA 邮件提醒ssl_exporter 的思路是把证书有效期变成一条可监控的指标。它内置 6 种探测模块prober覆盖几乎所有证书形态探测模块适用场景tcp默认连接目标 443 端口读取 TLS 握手证书https同上可走 HTTP 代理、支持客户端证书file批量检查本地 PEM 文件支持通配符http_file抓取远程.pem地址检查kubernetes检查 K8skubernetes.io/tls类型 Secret 中的证书kubeconfig检查 kubeconfig 文件内嵌的证书默认监听9219端口/probe处理探测/metrics暴露自身指标。 最快部署Docker 一行命令docker run -d --name ssl_exporter -p 9219:9219 ribbybibby/ssl-exporter:latest镜像基于 scratch 构建、以非 root 用户运行见Dockerfile非常小巧。如果想从源码构建Go 1.22克隆仓库后一条 make 即可git clone https://gitcode.com/gh_mirrors/ss/ssl_exporter cd ssl_exporter make ./ssl_exporter 先手动验证一个 URL 看到证书有效期启动后直接 curl 探测端点curl http://localhost:9219/probe?targetexample.com:443输出是标准 Prometheus 格式关键指标有ssl_probe_success 1 ssl_cert_not_after{cnexample.com,issuer_cn...} 1.78e09 ssl_cert_not_before{cnexample.com,issuer_cn...} 1.76e09ssl_cert_not_after就是证书过期时间Unix 时间戳是所有到期告警的地基。想强制使用 https 模块时加上module参数curl http://localhost:9219/probe?modulehttpstargetexample.com:443默认模块为tcp定义在config/config.go的DefaultConfig中。模块也可以通过--config.file传入 YAML 配置文件统一管理examples/ssl_exporter.yaml里给出了各场景的现成模块示例代理、跳过证书校验、STARTTLS、K8s kubeconfig 等。⚙️ 核心配置Prometheus 增加一个 scrape 任务要检查哪些域名沿用 blackbox_exporter 的思路把域名列表放进static_configs用 relabel 把目标地址改写成探测参数。在prometheus.yml中加入scrape_configs: - job_name: ssl metrics_path: /probe static_configs: - targets: - api.example.com:443 - shop.example.com:443 - example.com: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 地址三条 relabel 规则的作用一句话讲清把每个域名写入探测参数__param_target用域名作为instance标签面板展示更直观把实际抓取地址重写为127.0.0.1:9219上的 ssl_exporter完整参考含 file / kubernetes / http_file 等多种任务在examples/example.prometheus.yml。添加后重启 PrometheusTargets 页面就能看到各域名的证书到期时间。新增域名只需在 targets 里加一行配置始终集中在 prometheus.yml 中exporter 完全不用动。 写到期告警一组值得背下来的 PromQL指标就位后告警只是一行 PromQL告警场景PromQL7 天内到期ssl_cert_not_after - time() 86400 * 73 天内到期严重ssl_cert_not_after - time() 86400 * 3通配符证书到期ssl_cert_not_after{cn~\*.*} - time() 86400 * 7探测本身失败ssl_probe_success 0对应的 Prometheus 告警规则示例groups: - name: ssl-cert-expiry rules: - alert: SSLCertExpiringIn7Days expr: ssl_cert_not_after - time() 86400 * 7 for: 10m labels: severity: warning annotations: summary: {{ $labels.instance }} 证书将在 7 天内过期 - alert: SSLProbeFailed expr: ssl_probe_success 0 for: 5m labels: severity: critical annotations: summary: {{ $labels.instance }} SSL 探测失败ssl_probe_success 0这条容易被忽略但必须加一旦 443 连不上或握手失败证书指标将完全没有值没有这条规则探测挂掉会被静默漏报——这正是告警不再漏报的关键一环。⚠️ 避坑服务器证书 vs 已验证链ssl_exporter 会输出两组指标ssl_cert_not_after服务器明确返回的证书peer 链ssl_verified_cert_not_after客户端实际验证通过后的证书链如果服务器返回了一张即将过期的中间/根证书而客户端能用本地根证书构造出另一条更长寿的信任链前者就会误报。此时应改用已验证链ssl_verified_cert_not_after{chain_no0} - time() 86400 * 7chain_no0是到期时间最晚的那条链这条规则只在信任链真正临近过期时才触发。 进阶场景速查批量检查本地 PEM 文件file模块支持通配符如curl localhost:9219/probe?modulefiletarget/etc/ssl/**/*.pem把 ssl_exporter 部署成 K8s DaemonSet即可检查每个节点的本地证书参考examples/example.prometheus.yml的ssl-files任务监控 K8s Secret 证书target 格式为namespace/secret两段都支持通配符curl localhost:9219/probe?modulekubernetestarget*/*走代理探测https模块读取HTTPS_PROXY环境变量或在配置文件中显式设置proxy_url后者优先Grafana 看板仓库自带一个追踪证书到期倒计时与连接错误的 dashboard位于contrib/grafana/dashboard.json✅ 小结你得到的能力6 种探测模块tcp / https / file / http_file / kubernetes / kubeconfigssl_cert_not_after等覆盖证书链的完整指标域名清单集中在 prometheus.yml新增站点 一行 target7 天 / 3 天分级到期告警 探测失败告警不再漏报源码结构也很清晰探测实现都在prober/目录每个模块一个文件如prober/tcp.go、prober/https.go入口逻辑在ssl_exporter.go。如果你想扩展新的探测协议这是个不错的入门项目。【免费下载链接】ssl_exporterExports Prometheus metrics for TLS certificates项目地址: https://gitcode.com/gh_mirrors/ss/ssl_exporter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表