目次
概要
blackbox_exporterは各種プロトコルの死活監視を行うことができる。
各種ポート監視、httpのGET、POSTリクエストなどの挙動、Basic認証のチェックなど様々な事ができる。
今回は、SSHの22番ポートを監視する例と、httpのresponse bodyの内容をチェックする例を書く。
blackbox_exporter
以下を利用する。
https://github.com/prometheus/blackbox_exporter
前提
以下の手順でPrometheus, Grafana環境を構築していることを前提とする。
Prometheus + AlertManager + Grafana + Node Exporter with Docker
サーバー構成
blackbox-exporterは、監視対象のポートチェックをし、その結果をメトリクス化してPrometheusに送るので、以下のようなサーバー構成になる。
そのため、監視対象のサーバーにインストールするのではなく、Prometheusが入っているサーバーにインストールするのがよいと思う。(監視対象にインストールして使うこともできるが、設定が冗長になるのでおすすめしない。)
blackbox-exporter ├──> 監視対象001
├──> 監視対象002
└──> 監視対象003
ディレクトリ構造
.
├── docker-compose.yaml
└── blackbox-exporter
└── config.yaml
docker-compose
blackbox-exporterのコンテナ定義。
version: '3'
services:
blackbox-exporter:
image: prom/blackbox-exporter
container_name: blackbox-exporter
ports:
- 127.0.0.1:9115:9115
volumes:
- ./blackbox-exporter:/etc/blackbox_exporter
entrypoint: ['/bin/blackbox_exporter', '--config.file=/etc/blackbox_exporter/config.yaml']
restart: always
config.yaml
blackbox-exporter/config.yamlを作成する。
modules:
ssh_banner:
prober: tcp
tcp:
query_response:
- expect: "^SSH-2.0-"
nginx_banner:
prober: http
http:
method: GET
# 以下の文字列がなければアラートとする
fail_if_body_not_matches_regexp:
- '"nginx": "ok"'
ssh_banner.tcp.query_response.expectの"^SSH-2.0-"
は、GoでのTCPリクエストによるレスポンス内容の一部。(blackbox_exporterはGoで書かれている)
以下の記事で、GoのTCPクライアントをさっと作る方法を書いたので、必要でれあればこれを使って各ポートのレスポンス内容がどのようになっているかを確認してみてください。
参考:GoでTCPクライアントを秒で作る
exporterの起動
$ sudo docker-compose up -d --build
Prometheusの設定
Prometheusサーバーのprometheus.yamlに以下の設定を追記する。
relabel_configs.replacementにblackbox-exporterが入っているサーバーのホストを指定する。
static_configs.targetsには22番ポートを監視するサーバーのホストを定義する。
(blackbox-exporterとtargetsのサーバーが同一でも構わない。)
scrape_configs:
- job_name: port-ssh
metrics_path: /probe
params:
module: [ssh_banner]
static_configs:
- targets:
- target-server01.com:22
- target-server02.com:22
labels:
env: development
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter-server.com:9115
- job_name: nginx-body
metrics_path: /probe
params:
module: [nginx_banner]
static_configs:
- targets:
- target-server01.com:80
- target-server02.com:80
labels:
env: development
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter-server.com:9115
設定を反映
$ sudo docker-compose restart prometheus
PromQL
以下のPromQLがそれぞれ1
が返せばOKということになる。
SSH Port監視
probe_success{job="port-ssh"}
nginxのresponse bodyの内容監視
probe_success{job="nginx-body"}