Blackbox Exporterをお試し。
機能的にはKubernetesのヘルスチェックのhttpGetおよびtcpSocketのように、外部からターゲットに対してネットワーク的に疎通確認を行うExporterとなっている。
(よって、監視対象ノード上で動かす必要はなく、Exporter(を動かすノード)から監視対象ノードへHTTPやTCPアクセスして死活監視を行うように動作する)
環境は例によってCentOS上に直接立てたPrometheus(非Kubernetes環境)
実行バイナリの取得
2020.10.20時点でver 0.18.0
[zaki@cloud-dev prometheus]$ curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.18.0/blackbox_exporter-0.18.0.linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 667 100 667 0 0 1128 0 --:--:-- --:--:-- --:--:-- 1130 100 8675k 100 8675k 0 0 2277k 0 0:00:03 0:00:03 --:--:-- 2706k [zaki@cloud-dev prometheus]$ [zaki@cloud-dev prometheus]$ tar xf blackbox_exporter-0.18.0.linux-amd64.tar.gz [zaki@cloud-dev prometheus]$ ls -l blackbox_exporter-0.18.0.linux-amd64 合計 17860 -rw-r--r--. 1 zaki zaki 11357 10月 12 18:58 LICENSE -rw-r--r--. 1 zaki zaki 94 10月 12 18:58 NOTICE -rw-r--r--. 1 zaki zaki 629 10月 12 18:58 blackbox.yml -rwxr-xr-x. 1 zaki zaki 18264924 10月 12 18:47 blackbox_exporter
Blackbox Exporterの実行
設定は付属のblackbox.ymlが使用できる。
起動オプション関連は--help
付与すれば確認できる。
[zaki@cloud-dev prometheus]$ cd blackbox_exporter-0.18.0.linux-amd64/ [zaki@cloud-dev blackbox_exporter-0.18.0.linux-amd64]$ ./blackbox_exporter --config.file=blackbox.yml level=info ts=2020-10-20T14:45:01.158Z caller=main.go:212 msg="Starting blackbox_exporter" version="(version=0.18.0, branch=HEAD, revision=60c86e6ce5a1111f7958b06ae7a08222bb6ec839)" level=info ts=2020-10-20T14:45:01.158Z caller=main.go:213 msg="Build context" (gogo1.15.2,userroot@53d72328d93f,date20201012-09:46:31)=(MISSING) level=info ts=2020-10-20T14:45:01.159Z caller=main.go:225 msg="Loaded config file" level=info ts=2020-10-20T14:45:01.159Z caller=main.go:369 msg="Listening on address" address=:9115
デフォルトで9115/TCPでListenする。
この時点で9115/TCPへwebアクセスするとこんな感じ。
/metrics
にアクセスすれば、Prometheus用のメトリクス一覧も確認できる。
Prometheusへ設定追加
scrape_configs
にBlackbox Exporter用の設定を追加する。
params.module
にHTTPアクセスチェック用のhttp_2xx
を指定し、ターゲットとするwebサーバーを適当に用意し(なければGoogleやYahoo!でも)、targets
のところへ設定する。
(http_2xx
とかの定義は、前述のBlackbox Exporterの設定サンプルによるもの。)
Blackbox Exporterは192.168.0.18:9115
で動作しているものとする。
設定自体はPrometheus Configurationを参照。
scrape_configs: # ... - job_name: 'blackbox-sample' metrics_path: /probe params: module: [http_2xx] # Look for a HTTP 200 response. static_configs: - targets: - http://172.20.220.141 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.0.18:9115 # The blackbox exporter's real hostname:port.
この設定でPrometheusを再起動する。
Targetを確認するとこんな感じ。
メトリクス確認
probe_http_status_code
を確認すると200
になっている。
(これをグラフで見ても無意味かな…w)
また、probe_success
を確認すると、1
になっている。
エラー発生させる
index.htmlを削除してもディレクトリ一覧表示になってしまうので、read権限を外した。
# chmod 600 index.html
curl
で確認すると403なのを確認。
[zaki@cloud-dev ~]$ curl http://172.20.220.141 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this resource.</p> </body></html>
この状態でPrometheusから確認すると以下の通り。
probe_success
を確認すると、値は0
となる。
ターゲット追加
HTTPS (insecure)
試しにオレオレ証明書なhttpsサイトを追加。
対象はローカルに立てているGitLabサーバー。
[zaki@cloud-dev ~]$ curl https://gitlab-ce.example.org:8443/ curl: (60) Peer's certificate issuer has been marked as not trusted by the user. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.
Prometheusのターゲット設定は以下の通り。
- job_name: 'blackbox-sample' metrics_path: /probe params: module: [http_2xx] # Look for a HTTP 200 response. static_configs: - targets: - http://172.20.220.141 - https://gitlab-ce.example.org:8443/ relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.0.18:9115 # The blackbox exporter's real hostname:port.
これは証明書の検証は必要なようで、probe_success
は0
となり、probe_http_status_code
も0
となりHTTPのチェックとして成立しなかった。
が、これはHTTP Probeの設定で、insecureの設定を追加すれば証明書の検証をスキップできる。
以下は、既存のHTTP Probeに追加しているが、http_2xx
とは別にmodule設定を(https_insecure
とかの名前で)追加してもよいと思う。
modules: http_2xx: prober: http http: tls_config: insecure_skip_verify: true
TCP
Blackbox Exporterの標準のサンプル設定だとtcp_connect
がそのまま使用できるので、(↑でinsecure設定はしているけど)ローカルGitLabのgitlab-ce.example.org:8443
を監視設定に設定してみる。
以下のscrape設定をまるっと追加。
- job_name: 'blackbox-tcpsample' metrics_path: /probe params: module: [tcp_connect] static_configs: - targets: - gitlab-ce.example.org:8443 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 192.168.0.18:9115 # The blackbox exporter's real hostname:port.
うーん、params.module
はリスト形式で書けるけど、static_configs.targets
に書くターゲットには個別のモジュールは選択できそうにない。。
その他
Configuratoinのページを見る限り、HTTP・TCP以外に、ICMPとDNSのチェックができる模様。