blackbox_exporterでsmtp監視
PR

blackbox_exporterでsmtp監視

設定・構築・運用
記事内に広告が含まれています。
スポンサーリンク

Prometheusでサービスの死活監視をやろうとするとお世話になるのが、blackbox_exporter。設定を調整するための環境を作って、試してみました。

スポンサーリンク
スポンサーリンク

blackbox_exporterを使った監視構成

Prometheusからデータ収集のリクエストを受け取って、blackbox_exporterから対象のサーバにアクセスします。DMZでblackbox_exporterを動かせば、内部のサーバの監視ができますね。

Prometheusと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画面

Prometheusの画面が出れば、OK。
続いて、画面上部のメニューから [Status]→[Targets] を選択。

Prometheus Statusメニューからtargets選択

prometheus.yml に書いた job_name が表示されればOK。

Prometheus Targets画面

画面上部の [Prometheus] をクリックして、最初の画面に戻りましょう。
Expression の欄に、probe_icmp_duration_seconds と入力して、右の[Execute]をクリック。

Prometheus probe_icmp_duration_seconds 検索結果

結果が表示されれば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はicmphttp_2xxに変更しています。
docker-compose up -d してから、PrometheusのTargets画面を見てみましょう。

Prometheus Targets画面 (Web監視)

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も変更しています。どのポートに接続するかは、ここで設定します。

これで動かすと、

Promehteus Targets画面(SMTP監視)

blackboxのEndpointのところでmoduleがsmtpになっており、StateがUPとなっています。

Promehteus 検索結果 probe_success

probe_success の結果も1で、うまくいっていますね。

blackbox_exporterの豊富な設定項目

blackbox_exporterの設定ファイルの説明を見ると、設定が豊富です。tlsも、最初から有効にしたり、途中で有効にしたりできるので、SMTPでSTARTTLSを使った暗号化までチェックできそうですね。

コメント

タイトルとURLをコピーしました