blackbox_exporter
Prometheus 官方黑盒探测工具,通过 HTTP/DNS/TCP/ICMP/gRPC 等协议从
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Prometheus 官方黑盒探测工具,通过 HTTP/DNS/TCP/ICMP/gRPC 等协议从
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你负责维护公司几十台服务器,某天早上发现业务告警,但到底是网络断了、接口挂了、还是证书过期——你得一个个手动去 ping、去 curl、去查 DNS,折腾半天才能定位根因。Blackbox Exporter 就是为了解决这个问题而生的。
它由 Prometheus 官方团队开发和维护,是 Prometheus 监控生态中专门负责「从外部视角探测服务存活状态」的组件。与传统 Agent 类监控不同,Blackbox Exporter 不需要在目标机器上安装任何客户端,它通过 HTTP、HTTPS、DNS、TCP、ICMP、gRPC 等多种协议,对目标端点发起主动探测,然后以 Prometheus metrics 格式暴露探测结果,让整个监控体系来完成采集、存储和告警。
Blackbox Exporter 的诞生可以追溯到 2016 年,彼时 Prometheus 社区发现监控外网服务(如 CDN 域名、第三方 API)是个普遍痛点:内网 Agent 无法探测外网存活,传统做法是写一堆脚本来轮询,但这些脚本缺乏标准化、不利于长期维护。因此社区决定开发一个通用的黑盒探测工具,并将其纳入 Prometheus 官方Exporter 体系。
项目由 Prometheus 官方维护,代码遵循 Apache 2.0 许可,至今已持续更新 9 年,在 GitHub 上拥有超过 5710 颗星、1195 个 Fork,被广泛应用于互联网公司的生产监控场景。
如果把 Prometheus 监控体系比作一个「医院的体检中心」,那么 Blackbox Exporter 就是那个「外出做核酸采样的护士」——她不需要进入你家里,只需要站在门外,通过敲门、量体温、看面色等方式,判断你这个人是否「健康」。而 Exporter 就是这个护士的「采样工具包」,支持敲门(TCP)、量体温(HTTP)、查核酸(ICMP)等多种探测手段。
Blackbox Exporter 的核心价值在于将「探测」这件事标准化、自动化。
多协议探测:支持 HTTP/HTTPS(可验证证书有效性)、DNS 查询(验证域名解析正确性)、TCP 连接(检测端口是否开放)、ICMP Ping(检测网络可达性)、gRPC(检测 gRPC 服务健康状态)、WebSocket(检测实时通信服务)等六种探测协议,覆盖了绝大多数服务健康检测场景。
灵活的探测配置:通过 YAML 配置文件定义探测模块,每个模块可以设置超时时间、请求方法、HTTP Header、认证信息、TLS 配置、正则断言等参数。例如,可以配置一个 HTTP 探测:期望返回状态码 2xx 且响应体包含特定关键字,同时检测证书过期时间。
返回丰富的探测指标:探测结果不仅返回 probe_success(是否成功),还返回 probe_duration_seconds(探测耗时)、probe_http_duration_seconds(HTTP 各阶段耗时)、probe_ssl_earliest_cert_expiry_timestamp(证书到期时间戳)等指标,便于分析性能瓶颈和预测证书过期风险。
无需目标侧安装:Blackbox Exporter 是纯粹的客户端探测工具,探测请求从监控侧发起,目标服务无需任何配合改造。这使得它特别适合监控第三方服务、多云环境、分散在各地的外网节点。
支持 Prometheus 自动重载配置:v0.21+ 版本支持 --config.enable-auto-reload 参数,配置文件修改后可自动重载,无需重启进程,降低了生产环境运维压力。
Blackbox Exporter 没有 Web 界面,完全是一个命令行工具。上手分为两个阶段:
阶段一(5分钟):下载 Docker 镜像或二进制文件,启动进程,访问 http://localhost:9115/probe?target=google.com&module=http_2xx,验证探测结果。这个阶段不需要写任何配置。
阶段二(深入):编写 blackbox.yml 配置文件,定义自己需要的探测模块,将其挂载到容器内,并配置 Prometheus 定期从 Exporter 拉取 metrics。对于生产环境,还需要配置告警规则(如探测失败超过 3 分钟触发告警)。
局限性一——无法探测内部状态:Blackbox Exporter 只能探测「外部可见性」指标,无法知道目标服务内部是否正常(比如数据库连接池耗尽但 HTTP 返回 200)。对于这类场景,需要结合 Whitebox Exporter(如 node_exporter、mysqld_exporter)一起使用。
局限性二——ICMP 需要 root 权限:在 Linux 上使用 ICMP 探测,默认需要 root 权限。解决方案是使用 setcap 'cap_net_raw=ep' 给二进制文件授权,或使用 Docker 的 --cap-add NET_RAW 参数。
局限性三——配置文件管理:随着探测目标增多,配置文件可能变得臃肿。虽然支持自动重载,但缺乏分组管理和动态注册机制,在超大规模场景下管理成本较高。
在微服务和云原生时代,服务可靠性监控已经从「有没有在运行」进化到「用户能否正常访问」。Blackbox Exporter 正是这一趋势的产物:它填补了「外部可感知服务质量」这一监控盲区,与 Prometheus 生态无缝结合,形成了从探测到告警的完整闭环。
5710 颗星和 9 年的持续维护证明了它在生产环境中的稳定性和社区认可度。对于任何需要监控外部服务可用性的团队,Blackbox Exporter 都是值得纳入监控栈的基础组件。
项目基本信息
| 项目 | 信息 |
|---|---|
| GitHub | prometheus/blackbox_exporter |
| 语言 | Go |
| Stars | 5710 |
| Fork | 1195 |
| 许可 | Apache 2.0 |
| 官方主页 | https://prometheus.io |
| 探测协议 | HTTP/HTTPS, DNS, TCP, ICMP, gRPC, WebSocket |