本文已經(jīng)收錄在 Prometheus 合集 Prometheus 都可以采集那些指標(biāo)?-- 常用 Exporter 合集 中。

BlackBox Exporter 允許通過 HTTP、HTTPS、DNS、TCP 和 ICMP 對(duì)接口進(jìn)行黑盒探測(cè)監(jiān)控。

BlackBox Exporter 是 Prometheus 官方維護(hù)的 Exporter,官方倉(cāng)庫(kù)地址是
https://github.com/prometheus/blackbox_exporter 。

BlackBox Exporter 支持在 Windows 和類 Unix 上運(yùn)行,當(dāng)前最新版本是 v0.19.0 ,在 2021.05.10 發(fā)布。

安裝

下載操作系統(tǒng)對(duì)應(yīng)的 BlackBox Exporter 以后,直接執(zhí)行二進(jìn)制文件就可以運(yùn)行,

./blackbox_exporter 

如果使用 Docker 來運(yùn)行,需要準(zhǔn)備好配置文件 blackbox.yml ,可以使用如下命令:

docker run -d /  -p 9115:9115 /  --name blackbox_exporter /  -v `pwd`:/config /  prom/blackbox-exporter:master /  --config.file=/config/blackbox.yml

在運(yùn)行 ICMP 功能的時(shí)候需要賦予相對(duì)于的權(quán)限才行。

  • Windows 系統(tǒng):系統(tǒng)提供 Administrator 管理員權(quán)限
  • Linux 系統(tǒng):這個(gè)用戶的組要在 net.ipv4.ping_group_range,并且具有 CAP_NET_RAW 權(quán)限或者是 root 用戶。
  • BSD 系統(tǒng):需要提供 root 用戶
  • OS X 系統(tǒng):不需要提供額外的權(quán)限。

BlackBox Exporter 配置

BlackBox Exporter 的配置是通過配置文件和命令行參數(shù)來實(shí)現(xiàn)的,命令行參數(shù)控制哪個(gè)配置文件會(huì)被加載、監(jiān)聽端口是哪個(gè),日志輸出的格式和級(jí)別等等。

BlackBox Exporter 可以在運(yùn)行時(shí)重新加載它的配置文件。如果新的配置文件格式錯(cuò)誤,那么這個(gè)文件是不會(huì)生效的,正常運(yùn)行的程序會(huì)以最后一次正確格式的配置文件運(yùn)行。通過向BlackBox Exporter 進(jìn)程發(fā)送 SIGHUP 信號(hào)或向進(jìn)程的 /-/reload 接口發(fā)送 HTTP POST 請(qǐng)求都可以觸發(fā)配置文件的重新加載。

BlackBox Exporter 指定配置文件使用 --config.file 參數(shù),格式是 --config.file=/config/blackbox.yml ,配置文件格式要求是 YAML 格式。

Blackbox exporter 支持下面這 4 個(gè)模塊的配置,

  • [ http: ]
  • [ tcp: ]
  • [ dns: ]
  • [ icmp: ]

詳細(xì)的配置文件示例開參考這個(gè)鏈接
https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md

官方提供了一個(gè)示例的配置文件可以參考。
https://github.com/prometheus/blackbox_exporter/blob/master/example.yml

Prometheus 配置

BlackBox Exporter 需要 Prometheus 將目標(biāo)作為參數(shù)傳遞過去,這可以通過重新標(biāo)記來完成。

我們來看這個(gè)示例文件,

scrape_configs:  - job_name: blackbox    metrics_path: /probe    params:      module: [http_2xx]  # Look for a HTTP 200 response.    static_configs:      - targets:        - http://prometheus.io    # Target to probe with http.        - https://prometheus.io   # Target to probe with https.        - http://example.com:8080 # Target to probe with http on port 8080.    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  # The blackbox exporters real hostname:port.

其他 BlackBox Exporter 是經(jīng)常搭配服務(wù)發(fā)現(xiàn)來進(jìn)行工作的,比如搭配基于 DNS 的服務(wù)發(fā)現(xiàn)來進(jìn)行。
HTTP 監(jiān)控可以接受附加的主機(jī)名參數(shù),該參數(shù)將設(shè)置主機(jī)頭和 TLS SNI。

scrape_configs:  - job_name: blackbox_all    metrics_path: /probe    params:      module: [ http_2xx ]  # Look for a HTTP 200 response.    dns_sd_configs:      - names:          - example.com          - prometheus.io        type: A        port: 443    relabel_configs:      - source_labels: [__address__]        target_label: __param_target        replacement: https://$1/  # Make probe URL be like https://1.2.3.4:443/      - source_labels: [__param_target]        target_label: instance      - target_label: __address__        replacement: 127.0.0.1:9115  # The blackbox exporters real hostname:port.      - source_labels: [__meta_dns_name]        target_label: __param_hostname  # Make domain name become Host header for probe requests      - source_labels: [__meta_dns_name]        target_label: vhost  # and store it in vhost label

小結(jié)

BlackBox Exporter 其實(shí)在監(jiān)控系統(tǒng)中非常實(shí)用,尤其是 HTTP 監(jiān)控和 ICMP 監(jiān)控。結(jié)合 DNS 可以監(jiān)控公司的所有域名狀態(tài)。