prometheus 默认无法监控 ocsp stapling 状态,因其属 tls 握手底层行为,独立于 http 请求;标准 nginx exporter 仅采集 stub_status 基础指标,不解析 tls 日志、不调用 openssl api、不读取 error log 中 ocsp 相关错误。

Nginx 本身不直接暴露 OCSP Stapling 的健康状态指标给 Prometheus,官方模块(如 stub_status)和主流 Exporter(如 nginx-prometheus-exporter)均不采集或上报 OCSP Stapling 是否启用、是否生效、响应是否缓存成功等运行时状态。
为什么 Prometheus 默认无法监控 OCSP Stapling 状态
OCSP Stapling 是 TLS 握手层面的底层行为,由 OpenSSL 和 Nginx 协同完成,其生命周期独立于 HTTP 请求和 Nginx worker 的常规指标(如连接数、请求量)。当前所有标准 Nginx Exporter:
- 只抓取
/stub_status页面提供的基础连接与请求统计(Active connections、accepts、handled、requests 等) - 不解析 TLS 握手日志,也不调用 OpenSSL API 查询 stapling 缓存状态
- 不读取 Nginx error log 中关于 OCSP 的隐式提示(例如
no resolver defined或stapling ignored)
可行的间接监控方案
虽无原生指标,但可通过组合手段实现对 OCSP Stapling 健康性的可观测性:
-
定期主动探测 TLS 握手是否携带 OCSP 响应:使用脚本(如
openssl s_client -connect example.com:443 -status)检查输出中是否存在OCSP response:字段及有效时间戳。可封装为 Prometheusblackbox_exporter的自定义 probe(HTTP/TLS 类型),导出布尔型指标nginx_ocsp_stapling_up{host="example.com"} -
监控 resolver DNS 解析稳定性:OCSP Stapling 高度依赖
resolver。可在 Prometheus 中采集 DNS 解析延迟(如通过blackbox_exporter的dns模块查ocsp.int-x3.letsencrypt.org)并告警超时或失败,作为 stapling 可能失效的前置信号 -
采集 Nginx error log 中关键错误行:配置
file_sd或日志采集器(如 Promtail + Loki)匹配如下模式:.*stapling.*ignored.*、.*no resolver defined.*、.*OCSP responder hostname.*。在 Grafana 中设置日志告警,及时发现静默降级 -
验证证书链与 OCSP URI 存在性(部署期检查):将
openssl x509 -in cert.pem -text -noout | grep -A1 "OCSP"和openssl verify -CAfile chain.pem cert.pem写入 CI/CD 流程,失败则阻断发布——这属于配置健康保障,非运行时监控
注意两个典型失效场景的识别方式
以下问题不会产生 Prometheus 指标,但可通过上述探测快速定位:
-
ssl_trusted_certificate文件混入了站点证书:导致 OCSP 响应验签失败,stapling 静默关闭 → 探测脚本返回无OCSP response,且 error log 出现error:27069065:OCSP routines:OCSP_basic_verify:signer certificate not found -
resolver无法解析 OCSP 域名(如内网 DNS 不通外网):Nginx 日志仅提示no resolver defined to resolve OCSP responder hostname→ 此时需确保resolver配置正确且网络可达,DNS 探测会直接失败











