こんにちは。オブザーバビリティの世界へようこそ。
現場で多くのエンジニアが「Prometheusの再起動が必要だから、設定変更は深夜のメンテナンス時間に…」と嘆いている姿を見てきました。しかし、本来オブザーバビリティとは、システムの「今」を止めることなく、その脈動を捉え続けるためのもの。
Prometheusを真に使いこなすということは、設定変更のためにプロセスを再起動(=監視の穴を開けること)しない、という哲学を持つことです。今日は、PrometheusのHTTP APIを駆使して、監視の運用を「自動化された美しい流れ」に変える魔法を伝授します。
—
1. Prometheusにおける「動的リロード」の本質
Prometheusは、`SIGHUP` シグナルを送るか、`/reload` エンドポイントを叩くことで、再起動せずに設定ファイルを再読み込みできます。
しかし、単にコマンドを叩くだけでは不十分。「設定の妥当性チェック」を自動化し、失敗したら即座にロールバックするというCI/CDの思想を監視インフラにも持ち込むことが、プロフェッショナルの仕事です。
2. まずはここから:環境の準備とHelloWorld
まだPrometheusを触ったことがない方へ。まずは「監視対象が自分自身(メトリクス)」であるPrometheusを立ち上げ、APIを叩ける状態を作りましょう。
インストール(macOS例):
brew install prometheus
シンプルに起動
prometheus –config.file=prometheus.yml
最も重要な設定(prometheus.ymlの肝):
APIを外部から叩くには、起動オプションで `–web.enable-lifecycle` を指定する必要があります。これがないと、リロードAPIはセキュリティのために無効化されています。
prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: ‘prometheus’
static_configs:
- targets: [‘localhost:9090’]
—
3. 【実践】APIを活用した運用自動化スクリプト
ここからが本題です。設定ファイルを変更した際、「文法チェック → リロード → エラー時の通知」を自動化するスクリプトを構築します。
ステップ1:設定ファイルの妥当性検証
`promtool` を使います。Prometheusに同梱されているこのツールは、あなたの書いたYAMLが正しいかを教えてくれる頼もしい相棒です。
ステップ2:自動リロードシェルスクリプト
このスクリプトをCI/CDパイプラインや、設定変更後のフックとして組み込んでください。
!/bin/bash
設定ファイルのパス
CONFIG_FILE=”prometheus.yml”
PROMETHEUS_URL=”http://localhost:9090″
echo “Checking config syntax…”
promtoolで構文チェック
if ! promtool check config $CONFIG_FILE; then
echo “Error: Configuration file is invalid!”
exit 1
fi
echo “Triggering dynamic reload…”
HTTP POSTでリロードを要求
curl -X POST $PROMETHEUS_URL/-/reload
if [ $? -eq 0 ]; then
echo “Successfully reloaded Prometheus configuration.”
else
echo “Failed to reload Prometheus.”
exit 1
fi
—
4. 現場のプロが教える「データの削除とフラッシュ」
運用中、誤って大量のメトリクスを投入してしまったり、ディスクを圧迫する古いデータを即座に消去したくなる場面が必ずあります。その時も再起動は不要です。
データの削除(Delete Series)
特定の条件に合致するメトリクスを消し去るAPIです。
「my_app_error_total」というメトリクスをすべて消す例
curl -X POST \
-g ‘http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]=my_app_error_total’
※事前に `–web.enable-admin-api` オプションを有効にする必要があります。
データのフラッシュ(Clean up)
削除リクエストを実行しただけでは、ディスク上のデータはすぐには消えません(Tombstoneという印が付くだけです)。物理的に消去したい場合は以下を叩きます。
curl -X POST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones
—
最後に:あなたへのアドバイス
監視ツールを「ただ動いているもの」として扱うのと、APIを叩いて「運用をコード化する」のとでは、半年後のあなたのシステムの安定性に天と地ほどの差が出ます。
1. 設定変更は必ず `promtool` を通すこと。
2. 手動オペレーションを廃止し、すべてAPI経由に置き換えること。
これを繰り返せば、あなたはもう「監視に追われるエンジニア」ではなく、「監視を支配するアーキテクト」です。次回の記事では、このAPIを組み合わせた「異常検知時の自動スケールバック」の奥義についてお話ししましょう。
迷ったときは、いつでもここに戻ってきてくださいね。あなたの挑戦を応援しています。