这是近期一位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 请求,并区分不同机房的监控指标。希望这个案例能够帮助到有类似需求的读者。
还没有评论,来说两句吧...