Prometheus监控 Blackbox_exporter黑盒监测

一、Blackbox_exporter应用场景

blackbox_exporter是Prometheus 官方提供的 exporter 之一,可以提供 http、dns、tcp、icmp 的监控数据采集。

  • HTTP 测试
    定义 Request Header 信息
    判断 Http status / Http Respones Header / Http Body 内容
  • TCP 测试
    业务组件端口状态监听
    应用层协议定义与监听
  • ICMP 测试
    主机探活机制
  • POST 测试
    接口联通性
  • SSL 证书过期时间
二、blackbox_exporter安装

2.1 Docker方式安装

docker pull prom/blackbox-exporter

docker run -d -p 9115:9115 --name blackbox-exporter  prom/blackbox-exporter


2.2 宿主机安装

各个版本的blackbox_exporter https://github.com/prometheus/blackbox_exporter/releases
以linux系统为例,下载编译好的二进制包,解压使用:

wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.16.0/blackbox_exporter-0.16.0.linux-amd64.tar.gztar -zxvf blackbox_exporter-0.16.0.linux-amd64.tar.gz -C /datamv /data/blackbox_exporter-0.16.0.linux-amd64 /data/blackbox_exporter


验证是否安装成功:

# cd /data/blackbox_exporter/# ./blackbox_exporter --version


启动:

nohup ./blackbox_exporter &

blackbox_exporter --web.listen-address=:9115 --config.file=blackbox.yml


默认监听端口为9115:

# ss -tunlp|grep 9115tcp    LISTEN     0      32768                  *:9115                  *:*      users:(("blackbox_export",29880,3))


三、blackbox_exporter配置

基本的配置:

modules:
  http_2xx:  # http 监测模块
    prober: http    http:
  http_post_2xx: # http post 监测模块
    prober: http    http:
      method: POST  tcp_connect: # tcp 监测模块
    prober: tcp  ping: # icmp 检测模块
    prober: icmp    timeout: 5s    icmp:
      preferred_ip_protocol: "ip4"


四、Prometheus配置

4.1 ping监测

在内网可以通过ping (icmp)检测服务器的存活,以前面的最基本的module配置为例,在Prometheus的配置文件中配置使用ping module:

- job_name: 'ping_all'
    scrape_interval: 1m    metrics_path: /probe    params:
      module: [ping]
    static_configs:
     - targets:
        - 192.168.1.2       labels:
         instance: node2     - targets:
        - 192.168.1.3       labels:
         instance: node3    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      - target_label: __address__        replacement: 127.0.0.1:9115 # black_exporter 这里和Prometheus在一台机器上


通过配置文件可以很直接的看出Prometheus使用black_exporter作为代理使用black_exporter配置的module检测各个target的状态。 下面是一个http://127.0.0.1:9115/probe?module=ping&target=192.168.1.2返回的是192.168.1.2这个target的metrics。

#DNS解析时间,单位 sprobe_dns_lookup_time_seconds 0.039431355#探测从开始到结束的时间,单位 s,请求这个页面响应时间probe_duration_seconds 0.651619323

probe_failed_due_to_regex 0#HTTP 内容响应的长度probe_http_content_length -1#按照阶段统计每阶段的时间probe_http_duration_seconds{phase="connect"} 0.050388884   #连接时间probe_http_duration_seconds{phase="processing"} 0.45868667 #处理请求的时间probe_http_duration_seconds{phase="resolve"} 0.040037612  #响应时间probe_http_duration_seconds{phase="tls"} 0.145433254    #校验证书的时间probe_http_duration_seconds{phase="transfer"} 0.000566269#重定向的次数probe_http_redirects 1#ssl 指示是否将 SSL 用于最终重定向probe_http_ssl 1#返回的状态码probe_http_status_code 200#未压缩的响应主体长度probe_http_uncompressed_body_length 40339#http 协议的版本probe_http_version 1.1#使用的 ip 协议的版本号probe_ip_protocol 4

probe_ssl_earliest_cert_expiry 1.59732e+09#是否探测成功probe_success 1#TLS 的版本号probe_tls_version_info{version="TLS 1.2"} 1


