2021年1月27日水曜日

Prometheus の blackbox_exporter を使ってみた

概要

blackbox_exporter はインスタンスの死活監視を行うためのエクスポータです
今回はインストール方法と簡単な使い方について紹介します

環境

  • Ubuntu 18.04
  • docker 20.10.2
  • Prometheus 2.24.1

nginx 起動

動作確認用の nginx を起動します
192.168.100.11 という IP のインスタンスで起動しています

  • sudo systemctl start nginx

blackbox.yml の作成

使用するモジュールやルールを設定します
実際に監視を行うサイトなどの情報は prometheus.yml 側に記載します
今回は Ping チェックとターゲットのサイトから 200 番系のレスポンスが返却されるかのチェックをします
ただこちらにはターゲットのサイトなどは記載しません

  • vim blackbox.yml
modules:
  icmp:
    prober: icmp
    timeout: 5s
  http_2xx:
    prober: http
    timeout: 5s
    http:
      valid_status_codes: []
      method: GET
      preferred_ip_protocol: "ip4"

blackbox_exporter の起動

先程作成した blackbox.yml を使ってコンテナを起動します
blackbox_exporter は 192.168.100.10 で起動しています

  • docker run --rm -d -p 9115:9115 --name blackbox_exporter -vpwd:/config prom/blackbox-exporter:master --config.file=/config/blackbox.yml

prometheus.yml の作成

次に prometheus.yml を定義します
blackbox_exporter の場所と実際に死活監視するターゲットサイトの情報はこちらに記載します

  • vim prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'nginx_check'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://192.168.100.11 # nginx が起動しているインスタンス
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.100.10:9115 # blackbox_exporter が起動しているインスタンス

Prometheus の起動

prometheus.yml を使って起動します

  • docker run -d -p 9090:9090 -v $(pwd):/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml

動作確認

まず blackbox_exporter が起動しているノードにアクセスするとチェック結果が確認できます
今回であれば http://192.168.100.10:9115/ にアクセスすると以下のような結果が確認できます

また Prometheus にアクセスすると probe から始まるメトリックが取得できているのが確認できます

nginx を停止して probe_success の値が 0 になることを確認しましょう

おまけ: Ping チェックをする場合の prometheus.yml

job_name を追加すれば OK です
あとは Prometheus コンテナを再起動しましょう
メトリックは probe_icmp_duration_seconds あたりが追加になっています
probe_successjob="icmp_check" も追加になっているのでそれを見ても OK です

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'nginx_check'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://192.168.100.10
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.100.10:9115
  - job_name: 'icmp_check'
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
        - 192.168.100.11
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.100.10:9115

最後に

blackbox_exporter を試してみました
ターゲットのサイトは prometheus.yml に書きますが実際にターゲットのサイトにアクセスしているのは blackbox_exporter のはずなのでネットワークのリーチャビリティなどには注意しましょう

参考サイト

0 件のコメント:

コメントを投稿