云计算百科
云计算领域专业知识百科平台

监控面板全绿,用户却说网站打不开?Blackbox Exporter从外部验证服务到底能不能访问

监控面板全绿,用户却说网站打不开?Blackbox Exporter从外部验证服务到底能不能访问

前言

Prometheus里CPU、内存、进程状态全是绿色,并不代表用户真的能打开网站。服务进程可能还活着,但DNS、网络链路、端口、反向代理或上游连接中的任何一环出问题,外部访问依然可能失败。

这篇要补上的,就是传统内部指标之外那层“从用户视角看服务到底能不能访问”。Blackbox Exporter不会去读应用内部状态,而是主动向目标发起HTTP、TCP、ICMP等探测,再把可达性、响应结果和探测指标交给Prometheus。

正文会先在Ubuntu上运行Blackbox Exporter,再配置探测模块,并把HTTP目标和Ping目标接入Prometheus。这样不仅能看到某个服务有没有正常响应,还可以继续观察链路是否出现明显丢包。

后面还会给Ping监控增加告警规则,当一段时间内探测失败达到条件时,由Prometheus直接触发告警。这样“服务看起来活着”和“外部真的能访问”就不再混为一件事。

对于网站、API或依赖网络链路的服务来说,这一层监控尤其重要,因为“进程还在”与“用户能访问”本来就是两件不同的事。

最后再通过cpolar给Prometheus页面增加外部访问入口。整篇真正跑的是Blackbox从外部主动探测 → Prometheus采集探测结果 → HTTP/ICMP验证服务可达性 → 丢包异常触发告警 → 需要时远程查看监控页面这条链。

image-20251114174040027

1.ubuntu安装Blackbox_Exporter监控数据

通过以下命令创建一个用于存放Blackbox_Exporter的目录 /app:

mkdir /app

进入到/app目录下:

cd /app

image-20251111145856908

从prometheus官网下载压缩文件:https://prometheus.io/download/

下载适用于Linux系统的文件。

image-20251111165128410

下载完成后记住下载路径。

手动上传到/app下载好的Blackbox_Exporter文件。

image-20251111165537027

上传成功后解压:

tar -zxvf blackbox_exporter-0.27.0.linux-arm64.tar.gz

image-20251111165607205

改名方便记忆:

mv blackbox_exporter-0.27.0.linux-arm64 blackbox_exporter

image-20251111165652748

将Altermanager配置为系统服务:

cd /usr/lib/systemd/system

vim blackbox_exporter.service

[Unit]
Description=https://prometheus.io

[Service]
Restart=on-failure
ExecStart=/app/alertmanager –config.file=/app/alertmanager.yml

[Install]
WantedBy=multi-user.target

image-20251111165946634

加载system文件,启动alertmanager这个服务,并设置开机启动:

systemctl daemon-reload
systemctl start blackbox_exporter.service
systemctl enable blackbox_exporter.service

image-20251111170045767

启动成功后,访问blackbox_exporter,ip+9115,默认端口为 9115。

image-20251111170204372

2.配置prometheus监控Blackbox_Exporter指标

服务进程正常但用户仍然连不上时,就需要继续从外部链路去验证可达性。这里使用 Prometheus + Blackbox Exporter 的 Ping 探测,把目标是否能连通以及链路是否出现明显丢包纳入监控。

以防万一怕操作错误,先把原来的配置文件先备份,之后配置配置文件:

mv blackbox.yml blackbox.yml
vi blackbox.yml

modules:
http_2xx:
prober: http
http_post_2xx:
prober: http
http:
method: POST
tcp_connect:
prober: tcp
pop3s_banner:
prober: tcp
tcp:
query_response:
– expect: "^+OK"
tls: true
tls_config:
insecure_skip_verify: false
ssh_banner:
prober: tcp
tcp:
query_response:
– expect: "^SSH-2.0-"
irc_banner:
prober: tcp
tcp:
query_response:
– send: "NICK prober"
– send: "USER prober prober prober :prober"
– expect: "PING :([^ ]+)"
send: "PONG ${1}"
– expect: "^:[^ ]+ 001"
icmp:
prober: icmp
icmp:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: "ip4"

image-20251111170712116

重新启动black_exporter服务:

systemctl restart blackbox_exporter.service

image-20251111170732786

修改prometheus配置文件:

vi prometheus.yml

image-20251111171111346

添加告警配置(添加自己想监控的地址):

– job_name: "http"
metrics_path: /probe
scrape_interval: 60s
params:
module: [http_2xx]
static_configs:
– targets:
– http://192.168.50.134:9100/
relabel_configs:
– source_labels: [__address__]
target_label: __param_target
– source_labels: [__param_target]
target_label: instance
– target_label: __address
replacement: 192.168.50.134:9115

– job_name: 'ping_monitor'
metrics_path: /probe
params:
module: [icmp]
static_configs:
– targets:
– www.baidu.com
– www.google.com
relabel_configs:
– source_labels: [__address__]
target_label: __param_target
– source_labels: [__param_target]
target_label: instance
– target_label: __address__
replacement: 192.168.50.134:9115

image-20251111171317884

重启prometheus服务后,可以查看到我们添加的指标;

image-20251111172138194

配置告警规则:

groups:
– name: icmp-loss-alerts
rules:
– alert: HighPingLossRate
expr: |
1 – avg_over_time(probe_success{job="ping_monitor"}[5m]) > 0.5
for: 2m
labels:
severity: warning
annotations:
summary: "高 Ping 丢包率 (实例: {{ $labels.instance }})"
description: "目标 {{ $labels.instance }} 在过去 5 分钟内的 Ping 丢包率超过 50%(当前丢包率: {{ $value | printf \\"%.2f\\" }})"

image-20251111171409566

重启prometheus服务:

systemctl restart prometheus

image-20251111171508282

重启Prometheus以后,就可以继续查看刚刚配置的探测目标和告警规则。

image-20251111172206903

前面的Blackbox探测和Prometheus告警已经能够在本地网络中使用。如果还希望从其他网络环境查看Prometheus页面,就可以再给这个Web界面增加一个外部访问入口。

3.安装cpolar实现外部访问

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

e464b045413a024674a93ea472511b0f

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudo systemctl status cpolar

aa03713b56d9eef12a4da6b99d2e46ac

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

4.配置公网地址

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

3af79ad708cc47c5bbea0b63c2c7230d

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了:prometheus,注意不要与已有的隧道名称重复

  • 协议:http

  • 本地地址:9090

  • 域名类型:随机域名

  • 地区:选择China Top

    点击创建:

image-20251114153323878

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用地址访问。

image-20251114153623930

访问成功。

image-20251114153828083

5.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

1b5b18459db4d0a167e947c02c3e14aa

点击左侧的预留,选择保留二级子域名,地区选择china top,然后设置一个二级子域名名称,我这里演示使用的是prometheus,大家可以自定义。填写备注信息,点击保留。

image-20251114154041459

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道prometheus,点击右侧的编辑。

image-20251114154117950

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

image-20251114154207469

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

image-20251114154224055

最后,我们使用固定的公网地址在任意设备的浏览器中访问,可以看到成功访问本地部署的prometheus页面,这样一个永久不会变化的二级子域名公网网址即设置好了。

image-20251114154303348

固定地址能够正常访问以后,Prometheus页面就有了一个长期可复用的外部入口。

总结

这篇真正解决的,不是“Prometheus还能再多采一个指标”,而是补上内部监控很容易忽略的一层:服务进程和主机资源都正常时,外部用户到底还能不能真正访问。

Blackbox Exporter负责主动去探测目标,Prometheus再采集这些探测结果。正文同时配置了HTTP目标和ICMP Ping目标,让网站响应和网络可达性都能从外部视角被观察。

继续加上丢包告警以后,监控就从“看一眼当前状态”变成了可以主动发现异常。即使主机本身没有明显故障,只要外部探测持续失败,也能够通过规则触发告警。

后半段的cpolar只是把Prometheus页面扩展到其他网络环境查看。Blackbox负责探测,Prometheus负责采集与告警,cpolar负责远程查看入口,这样整套监控最终回答的是同一个问题:服务不仅要运行着,还要真的能被访问到。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 监控面板全绿,用户却说网站打不开?Blackbox Exporter从外部验证服务到底能不能访问
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!