Prometheusでサービスの死活監視をやろうとするとお世話になるのが、blackbox_exporter。設定を調整するための環境を作って、試してみました。
blackbox_exporterを使った監視構成
Prometheusからデータ収集のリクエストを受け取って、blackbox_exporterから対象のサーバにアクセスします。DMZでblackbox_exporterを動かせば、内部のサーバの監視ができますね。
docker-composeで簡単に試せるように
Prometheusをインストールして、設定して、blackbox_exporterをインストールして…。
といちいちやるのは手間だし、設定が終わったのでアンインストールというのも面倒なので、Dockerを使います。
ファイル・ディレクトリ構成。
│ docker-compose.yml │ ├─blackbox │ config.yml │ └─prometheus prometheus.yml
docker-compose.ymlのあるディレクトリにblackboxとprometheusというサブディレクトリを掘り、それぞれに設定ファイルを配置。
docker-compose.yml
version: "3"
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
blackbox:
image: prom/blackbox-exporter
volumes:
- ./blackbox/config.yml:/etc/blackbox_exporter/config.yml
サブディレクトリにあるファイルを見るようにvolumesを設定しているので、いちいちビルドしなおさなくても変更内容が反映されます。
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [icmp]
static_configs:
- targets:
- '192.168.0.1'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox:9115
blackbox_exporterを使う監視を、job_name blackboxに設定しました。
一番最後の行でblackbox_exporterのホスト名とポートを指定しています。ホスト名は、docker-compose.ymlでblackbox:
としているので、blackboxになります。
監視対象のサーバはtargets:
で指定しています。
まずはpingで生死を確認しましょう。ということで、moduleはicmpとしています。
config.yml
modules:
icmp:
prober: icmp
blackbox_exporterの設定ファイルです。
prometheus.ymlでicmpって設定しているので、modulesにicmpを用意しています。
prometheus.yml にある 192.168.0.1 を監視対象のサーバに書き換えたら、docker-compose -d up
で起動させます。
ブラウザで http://localhost:9090/ にアクセス。
Prometheusの画面が出れば、OK。
続いて、画面上部のメニューから [Status]→[Targets] を選択。
prometheus.yml に書いた job_name が表示されればOK。
画面上部の [Prometheus] をクリックして、最初の画面に戻りましょう。
Expression の欄に、probe_icmp_duration_seconds と入力して、右の[Execute]をクリック。
結果が表示されればOKです。docker-compose down
と入力して、いったん終わらせます。
blackbox_exporterでWeb監視
ping(icmp)監視の次は、よくあるWeb監視をやってみましょう。prometheus.ymlとconfig.ymlを変更します。
$ git diff
diff --git a/blackbox/config.yml b/blackbox/config.yml
index 7c5d6a0..50796d3 100644
--- a/blackbox/config.yml
+++ b/blackbox/config.yml
@@ -1,4 +1,6 @@
modules:
icmp:
prober: icmp
+ http_2xx:
+ prober: http
\ No newline at end of file
diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml
index a1bc195..fdd2fb6 100644
--- a/prometheus/prometheus.yml
+++ b/prometheus/prometheus.yml
@@ -10,7 +10,7 @@ scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
- module: [icmp]
+ module: [http_2xx]
static_configs:
- targets:
- '192.168.0.1'
config.ymlは2行ほど追加、prometheus.ymlはicmp
をhttp_2xx
に変更しています。
docker-compose up -d してから、PrometheusのTargets画面を見てみましょう。
blackboxのEndpointのところ、moduleがhttp_2xxになっていればOKです。
config.ymlは https://github.com/prometheus/blackbox_exporter/blob/master/blackbox.yml が参考になります。
SMTPをblackbox_exporterで監視
prober として tcp を使います。prometheus.ymlとconfig.ymlを変更します。
$ git diff
diff --git a/blackbox/config.yml b/blackbox/config.yml
index 50796d3..5380e83 100644
--- a/blackbox/config.yml
+++ b/blackbox/config.yml
@@ -3,4 +3,11 @@ modules:
prober: icmp
http_2xx:
prober: http
-
\ No newline at end of file
+ smtp:
+ prober: tcp
+ tcp:
+ query_response:
+ - expect: "^220 "
+ - send: "EHLO example.com"
+ - expect: "^250"
+ - send: "QUIT"
\ No newline at end of file
diff --git a/prometheus/prometheus.yml b/prometheus/prometheus.yml
index fdd2fb6..bdc4169 100644
--- a/prometheus/prometheus.yml
+++ b/prometheus/prometheus.yml
@@ -10,10 +10,10 @@ scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
- module: [http_2xx]
+ module: [smtp]
static_configs:
- targets:
- - '192.168.0.1'
+ - '192.168.0.1:25'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
config.ymlにsmtpを追加しました。query_response で文字列を送ったり受け取って確認したりできるので、単純に接続できるかどうかだけではなく、smtpのレスポンスがあるかどうかまでチェックできます。
prometheus.ymlでは、moduleの他、targetsも変更しています。どのポートに接続するかは、ここで設定します。
これで動かすと、
blackboxのEndpointのところでmoduleがsmtpになっており、StateがUPとなっています。
probe_success の結果も1で、うまくいっていますね。
blackbox_exporterの豊富な設定項目
blackbox_exporterの設定ファイルの説明を見ると、設定が豊富です。tlsも、最初から有効にしたり、途中で有効にしたりできるので、SMTPでSTARTTLSを使った暗号化までチェックできそうですね。
コメント