2026年10月11日

2026年10月11日

Prometheusのblackbox exporterでHTTP/HTTPS監視を行う方法

はじめに

Prometheusのblackbox exporterはHTTP/HTTPS/TCP/ICMPなどのプロトコルを外側から監視(ブラックボックス監視)するためのエクスポーターです。エンドユーザー視点に近い形でサービス稼働を測定でき、SSL証明書の有効期限まで自動取得できます。

本記事ではインストールからprometheus.ymlへの登録、Alertmanagerでの通知連携までを実例で解説します。

症状・背景

  • ノード監視はあるがエンドユーザー視点の死活監視がない
  • SSL証明書の期限管理をPrometheusに統合したい
  • 外部リージョンからの監視も追加したい
  • カスタムcurlスクリプトをPrometheusのメトリクス資産に統合したい

手順・設定方法

ステップ1: blackbox exporterのインストール

# 公式バイナリを取得
cd /tmp
curl -LO https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz
tar xf blackbox_exporter-0.25.0.linux-amd64.tar.gz
sudo install -m 755 blackbox_exporter-0.25.0.linux-amd64/blackbox_exporter /usr/local/bin/
sudo useradd -rs /bin/false blackbox
# 設定ファイルを配置
sudo mkdir -p /etc/blackbox_exporter
sudo cp blackbox_exporter-0.25.0.linux-amd64/blackbox.yml /etc/blackbox_exporter/

ステップ2: モジュール設定とsystemd化

# /etc/blackbox_exporter/blackbox.yml
sudo tee /etc/blackbox_exporter/blackbox.yml <<'EOF'
modules:
  http_2xx:
    prober: http
    timeout: 5s
    http:
      valid_status_codes: [200]
      method: GET
      preferred_ip_protocol: ip4
      tls_config:
        insecure_skip_verify: false
  tcp_connect:
    prober: tcp
    timeout: 5s
  icmp:
    prober: icmp
    timeout: 5s
EOF
# systemdユニット
sudo tee /etc/systemd/system/blackbox_exporter.service <<'EOF'
[Unit]
Description=Blackbox Exporter
[Service]
User=blackbox
ExecStart=/usr/local/bin/blackbox_exporter --config.file=/etc/blackbox_exporter/blackbox.yml
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload && sudo systemctl enable --now blackbox_exporter

ステップ3: prometheus.ymlへの登録

# /etc/prometheus/prometheus.yml に追記
sudo tee -a /etc/prometheus/prometheus.yml <<'EOF'
  - job_name: blackbox-http
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - https://example.com/health
        - https://api.example.com/ping
        - https://shop.example.com/
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115
EOF
sudo systemctl reload prometheus

ステップ4: アラートルールとSSL期限チェック

# /etc/prometheus/rules/blackbox.yml
sudo tee /etc/prometheus/rules/blackbox.yml <<'EOF'
groups:
- name: blackbox
  rules:
  - alert: ProbeFailed
    expr: probe_success == 0
    for: 3m
    labels: {severity: critical}
    annotations:
      summary: "{{ $labels.instance }} 監視失敗"
  - alert: SSLCertExpiringSoon
    expr: (probe_ssl_earliest_cert_expiry - time()) / 86400 < 30
    for: 10m
    labels: {severity: warning}
    annotations:
      summary: "{{ $labels.instance }} SSL残{{ $value | printf \"%.0f\" }}日"
EOF
# 動作確認
curl -s 'http://127.0.0.1:9115/probe?module=http_2xx&target=https://example.com/health' | head -20
sudo systemctl reload prometheus

注意事項

  • ICMP probeはCAP_NET_RAWが必要。systemdにAmbientCapabilities=CAP_NET_RAWを追加するかrootで実行
  • 外形監視を増やしすぎるとblackbox exporter自身がボトルネックになる。scrape_intervalを控えめに
  • TLS検証を無効化するinsecure_skip_verify: trueは便利だが、本番では中間者攻撃を見逃すリスクがある
  • 監視対象が増えたらfile_sd_configsやhttp_sd_configsでターゲット動的化を検討

まとめ

1. 外形監視: ユーザー視点での到達性を測定

2. モジュール: http_2xx/tcp_connect/icmpを用途で使い分け

3. relabel_configs: blackbox特有のtarget書き換えが必要

4. SSL期限: probe_ssl_earliest_cert_expiryで証明書監視を統合

5. Alertmanager連携: 3分継続失敗で本通知=フラッピング対策

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