Prometheusで「外から見た真実」を掴む:Blackbox Exporterによる究極の外形監視術
こんにちは。システムの「心臓の鼓動」を聴き分けることに情熱を燃やすエンジニアです。
普段、皆さんがPrometheusで監視しているのは、CPU使用率やメモリといった「サーバーの中身」ではないでしょうか?もちろんそれも重要ですが、「ユーザーが今、実際にサイトにアクセスできているか?」という視点は、サービスを維持する上で不可欠です。
サーバーが正常でも、ロードバランサーが死んでいればユーザーは何も見えません。この「外側から見た真実」を捉えるための最強の武器が、Blackbox Exporterです。
今日は、このBlackbox Exporterを使いこなし、Webサイトの生存確認からSSL証明書の期限切れアラートまで、現場で即戦力となる監視環境を構築する方法を伝授します。
—
1. Blackbox Exporterとは何か?
一言で言えば、「Prometheusの代わりに、指定したターゲットへ向かって診断リクエストを投げる代理人」です。
- HTTP/HTTPS: ステータスコードやコンテンツの中身をチェック。
- TCP: 指定ポートが開いているかを確認。
- DNS: 名前解決が正しく行えるかを確認。
- ICMP: いわゆるpingによるネットワーク疎通確認。
これを導入すれば、「サイトは起動しているはずなのに、なぜかユーザーが繋がらない」といった状況を即座に検知できます。
—
2. インストールとセットアップ(Docker編)
最も手軽でクリーンな構成であるDockerで動かしましょう。`blackbox.yml` という設定ファイルを用意するだけで準備は完了です。
最低限の `blackbox.yml`
まずはHTTP監視のための基本的な設定を作成します。
modules:
http_2xx: # モジュール名(Prometheusから指定します)
prober: http
http:
preferred_ip_protocol: “ip4” # IPv4でアクセス
method: GET
valid_status_codes: [200] # 200以外なら異常とみなす
timeout: 5s # 5秒以内にレスポンスがなければタイムアウト
コンテナの起動
docker run -d -p 9115:9115 \
-v $(pwd)/blackbox.yml:/etc/blackbox_exporter/config.yml \
prom/blackbox-exporter:latest
これだけで、`http://localhost:9115` でExporterが動き出します。
—
3. Prometheusとの連携(HelloWorld的な接続)
Prometheus本体に、「このターゲットを監視してね」と伝えます。ここでのポイントは、ターゲットのURLをパラメータとして渡すことです。
prometheus.yml
scrape_configs:
- job_name: ‘blackbox’
metrics_path: /probe
params:
module: [http_2xx] # 先ほど定義したモジュール
static_configs:
- targets:
- https://google.com # 監視したいURL
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115 # Exporterの場所
これでPrometheusの「Status > Targets」画面を見てください。緑色になっていれば、あなたの最初の「外形監視」は成功です!
—
4. 現場で震えるほど役立つ「SSL証明書期限監視」
運用現場で最も恐ろしい事故の一つが「SSL証明書の期限切れ」です。これを見逃すと、ユーザーにブラウザ警告画面を見せることになり、信頼は一瞬で失墜します。
Blackbox Exporterなら、これを自動化できます。
設定の追加(blackbox.yml)
modules:
http_2xx:
prober: http
http:
tls_config:
insecure_skip_verify: false
preferred_ip_protocol: “ip4”
# SSL証明書専用のモジュール
ssl_cert:
prober: http
http:
valid_status_codes: [200]
アラート設定(prometheus.rules.yml)
証明書の残り日数が30日を切ったら警告するルールです。
groups:
- name: ssl_alert
rules:
- alert: SSLCertExpiringSoon
# probe_ssl_earliest_cert_expiryはExporterが自動取得してくれるメトリクス
expr: (probe_ssl_earliest_cert_expiry – time()) / 86400 < 30
for: 10m
labels:
severity: warning
annotations:
summary: "SSL証明書が30日以内に切れます"
---
最後に:なぜこれが必要なのか
初心者のうちは「サーバーが動いていればいい」と考えがちですが、本番環境では「ネットワーク経路」「外部APIの応答」「証明書の有効期限」など、制御不能な要素が多々あります。
Blackbox Exporterは、「ユーザーと同じ視点」でシステムを見つめるための最初の一歩です。
これをマスターすれば、あなたは障害が起きる前に「おや、レスポンスが遅くなっているぞ」「証明書が危ないぞ」と気づけるようになります。これが、「夜中に電話で起こされないエンジニア」になるための秘訣です。
まずは、あなたの会社のサイトURLを一つ、この監視下に入れてみてください。その瞬間に、あなたの視界はぐっと広がるはずですよ。
それでは、素晴らしい運用ライフを!