如果点击上一节浏览器界面的Probe prometheus.io for http_2xx链接,会发现返回的结果是失败。明明在浏览器中可以访问prometheus.io官网,但这里显示失败是为什么呢?
如果点击上面的Debug probe prometheus.io for http_2xx ,(即访问此URL: http://localhost:9115/probe?target=prometheus.io&module=http_2xx&debug=true ) 会在日志中发现原因:
解析prometheus.io返回DNS时一同返回了ipv6地址,由于本机不支持但仍使用IPv6地址访问,所以不会访问成功。
编辑blackbox的配置文件blackbox.yml
,加入一条自定义配置http_ipv4
:
modules:
http_2xx:
prober: http
# ---------- 加入自定义配置-------------
http_ipv4: # 自定义使用ipv4访问URL
prober: http
http:
preferred_ip_protocol: ip4
#------------自定义配置结束 ---------------
http_post_2xx:
prober: http
http:
method: POST
.......
重新运行blackbox二进制文件以加载最新配置:
./blackbox_exporter
使用新的自定义模块访问prometheus.io: http://localhost:9115/probe?target=prometheus.io&module=http_ipv4
结果如下:
此时刷新根路径页面,访问结果为Success
有时我们需要判断URL返回的html中是否含有某个关键字,例如result: success,否则我们就认为页面没有访问成功。使用blackbox可以方便地实现该功能。
还以prometheus.io官网为例:
页面返回了open-source monitoring solution 关键字。
我们在blackbox.yml
中配置以下内容,如果检测不到对应关键字,则认为访问失败:
modules:
http_2xx:
prober: http
http_find_keyword: # 配置访问关键字的内容
prober: http
http:
preferred_ip_protocol: ip4
fail_if_body_not_matches_regexp:
- "open-source monitoring solution"
http_post_2xx:
prober: http
......
重启blackbox,并使用http_find_keyword 模块访问:
http://localhost:9115/probe?target=prometheus.io&module=http_find_keyword
此时页面返回的结果还是成功。
如果我们将检测的内容做更新:
modules:
http_2xx:
prober: http
http_find_keyword:
prober: http
http:
preferred_ip_protocol: ip4
fail_if_body_not_matches_regexp:
- "open-source monitoring solutionnnnnnnnn" # 更新为页面不存在的内容
http_post_2xx:
prober: http
重启blackbox,重新访问:
http://localhost:9115/probe?target=prometheus.io&module=http_find_keyword
在新的返回结果中,很显示地看到probe_success 0: