前言在上一篇文章中我们学习了如何使用各种 Exporter 对服务器、数据库、中间件进行白盒监控——即从内部采集 CPU、内存、连接数等指标。但有一个关键问题始终没有解决我的服务对外到底能不能正常访问这就是黑盒监控的用武之地。本文将从零开始带你完整搭建一套基于 Prometheus Blackbox Exporter Grafana 的黑盒监控体系监控你的网站、API、端口是否可用并用 Grafana 展示出来。一、什么是黑盒监控为什么要用它1.1 白盒监控 vs 黑盒监控在监控领域有两种截然不同的监控思路维度白盒监控White-box黑盒监控Black-box视角从内部看系统从外部看系统数据来源系统内部暴露的指标CPU、内存、日志主动探测外部端点HTTP请求、Ping、TCP连接回答的问题“系统内部运行正常吗”“用户能正常访问吗”典型工具Node Exporter、MySQL ExporterBlackbox Exporter局限性服务器全挂时监控也随之失效无法获知故障的根本原因白盒监控依赖系统内部暴露的指标能深入分析故障根因。但当服务器因网络问题全部失联时白盒监控也随之失效。黑盒监控则从外部模拟用户行为主动探测能回答“服务到底通不通”这个最根本的问题。它的核心价值在于在用户投诉之前先发现服务不可用。一个形象的比喻白盒监控是体检检查身体内部各项指标黑盒监控是实战测试真刀真枪去跑一下看看能不能跑。1.2 Blackbox Exporter 是什么Blackbox Exporter 是 Prometheus 官方提供的黑盒监控工具支持通过HTTP/HTTPS、TCP、DNS、ICMP等多种协议主动探测目标端点。它可以检测网站/API 是否返回正确的 HTTP 状态码响应时间是否超过阈值TLS/SSL 证书是否即将过期服务器是否响应 Ping 请求TCP 端口是否开放如 3306、6379、221.3 整体架构text┌─────────────┐ 抓取指标 ┌──────────────────┐ 探测请求 ┌─────────────┐ │ Prometheus │ ──────────────▶ │ Blackbox Exporter │ ─────────────▶ │ 目标服务 │ │ (9090) │ ◀────────────── │ (9115) │ ◀───────────── │ (网站/API/ │ └─────────────┘ 返回指标 └──────────────────┘ 探测结果 │ 端口等) │ │ └─────────────┘ │ 查询数据 ▼ ┌─────────────┐ │ Grafana │ │ (3000) │ └─────────────┘工作流程Prometheus 定期向 Blackbox Exporter 发起抓取请求携带目标地址和探测模块参数Blackbox Exporter 根据配置对目标执行探测HTTP 请求、TCP 连接、Ping 等Blackbox Exporter 将探测结果成功/失败、耗时、状态码等返回给 PrometheusGrafana 从 Prometheus 查询数据并展示二、安装与部署 Blackbox Exporter2.1 环境准备一台 Linux 服务器CentOS 7/8 或 Ubuntu 20.04已安装 Prometheus参考之前的文章已安装 Grafana后续会用到2.2 下载与安装bash# 下载 Blackbox Exporter以 v0.25.0 为例 wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz # 解压 tar xvfz blackbox_exporter-0.25.0.linux-amd64.tar.gz # 将二进制文件移动到系统路径 sudo mv blackbox_exporter-0.25.0.linux-amd64/blackbox_exporter /usr/local/bin/ # 创建配置目录 sudo mkdir -p /etc/blackbox_exporter2.3 创建专用系统用户bash# 创建无登录权限的系统用户 sudo useradd --no-create-home --shell /bin/false blackbox_exporter2.4 创建 Systemd 服务bashsudo tee /etc/systemd/system/blackbox_exporter.service EOF [Unit] DescriptionBlackbox Exporter Afternetwork.target [Service] Userblackbox_exporter Groupblackbox_exporter Typesimple ExecStart/usr/local/bin/blackbox_exporter --config.file/etc/blackbox_exporter/blackbox.yml Restartalways [Install] WantedBymulti-user.target EOF三、核心配置文件详解Blackbox Exporter 的核心配置文件是blackbox.yml。它定义了各种探测模块modules每个模块指定了探测协议、超时时间、验证规则等。3.1 完整配置示例创建配置文件/etc/blackbox_exporter/blackbox.ymlyamlmodules: # HTTP 探测模块 # 用于监控网站/API 的可用性 http_2xx: prober: http timeout: 5s http: valid_status_codes: [200, 301, 302] method: GET no_follow_redirects: false fail_if_ssl: false fail_if_not_ssl: false # HTTP 探测 响应内容正则匹配 http_content_check: prober: http timeout: 5s http: valid_status_codes: [200] method: GET fail_if_not_matches_regexp: - Welcome to.* - 正常运行 # HTTPS 严格校验证书验证 https_2xx: prober: http timeout: 5s http: valid_status_codes: [200, 301, 302] method: GET tls_config: insecure_skip_verify: false fail_if_not_ssl: true # TCP 探测模块 # 用于监控端口是否开放如 MySQL 3306、Redis 6379、SSH 22 tcp_connect: prober: tcp timeout: 3s # TCP 探测 响应内容匹配如 SSH banner ssh_banner_check: prober: tcp timeout: 3s tcp: query_response: - expect: ^SSH-2.0 # ICMP 探测模块 # 用于监控主机是否存活Ping icmp: prober: icmp timeout: 5s icmp: preferred_ip_protocol: ip4 # DNS 探测模块 # 用于监控 DNS 解析是否正常 dns_example: prober: dns timeout: 5s dns: transport_protocol: tcp query_name: example.com query_type: A3.2 配置项说明配置项说明示例prober探测协议类型http、tcp、icmp、dnstimeout探测超时时间5svalid_status_codesHTTP 允许的状态码列表[200, 301]methodHTTP 请求方法GET、POSTheaders自定义请求头User-Agent: Blackboxfail_if_not_matches_regexp响应内容必须匹配的正则Welcome.*tls_configTLS/SSL 证书验证配置insecure_skip_verify: falsequery_responseTCP 期望的响应正则匹配expect: ^SSH-3.3 启动 Blackbox Exporterbash# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start blackbox_exporter # 设置开机自启 sudo systemctl enable blackbox_exporter # 查看运行状态 sudo systemctl status blackbox_exporterBlackbox Exporter 默认监听在9115 端口。验证是否正常运行bashcurl http://localhost:9115/metrics | head -20如果能看到 Prometheus 格式的指标输出说明运行成功2.5 配置防火墙bash# CentOS 7 sudo firewall-cmd --permanent --add-port9115/tcp sudo firewall-cmd --reload # Ubuntu sudo ufw allow 9115/tcp四、配置 Prometheus 抓取 Blackbox Exporter4.1 编辑 Prometheus 配置文件编辑/etc/prometheus/prometheus.yml在scrape_configs下添加 Blackbox Exporter 的抓取任务yamlscrape_configs: # ... 其他 job 配置 ... # 监控 Blackbox Exporter 自身 - job_name: blackbox_exporter static_configs: - targets: [localhost:9115] # 黑盒监控任务 - job_name: blackbox # 抓取路径固定为 /probe metrics_path: /probe params: # 使用的探测模块对应 blackbox.yml 中的模块名 module: [http_2xx] static_configs: # 要探测的目标列表 - targets: - https://www.baidu.com - https://www.google.com - http://your-api-server.com:8080/health relabel_configs: # 将目标的 URL 作为参数传递给 Blackbox Exporter - source_labels: [__address__] target_label: __param_target # 将目标 URL 作为 instance 标签 - source_labels: [__param_target] target_label: instance # 将请求重新指向 Blackbox Exporter 自身 - target_label: __address__ replacement: localhost:91154.2 多模块配置示例推荐实际生产环境中你可能需要同时监控 HTTP 网站、TCP 端口和 ICMP 存活。可以配置多个抓取任务每个使用不同的模块yamlscrape_configs: # HTTP 网站监控 - job_name: blackbox_http metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - https://www.baidu.com - https://www.taobao.com - http://localhost:8080/actuator/health relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # HTTPS 严格校验证书验证 - job_name: blackbox_https_strict metrics_path: /probe params: module: [https_2xx] static_configs: - targets: - https://your-bank-api.com relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # TCP 端口监控MySQL、Redis、SSH 等 - job_name: blackbox_tcp metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - 192.168.1.100:3306 # MySQL - 192.168.1.100:6379 # Redis - 192.168.1.101:22 # SSH relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # ICMP 主机存活监控 - job_name: blackbox_icmp metrics_path: /probe params: module: [icmp] static_configs: - targets: - 192.168.1.1 # 网关 - 8.8.8.8 # Google DNS relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:91154.3 重启 Prometheusbash# 检查配置文件语法 promtool check config /etc/prometheus/prometheus.yml # 重启 Prometheus sudo systemctl restart prometheus4.4 验证抓取状态在浏览器中访问http://服务器IP:9090/targets查看blackbox_http、blackbox_tcp、blackbox_icmp等任务的状态是否为UP。如果某个目标显示为DOWN可以点击该目标查看详细错误信息帮助定位问题。五、核心监控指标解读Blackbox Exporter 会输出以下关键指标指标名称类型含义probe_successGauge探测是否成功1成功0失败probe_duration_secondsGauge探测总耗时秒probe_http_status_codeGaugeHTTP 响应状态码probe_http_redirectsGauge重定向次数probe_ssl_last_expired_atGaugeSSL 证书过期时间戳probe_dns_lookup_time_secondsGaugeDNS 解析耗时probe_tcp_connect_time_secondsGaugeTCP 连接耗时最重要的指标是probe_success。当它为 0 时说明目标服务不可用可以基于此配置告警。六、Grafana 可视化配置数据采集只是第一步接下来我们用 Grafana 将监控数据以直观的仪表盘展示出来。6.1 添加 Prometheus 数据源步骤一在浏览器中访问 Grafana默认http://服务器IP:3000默认用户名和密码均为admin。步骤二点击左侧菜单栏的Connections→Data Sources。步骤三点击Add data source选择Prometheus。步骤四在HTTP区域URL 填写 Prometheus 的地址如http://localhost:9090。步骤五点击Save Test如果显示绿色成功提示说明数据源配置正确。6.2 方式一导入现成 Dashboard推荐Grafana 官网提供了多个 Blackbox Exporter 的现成 Dashboard可以直接导入使用。推荐 DashboardDashboard 名称ID特点Blackbox Exporter13659官方推荐全面监控 Blackbox 各项指标Blackbox Exporter Dashboard 2022041213660支持 TCP/ICMP/HTTPS中文界面Smokeping blackbox_exporter13661类似 Smokeping 的延迟图表导入步骤在 Grafana 左侧菜单点击Dashboards→New→Import在Import via grafana.com输入框中输入 Dashboard ID如13659点击Load选择之前配置的 Prometheus 数据源点击Import一个完整的 Blackbox Exporter 监控大屏就创建好了它将自动展示所有监控目标的可用性状态UP/DOWN各目标的响应时间趋势HTTP 状态码分布SSL 证书过期时间倒计时6.3 方式二手动创建自定义面板如果你想自定义监控面板可以手动创建。创建一个“服务可用性”面板点击→Dashboard→Add new panel在查询编辑器中输入以下 PromQLpromqlprobe_success{jobblackbox_http}右侧Visualization选择Stat状态值展示设置Thresholds0 → 红色Down1 → 绿色Up点击Apply保存创建一个“响应时间”面板点击Add panel输入 PromQLpromqlprobe_duration_seconds{jobblackbox_http}选择Time series图表类型设置图例显示为{{instance}}点击Apply保存创建一个“HTTP 状态码”面板点击Add panel输入 PromQLpromqlprobe_http_status_code{jobblackbox_http}选择Stat或Table展示点击Apply保存6.4 最终 Dashboard 效果预览完成配置后你的 Grafana Dashboard 将展示服务可用性总览所有监控目标的健康状态一目了然响应时间趋势图各目标响应时间的历史变化HTTP 状态码分布快速发现异常状态码SSL 证书到期提醒证书即将过期时高亮显示丢包率统计ICMP 探测网络质量可视化七、生产环境最佳实践7.1 部署位置选择Blackbox Exporter 建议部署在与目标服务不同的网络位置监控公网服务 → 部署在云服务器上监控内网服务 → 部署在同一内网的不同网段多地冗余 → 在不同地域部署多个 Blackbox Exporter7.2 超时时间设置超时时间应根据网络环境合理设置内网探测2s-3s公网探测5s-10s跨地域探测10s-15s7.3 告警配置建议在 Prometheus 告警规则中配置yamlgroups: - name: blackbox_alerts rules: - alert: ServiceDown expr: probe_success{jobblackbox_http} 0 for: 1m labels: severity: critical annotations: summary: 服务 {{ $labels.instance }} 不可用 description: 探测失败请立即检查 - alert: SSLExpiringSoon expr: (probe_ssl_last_expired_at - time()) / 86400 7 labels: severity: warning annotations: summary: SSL 证书将在 {{ $value }} 天后过期7.4 监控频率核心服务15s或30s探测一次一般服务60s探测一次调整 Prometheus 的scrape_interval即可八、故障排查指南8.1 Blackbox Exporter 无法启动bash# 查看日志 sudo journalctl -u blackbox_exporter -f # 检查配置文件语法 /usr/local/bin/blackbox_exporter --config.file/etc/blackbox_exporter/blackbox.yml --check8.2 Prometheus 抓取失败在 Prometheus Targets 页面查看错误信息常见原因目标地址无法访问检查网络和防火墙超时时间太短调整timeout配置模块名称错误检查params.module是否匹配8.3 probe_success 一直为 0手动测试目标是否可达curl -I https://your-target.com检查 Blackbox Exporter 日志中的具体错误确认目标是否需要特定的请求头或认证九、总结本文完整介绍了基于 Prometheus Blackbox Exporter Grafana 的黑盒监控体系搭建全过程步骤操作关键文件/命令1安装 Blackbox Exporterwget下载/usr/local/bin/2配置探测模块/etc/blackbox_exporter/blackbox.yml3启动服务systemctl start blackbox_exporter4配置 Prometheus 抓取/etc/prometheus/prometheus.yml5重启 Prometheussystemctl restart prometheus6Grafana 添加数据源Grafana Web UI → Connections → Data Sources7导入 DashboardDashboard ID:13659或13660核心价值回顾黑盒监控从用户视角验证服务的可用性能在用户发现问题之前主动告警。它与白盒监控相辅相成——黑盒监控回答“通不通”白盒监控回答“为什么不通”。将 Blackbox Exporter 部署在与业务不同的网络位置如云端当 IDC 机房网络中断时黑盒监控依然能正常工作第一时间发现故障并告警——这正是黑盒监控不可替代的价值所在。下一步建议配置 Alertmanager 实现邮件/钉钉/企业微信告警在多个地域部署 Blackbox Exporter实现多节点探测结合业务指标制定合理的 SLO服务等级目标
Prometheus 黑盒监控完全指南:从零搭建到 Grafana 可视化
发布时间:2026/7/7 13:35:38
前言在上一篇文章中我们学习了如何使用各种 Exporter 对服务器、数据库、中间件进行白盒监控——即从内部采集 CPU、内存、连接数等指标。但有一个关键问题始终没有解决我的服务对外到底能不能正常访问这就是黑盒监控的用武之地。本文将从零开始带你完整搭建一套基于 Prometheus Blackbox Exporter Grafana 的黑盒监控体系监控你的网站、API、端口是否可用并用 Grafana 展示出来。一、什么是黑盒监控为什么要用它1.1 白盒监控 vs 黑盒监控在监控领域有两种截然不同的监控思路维度白盒监控White-box黑盒监控Black-box视角从内部看系统从外部看系统数据来源系统内部暴露的指标CPU、内存、日志主动探测外部端点HTTP请求、Ping、TCP连接回答的问题“系统内部运行正常吗”“用户能正常访问吗”典型工具Node Exporter、MySQL ExporterBlackbox Exporter局限性服务器全挂时监控也随之失效无法获知故障的根本原因白盒监控依赖系统内部暴露的指标能深入分析故障根因。但当服务器因网络问题全部失联时白盒监控也随之失效。黑盒监控则从外部模拟用户行为主动探测能回答“服务到底通不通”这个最根本的问题。它的核心价值在于在用户投诉之前先发现服务不可用。一个形象的比喻白盒监控是体检检查身体内部各项指标黑盒监控是实战测试真刀真枪去跑一下看看能不能跑。1.2 Blackbox Exporter 是什么Blackbox Exporter 是 Prometheus 官方提供的黑盒监控工具支持通过HTTP/HTTPS、TCP、DNS、ICMP等多种协议主动探测目标端点。它可以检测网站/API 是否返回正确的 HTTP 状态码响应时间是否超过阈值TLS/SSL 证书是否即将过期服务器是否响应 Ping 请求TCP 端口是否开放如 3306、6379、221.3 整体架构text┌─────────────┐ 抓取指标 ┌──────────────────┐ 探测请求 ┌─────────────┐ │ Prometheus │ ──────────────▶ │ Blackbox Exporter │ ─────────────▶ │ 目标服务 │ │ (9090) │ ◀────────────── │ (9115) │ ◀───────────── │ (网站/API/ │ └─────────────┘ 返回指标 └──────────────────┘ 探测结果 │ 端口等) │ │ └─────────────┘ │ 查询数据 ▼ ┌─────────────┐ │ Grafana │ │ (3000) │ └─────────────┘工作流程Prometheus 定期向 Blackbox Exporter 发起抓取请求携带目标地址和探测模块参数Blackbox Exporter 根据配置对目标执行探测HTTP 请求、TCP 连接、Ping 等Blackbox Exporter 将探测结果成功/失败、耗时、状态码等返回给 PrometheusGrafana 从 Prometheus 查询数据并展示二、安装与部署 Blackbox Exporter2.1 环境准备一台 Linux 服务器CentOS 7/8 或 Ubuntu 20.04已安装 Prometheus参考之前的文章已安装 Grafana后续会用到2.2 下载与安装bash# 下载 Blackbox Exporter以 v0.25.0 为例 wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz # 解压 tar xvfz blackbox_exporter-0.25.0.linux-amd64.tar.gz # 将二进制文件移动到系统路径 sudo mv blackbox_exporter-0.25.0.linux-amd64/blackbox_exporter /usr/local/bin/ # 创建配置目录 sudo mkdir -p /etc/blackbox_exporter2.3 创建专用系统用户bash# 创建无登录权限的系统用户 sudo useradd --no-create-home --shell /bin/false blackbox_exporter2.4 创建 Systemd 服务bashsudo tee /etc/systemd/system/blackbox_exporter.service EOF [Unit] DescriptionBlackbox Exporter Afternetwork.target [Service] Userblackbox_exporter Groupblackbox_exporter Typesimple ExecStart/usr/local/bin/blackbox_exporter --config.file/etc/blackbox_exporter/blackbox.yml Restartalways [Install] WantedBymulti-user.target EOF三、核心配置文件详解Blackbox Exporter 的核心配置文件是blackbox.yml。它定义了各种探测模块modules每个模块指定了探测协议、超时时间、验证规则等。3.1 完整配置示例创建配置文件/etc/blackbox_exporter/blackbox.ymlyamlmodules: # HTTP 探测模块 # 用于监控网站/API 的可用性 http_2xx: prober: http timeout: 5s http: valid_status_codes: [200, 301, 302] method: GET no_follow_redirects: false fail_if_ssl: false fail_if_not_ssl: false # HTTP 探测 响应内容正则匹配 http_content_check: prober: http timeout: 5s http: valid_status_codes: [200] method: GET fail_if_not_matches_regexp: - Welcome to.* - 正常运行 # HTTPS 严格校验证书验证 https_2xx: prober: http timeout: 5s http: valid_status_codes: [200, 301, 302] method: GET tls_config: insecure_skip_verify: false fail_if_not_ssl: true # TCP 探测模块 # 用于监控端口是否开放如 MySQL 3306、Redis 6379、SSH 22 tcp_connect: prober: tcp timeout: 3s # TCP 探测 响应内容匹配如 SSH banner ssh_banner_check: prober: tcp timeout: 3s tcp: query_response: - expect: ^SSH-2.0 # ICMP 探测模块 # 用于监控主机是否存活Ping icmp: prober: icmp timeout: 5s icmp: preferred_ip_protocol: ip4 # DNS 探测模块 # 用于监控 DNS 解析是否正常 dns_example: prober: dns timeout: 5s dns: transport_protocol: tcp query_name: example.com query_type: A3.2 配置项说明配置项说明示例prober探测协议类型http、tcp、icmp、dnstimeout探测超时时间5svalid_status_codesHTTP 允许的状态码列表[200, 301]methodHTTP 请求方法GET、POSTheaders自定义请求头User-Agent: Blackboxfail_if_not_matches_regexp响应内容必须匹配的正则Welcome.*tls_configTLS/SSL 证书验证配置insecure_skip_verify: falsequery_responseTCP 期望的响应正则匹配expect: ^SSH-3.3 启动 Blackbox Exporterbash# 重新加载 systemd 配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start blackbox_exporter # 设置开机自启 sudo systemctl enable blackbox_exporter # 查看运行状态 sudo systemctl status blackbox_exporterBlackbox Exporter 默认监听在9115 端口。验证是否正常运行bashcurl http://localhost:9115/metrics | head -20如果能看到 Prometheus 格式的指标输出说明运行成功2.5 配置防火墙bash# CentOS 7 sudo firewall-cmd --permanent --add-port9115/tcp sudo firewall-cmd --reload # Ubuntu sudo ufw allow 9115/tcp四、配置 Prometheus 抓取 Blackbox Exporter4.1 编辑 Prometheus 配置文件编辑/etc/prometheus/prometheus.yml在scrape_configs下添加 Blackbox Exporter 的抓取任务yamlscrape_configs: # ... 其他 job 配置 ... # 监控 Blackbox Exporter 自身 - job_name: blackbox_exporter static_configs: - targets: [localhost:9115] # 黑盒监控任务 - job_name: blackbox # 抓取路径固定为 /probe metrics_path: /probe params: # 使用的探测模块对应 blackbox.yml 中的模块名 module: [http_2xx] static_configs: # 要探测的目标列表 - targets: - https://www.baidu.com - https://www.google.com - http://your-api-server.com:8080/health relabel_configs: # 将目标的 URL 作为参数传递给 Blackbox Exporter - source_labels: [__address__] target_label: __param_target # 将目标 URL 作为 instance 标签 - source_labels: [__param_target] target_label: instance # 将请求重新指向 Blackbox Exporter 自身 - target_label: __address__ replacement: localhost:91154.2 多模块配置示例推荐实际生产环境中你可能需要同时监控 HTTP 网站、TCP 端口和 ICMP 存活。可以配置多个抓取任务每个使用不同的模块yamlscrape_configs: # HTTP 网站监控 - job_name: blackbox_http metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - https://www.baidu.com - https://www.taobao.com - http://localhost:8080/actuator/health relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # HTTPS 严格校验证书验证 - job_name: blackbox_https_strict metrics_path: /probe params: module: [https_2xx] static_configs: - targets: - https://your-bank-api.com relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # TCP 端口监控MySQL、Redis、SSH 等 - job_name: blackbox_tcp metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - 192.168.1.100:3306 # MySQL - 192.168.1.100:6379 # Redis - 192.168.1.101:22 # SSH relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:9115 # ICMP 主机存活监控 - job_name: blackbox_icmp metrics_path: /probe params: module: [icmp] static_configs: - targets: - 192.168.1.1 # 网关 - 8.8.8.8 # Google DNS relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: localhost:91154.3 重启 Prometheusbash# 检查配置文件语法 promtool check config /etc/prometheus/prometheus.yml # 重启 Prometheus sudo systemctl restart prometheus4.4 验证抓取状态在浏览器中访问http://服务器IP:9090/targets查看blackbox_http、blackbox_tcp、blackbox_icmp等任务的状态是否为UP。如果某个目标显示为DOWN可以点击该目标查看详细错误信息帮助定位问题。五、核心监控指标解读Blackbox Exporter 会输出以下关键指标指标名称类型含义probe_successGauge探测是否成功1成功0失败probe_duration_secondsGauge探测总耗时秒probe_http_status_codeGaugeHTTP 响应状态码probe_http_redirectsGauge重定向次数probe_ssl_last_expired_atGaugeSSL 证书过期时间戳probe_dns_lookup_time_secondsGaugeDNS 解析耗时probe_tcp_connect_time_secondsGaugeTCP 连接耗时最重要的指标是probe_success。当它为 0 时说明目标服务不可用可以基于此配置告警。六、Grafana 可视化配置数据采集只是第一步接下来我们用 Grafana 将监控数据以直观的仪表盘展示出来。6.1 添加 Prometheus 数据源步骤一在浏览器中访问 Grafana默认http://服务器IP:3000默认用户名和密码均为admin。步骤二点击左侧菜单栏的Connections→Data Sources。步骤三点击Add data source选择Prometheus。步骤四在HTTP区域URL 填写 Prometheus 的地址如http://localhost:9090。步骤五点击Save Test如果显示绿色成功提示说明数据源配置正确。6.2 方式一导入现成 Dashboard推荐Grafana 官网提供了多个 Blackbox Exporter 的现成 Dashboard可以直接导入使用。推荐 DashboardDashboard 名称ID特点Blackbox Exporter13659官方推荐全面监控 Blackbox 各项指标Blackbox Exporter Dashboard 2022041213660支持 TCP/ICMP/HTTPS中文界面Smokeping blackbox_exporter13661类似 Smokeping 的延迟图表导入步骤在 Grafana 左侧菜单点击Dashboards→New→Import在Import via grafana.com输入框中输入 Dashboard ID如13659点击Load选择之前配置的 Prometheus 数据源点击Import一个完整的 Blackbox Exporter 监控大屏就创建好了它将自动展示所有监控目标的可用性状态UP/DOWN各目标的响应时间趋势HTTP 状态码分布SSL 证书过期时间倒计时6.3 方式二手动创建自定义面板如果你想自定义监控面板可以手动创建。创建一个“服务可用性”面板点击→Dashboard→Add new panel在查询编辑器中输入以下 PromQLpromqlprobe_success{jobblackbox_http}右侧Visualization选择Stat状态值展示设置Thresholds0 → 红色Down1 → 绿色Up点击Apply保存创建一个“响应时间”面板点击Add panel输入 PromQLpromqlprobe_duration_seconds{jobblackbox_http}选择Time series图表类型设置图例显示为{{instance}}点击Apply保存创建一个“HTTP 状态码”面板点击Add panel输入 PromQLpromqlprobe_http_status_code{jobblackbox_http}选择Stat或Table展示点击Apply保存6.4 最终 Dashboard 效果预览完成配置后你的 Grafana Dashboard 将展示服务可用性总览所有监控目标的健康状态一目了然响应时间趋势图各目标响应时间的历史变化HTTP 状态码分布快速发现异常状态码SSL 证书到期提醒证书即将过期时高亮显示丢包率统计ICMP 探测网络质量可视化七、生产环境最佳实践7.1 部署位置选择Blackbox Exporter 建议部署在与目标服务不同的网络位置监控公网服务 → 部署在云服务器上监控内网服务 → 部署在同一内网的不同网段多地冗余 → 在不同地域部署多个 Blackbox Exporter7.2 超时时间设置超时时间应根据网络环境合理设置内网探测2s-3s公网探测5s-10s跨地域探测10s-15s7.3 告警配置建议在 Prometheus 告警规则中配置yamlgroups: - name: blackbox_alerts rules: - alert: ServiceDown expr: probe_success{jobblackbox_http} 0 for: 1m labels: severity: critical annotations: summary: 服务 {{ $labels.instance }} 不可用 description: 探测失败请立即检查 - alert: SSLExpiringSoon expr: (probe_ssl_last_expired_at - time()) / 86400 7 labels: severity: warning annotations: summary: SSL 证书将在 {{ $value }} 天后过期7.4 监控频率核心服务15s或30s探测一次一般服务60s探测一次调整 Prometheus 的scrape_interval即可八、故障排查指南8.1 Blackbox Exporter 无法启动bash# 查看日志 sudo journalctl -u blackbox_exporter -f # 检查配置文件语法 /usr/local/bin/blackbox_exporter --config.file/etc/blackbox_exporter/blackbox.yml --check8.2 Prometheus 抓取失败在 Prometheus Targets 页面查看错误信息常见原因目标地址无法访问检查网络和防火墙超时时间太短调整timeout配置模块名称错误检查params.module是否匹配8.3 probe_success 一直为 0手动测试目标是否可达curl -I https://your-target.com检查 Blackbox Exporter 日志中的具体错误确认目标是否需要特定的请求头或认证九、总结本文完整介绍了基于 Prometheus Blackbox Exporter Grafana 的黑盒监控体系搭建全过程步骤操作关键文件/命令1安装 Blackbox Exporterwget下载/usr/local/bin/2配置探测模块/etc/blackbox_exporter/blackbox.yml3启动服务systemctl start blackbox_exporter4配置 Prometheus 抓取/etc/prometheus/prometheus.yml5重启 Prometheussystemctl restart prometheus6Grafana 添加数据源Grafana Web UI → Connections → Data Sources7导入 DashboardDashboard ID:13659或13660核心价值回顾黑盒监控从用户视角验证服务的可用性能在用户发现问题之前主动告警。它与白盒监控相辅相成——黑盒监控回答“通不通”白盒监控回答“为什么不通”。将 Blackbox Exporter 部署在与业务不同的网络位置如云端当 IDC 机房网络中断时黑盒监控依然能正常工作第一时间发现故障并告警——这正是黑盒监控不可替代的价值所在。下一步建议配置 Alertmanager 实现邮件/钉钉/企业微信告警在多个地域部署 Blackbox Exporter实现多节点探测结合业务指标制定合理的 SLO服务等级目标