blackbox exporter 用于外部验证 nginx 可访问性及响应预期,与 nginx 自身指标互补;它通过 http 探测检查连通性、状态码、tls 证书等,支持多地域监控和超时、证书过期等告警。

Blackbox Exporter 不是用来监控 Nginx 内部指标的,而是从外部验证 Nginx 服务是否对外可访问、响应是否符合预期。它和 Nginx 自身的 Prometheus 指标(如 vts 或 nginx_exporter 提供的请求量、状态码分布等)是互补关系:一个看“能不能通”,一个看“通了之后表现如何”。
为什么用黑盒方式检测 Nginx 服务可用性
即使 Nginx 进程在运行、内部指标一切正常,也可能因以下原因导致用户无法访问:
- 防火墙或安全组拦截了 80/443 端口
- 反向代理链路中某层(如 CDN、WAF、LB)异常中断
- HTTP 响应返回了 502/503 但 Nginx 进程未崩溃
- TLS 证书过期,HTTPS 请求直接失败
- DNS 解析异常或指向错误 IP
配置 Blackbox Exporter 探测 Nginx 端点
以标准 HTTP 服务为例,在 blackbox.yml 中定义探测模块:
modules:
http_ok:
prober: http
timeout: 5s
http:
valid_status_codes: [200, 301, 302]
method: GET
headers:
User-Agent: "Prometheus-Blackbox"
fail_if_ssl: false
fail_if_not_ssl: false
tls_config:
insecure_skip_verify: true # 若测试自签名证书可启用
关键点说明:
- valid_status_codes 应包含你允许的业务响应码(如首页重定向 301/302 也算正常)
-
tls_config.insecure_skip_verify 仅用于测试环境;生产建议关闭,并通过
fail_if_ssl: true配合证书过期告警 - 若需校验响应体内容(如返回 HTML 中含特定字符串),可用
http.body或http.fail_if_body_matches_regexp
Prometheus 抓取配置示例
在 prometheus.yml 中添加目标,指向你的 Nginx 域名或 IP:
scrape_configs:
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_ok]
static_configs:
- targets:
- https://example.com
- http://api.example.com:8080
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115 # Blackbox Exporter 实际地址
这样每轮抓取会触发一次对 https://example.com 的 GET 请求,并将结果(如 probe_success{instance="https://example.com"})存入 Prometheus。
常用告警与可观测维度
基于黑盒探测数据,你可以直接构建以下判断逻辑:
-
服务不可达:
probe_success == 0持续 2 分钟 -
响应超时:
probe_duration_seconds > 2(单位秒) -
证书即将过期:
probe_ssl_earliest_cert_expiry - time() (7 天内过期) -
状态码异常突增:
count by (instance) (probe_http_status_code != 200) > 0
这些指标天然支持多地域探测(比如用不同机房的 Blackbox 实例),能快速区分是全局故障还是局部网络问题。











