详解http模块

如果点击上一节浏览器界面的Probe prometheus.io for http_2xx链接,会发现返回的结果是失败。明明在浏览器中可以访问prometheus.io官网,但这里显示失败是为什么呢?

image-20210505202412300 如果点击上面的Debug probe prometheus.io for http_2xx ,(即访问此URL: http://localhost:9115/probe?target=prometheus.io&module=http_2xx&debug=true ) 会在日志中发现原因:

image-20210505202458499 解析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

结果如下:

image-20210505203646589

此时刷新根路径页面,访问结果为Success

image-20210505202843362

检查http返回结果

有时我们需要判断URL返回的html中是否含有某个关键字,例如result: success,否则我们就认为页面没有访问成功。使用blackbox可以方便地实现该功能。

还以prometheus.io官网为例:

image-20210505204312789 页面返回了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:

image-20210505204753264