使用Prometheus + Blackbox Exporter实现多机房的探针监控

关注公众号,获取更多精彩内容
这是近期一位Prometheus专栏读者跟我咨询的技术问题,我觉得这个案例挺实用的,因此也把方案给大伙分享一下。
一. 背景
假设现在有三个机房,每个机房都部署了一个 Blackbox Exporter 实例。我们希望这三个实例监控 www.xx.com 域名的 HTTP 请求情况,并通过 Prometheus 获取监控指标。当某个位置访问网站出现延迟或无法响应时,Prometheus将触发相关的告警通知。

这个案例很具有实用性,因为有不少企业都需要清楚对外网站在不同地区的访问情况。这类需求往往需要花钱购买第三方厂商的服务,但你也可以像这个案例一样,通过自建的方式来实现。

案例的难点主要在于如何在一个任务中同时调用多个Blackbox 节点,并且还需要区分不同位置的指标数据,这样才能在告警中清晰展示。

二. 处理思路
1. 部署Blackbox Exporter
探针监控使用的是Blackbox Exporter,该Exporter支持ping、http、dns等多种方式的检测 ,适合于网站、API、端口等多种目标的检测 。
因此,第一步我们需要在每个机房部署 Blackbox Exporter,可以通过 Docker 容器来部署。
$docker run -d --name=blackbox_exporter -p 9115:9115 prom/blackbox-exporter:latest

确保每个机房的 Blackbox Exporter 实例运行在不同的地址,例如: 

http://blackbox1.example.com:9115

http://blackbox2.example.com:9115

http://blackbox3.example.com:9115

2. 配置Prometheus 

接下来,我们需要配置Prometheus 来收集来自 Blackbox Exporter 的指标。

在 Prometheus 的配置文件中添加以下内容:

global:  scrape_interval: 15s
scrape_configs: - job_name: 'http' metrics_path: /probe params: module: [http_2xx] static_configs: - targets: - https://www.xx.com labels: instance: 'xx-com' location: 'blackbox1' - targets: - https://www.xx.com labels: instance: 'xx-com' location: 'blackbox2' - targets: - https://www.xx.com labels: instance: 'xx-com' location: 'blackbox3'
relabel_configs: - source_labels: [__address__] target_label: __param_target
- target_label: __address__ replacement: blackbox1.example.com:9115 source_labels: [location] regex: blackbox1
- target_label: __address__ replacement: blackbox2.example.com:9115 source_labels: [location] regex: blackbox2
- target_label: __address__ replacement: blackbox3.example.com:9115 source_labels: [location] regex: blackbox3
- source_labels: [__param_target] target_label: instance
参数详解:
global:
  • scrape_interval: 设置 Prometheus 抓取数据的间隔时间,这里设置为每 15 秒抓取一次。
scrape_configs:
  • targets: 指定需要监控的目标网址为 https://www.xx.com
  • labels: 为每个目标设置标签 instance 和 location,以区分不同的实例和机房。
  • job_name: 设置抓取任务的名称,这里命名为 http
  • metrics_path: 指定抓取路径为 /probe
  • params: 设置探测模块为 http_2xx,即只探测 HTTP 2xx 响应码。
static_configs:
  • targets: 定义了要监控的目标。在这个例子中,目标是 https://www.xx.com。
  • instance: 设置目标的实例标签,这里统一命名为 xx-com。
  • location: 这里分别标记为 blackbox1、blackbox2 和 blackbox3,以区分由不同 Blackbox Exporter 实例进行的探测。
relabel_configs:
  • source_labels: 从抓取目标地址中提取标签并重新配置。
  • target_label: 设置最终的目标标签。
  • replacement: 指定 Blackbox Exporter 实例的地址,根据不同的 location 标签进行替换。
  • regex: 使用正则表达式匹配不同的 location 标签。

3. 验证配置

部署完成后,可以通过访问 Prometheus 的Web UI来验证配置是否生效。
在 Web UI 中,可以通过以下查询来查看不同机房的监控数据:
probe_success{location="blackbox1"}probe_success{location="blackbox2"}probe_success{location="blackbox3"}

这将返回每个机房对 www.xx.com 的探测结果。如果结果为 1,表示探测成功;如果为 0,表示探测失败。

4. 添加告警规则

为了及时发现问题,我们可以为Prometheus 添加告警规则。

在 Prometheus 的配置文件中添加以下内容:

rule_files:  - "alert.rules"
alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093
groups: - name: example rules: - alert: WebsiteDown expr: probe_success == 0 for: 1m labels: severity: page annotations: summary: "Instance {{ $labels.instance }} down"          description: "{{ $labels.location}} {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute."
至此,我们已经完成了 Blackbox Exporter 和 Prometheus 的配置和部署,并添加了基本的告警规则。

结语

通过本文,我们详细介绍了如何使用 Blackbox Exporter 和 Prometheus 监控多个机房的 HTTP 请求,并区分不同机房的监控指标。希望这个案例能够帮助到有类似需求的读者。

如果你想更加深入地学习相关监控技术,欢迎订阅本公众号推出的Prometheus专栏。

全文结方便的话可以随手点个“赞”或者“在看”,也欢迎分享文章到朋友圈和技术群,感谢阅读!

请使用浏览器的分享功能分享到微信等