4.2 http监测-监测网站状态

以前面的最基本的module配置为例,在Prometheus的配置文件中配置使用http_2xx module:

- job_name: 'http_get_all'  # blackbox_export module
    scrape_interval: 30s    metrics_path: /probe    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://frognew.com        - 172.0.0.1:9090
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      - source_labels: [__param_target]
        target_label: instance      - target_label: __address__        replacement: 127.0.0.1:9115 #blackbox-exporter 所在的机器和端口


http检测除了可以探测http服务的存活外,还可以根据指标probe_ssl_earliest_cert_expiry进行ssl证书有效期预警。

4.3 ICMP监测-监控主机存活状态

- job_name: node_status    metrics_path: /probe    params:
      module: [icmp]
    static_configs:
      - targets: ['10.165.94.31']
        labels:
          instance: node_status          group: 'node'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      - target_label: __address__        replacement: 172.19.155.133:9115


10.165.94.31是被监控端ip,172.19.155.133是Blackbox_exporter

4.4 TCP监测-监控主机端口存活状态

  • 监听 业务端口地址,用来判断服务是否在线,我觉的和telnet 差不多
  • 相关代码块添加到 Prometheus 文件内
  • 对应 blackbox.yml文件的 tcp_connect 模块
- job_name: 'prometheus_port_status'
    metrics_path: /probe    params:
      module: [tcp_connect]
    static_configs:
      - targets: ['172.19.155.133:8765']
        labels:
          instance: 'port_status'
          group: 'tcp'
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      - source_labels: [__param_target]
        target_label: instance      - target_label: __address__        replacement: 172.19.155.133:9115


4.5 SSL 证书过期时间监测

prometheus.yml

rule_files:
  - ssl_expiry.rulesscrape_configs:
  - job_name: 'blackbox'
    metrics_path: /probe    params:
      module: [http_2xx]  # Look for a HTTP 200 response.
    static_configs:
      - targets:
        - example.com  # Target to probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target      - source_labels: [__param_target]
        target_label: instance      - target_label: __address__        replacement: 127.0.0.1:9115  # Blackbox exporter.


ssl_expiry.rules

groups: 
  - name: ssl_expiry.rules 
    rules: 
      - alert: SSLCertExpiringSoon 
        expr: probe_ssl_earliest_cert_expiry{job="blackbox"} - time() < 86400 * 30 
        for: 10m


五、prometheus告警规则
groups:- name: example  rules:
  - alert: curlHttpStatus    expr:  probe_http_status_code{job="blackbox-http"}>=400 and probe_success{job="blackbox-http"}==0    #for: 1m
    labels:
      docker: number    annotations:
      summary: '业务报警: 网站不可访问'      description: '{{$labels.instance}} 不可访问,请及时查看,当前状态码为{{$value}}'


5.1 查看监听过程

类似于

curl http://172.16.10.65:9115/probe?target=prometheus.io&module=http_2xx&debug=true


5.2 告警应用测试

icmp、tcp、http、post 监测是否正常可以观察probe_success 这一指标
probe_success == 0 ##联通性异常
probe_success == 1 ##联通性正常
告警也是判断这个指标是否等于0,如等于0 则触发异常报警

[sss@prometheus01 prometheus]$ cat rules/blackbox-alert.rules 
groups:- name: blackbox_network_stats  rules:
  - alert: blackbox_network_stats    expr: probe_success == 0    for: 1m    labels:
      severity: critical    annotations:
      summary: "Instance {{ $labels.instance }}  is down"
      description: "This requires immediate action!"


参考:https://www.tidb.cc/Monitor/170603-Blackbox_exporter.html#告警测试案例

六、Grafana

grafana模板号:9965。
此模板需要安装饼状图插件 下载地址 https://grafana.com/grafana/plugins/grafana-piechart-panel
安装插件,重启grafana生效。

grafana-cli plugins install grafana-piechart-panelservice grafana-server restart


6.1 访问grafana

Prometheus监控 Blackbox_exporter黑盒监测_Prometheus;Linux