www.xx.com
域名的 HTTP 请求情况,并通过 Prometheus 获取监控指标。当某个位置访问网站出现延迟或无法响应时,Prometheus将触发相关的告警通知。这个案例很具有实用性,因为有不少企业都需要清楚对外网站在不同地区的访问情况。这类需求往往需要花钱购买第三方厂商的服务,但你也可以像这个案例一样,通过自建的方式来实现。
案例的难点主要在于如何在一个任务中同时调用多个Blackbox 节点,并且还需要区分不同位置的指标数据,这样才能在告警中清晰展示。
$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
scrape_interval
: 设置 Prometheus 抓取数据的间隔时间,这里设置为每 15 秒抓取一次。
targets
: 指定需要监控的目标网址为https://www.xx.com
。labels
: 为每个目标设置标签instance
和location
,以区分不同的实例和机房。job_name
: 设置抓取任务的名称,这里命名为http
。metrics_path
: 指定抓取路径为/probe
。params
: 设置探测模块为http_2xx
,即只探测 HTTP 2xx 响应码。
targets: 定义了要监控的目标。在这个例子中,目标是 https://www.xx.com。 instance: 设置目标的实例标签,这里统一命名为 xx-com。 location: 这里分别标记为 blackbox1、blackbox2 和 blackbox3,以区分由不同 Blackbox Exporter 实例进行的探测。
source_labels
: 从抓取目标地址中提取标签并重新配置。target_label
: 设置最终的目标标签。replacement
: 指定 Blackbox Exporter 实例的地址,根据不同的location
标签进行替换。regex
: 使用正则表达式匹配不同的location
标签。
3. 验证配置
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"
"{{ $labels.location}} {{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute." :
结语
通过本文,我们详细介绍了如何使用 Blackbox Exporter 和 Prometheus 监控多个机房的 HTTP 请求,并区分不同机房的监控指标。希望这个案例能够帮助到有类似需求的读者。
如果你想更加深入地学习相关监控技术,欢迎订阅本公众号推出的Prometheus专栏。
全文结束,方便的话可以随手点个“赞”或者“在看”,也欢迎分享文章到朋友圈和技术群,感谢阅读!