エンジニアの皆さん、こんにちは。現場で「Prometheusのディスクがいっぱいだ!」「過去のデータが見られない!」と慌てて夜中に叩き起こされた経験はありませんか?
Prometheusは最高に優秀な時系列データベースですが、単体では「短期決戦型」です。ローカルディスクにデータを詰め込む設計上、数ヶ月前の傾向分析をしようとすると、あっという間にストレージが枯渇します。
今日は、その制約を軽々と超え、「Prometheusを無敵の長期保存エンジンに変える魔法」、Thanos(サノス)について解説します。これをマスターすれば、あなたの監視環境は「数日間の生存確認」から「数年間の経営分析基盤」へと進化します。
—
Thanosが解決する「Prometheusの限界」
Prometheusは、2時間単位のブロックでデータをローカルに保存します。このブロックが溜まるとストレージを圧迫するだけでなく、再起動時の読み込みに時間がかかり、運用を阻害します。
Thanosは、このブロックをS3やGCSのような安価なオブジェクトストレージに「外注」することで、Prometheusを常に軽量な状態に保ちます。
3つの主要なコンポーネント
1. Sidecar: Prometheusの横に寄り添い、ローカルのブロックをオブジェクトストレージに即座にアップロードする「運び屋」。
2. Store Gateway: S3にある過去のデータを、まるでPrometheusがローカルにあるかのように見せる「窓口」。
3. Compactor: バラバラになったブロックをまとめ、ダウンサンプリング(粗い解像度への変換)を行い、ストレージコストを劇的に下げる「整理整頓のプロ」。
—
実装のステップ:HelloWorldから始めるThanos
今回は、最も一般的な「Prometheus + Sidecar + S3」の構成を構築します。
1. 前提:S3バケットの準備
まず、データを保存するS3バケットを作成します。次に、ThanosがS3にアクセスするための設定ファイル(`bucket_config.yaml`)を作成します。
bucket_config.yaml
type: S3
config:
bucket: “my-long-term-metrics-bucket”
endpoint: “s3.amazonaws.com”
# AWS_ACCESS_KEY_IDなどは環境変数で渡すのが定石です
2. Sidecarのセットアップ
Prometheusの起動コマンドにSidecarを追加します。SidecarはPrometheusのAPIを叩き、新しいブロックが生成されるたびにS3へアップロードします。
Prometheusの起動プロセスと並行してSidecarを起動
thanos sidecar \
–prometheus.url=http://localhost:9090 \
–tsdb.path=/path/to/prometheus/data \
–objstore.config-file=bucket_config.yaml
※ ポイント: `–tsdb.path` はPrometheusのデータディレクトリと一致させてください。これで「書き込み」の準備は完了です。
3. Store Gatewayで過去を呼び出す
次に、S3にある過去のデータにアクセスするためのGatewayを起動します。
thanos store \
–objstore.config-file=bucket_config.yaml \
–data-dir=/tmp/thanos-store
これで、Grafanaから「Thanos Query」経由でクエリを投げれば、S3上の1年前のデータも一瞬でグラフ化できるようになります。
—
最も重要な「運用上の勘所」
初心者が陥りやすい罠が「Compactorの設定」です。
Compactorは、S3上のデータを整理する際に「解像度」を落とすことができます(例: 5分間隔のデータを1時間間隔にまとめる)。これを行わないと、数年分のデータをクエリした瞬間にレスポンスが返ってこなくなります。
Compactor起動の推奨オプション
thanos compact \
–objstore.config-file=bucket_config.yaml \
–data-dir=/tmp/thanos-compact \
–consistency-delay=30m # S3へのアップロード遅延を考慮して30分待つ
—
なぜこれが「現場で震えるほど役立つ」のか
1. Prometheusを使い捨てできる: Prometheusのノードが死んでも、S3にデータがあるため、新しいノードを立ち上げれば即座に過去の分析を再開できます。
2. ストレージコストの激減: SSD(高い)からS3(安い)へデータを移すことで、監視コストは劇的に下がります。
3. クエリの統一: Grafanaのデータソースを「Thanos Query」に向けるだけで、短期間のリアルタイムデータと、長期間のトレンドデータがシームレスに結合されます。
最後に
監視とは、単に「エラーを検知すること」ではありません。「過去の膨大な資産から、未来の障害の予兆を読み解くこと」です。
Thanosを導入すれば、Prometheusは「死なない記録係」になります。まずは開発環境のPrometheusにSidecarを一つ取り付けるところから始めてみてください。その瞬間に、あなたの運用ライフは劇的に楽になるはずです。
何か詰まったら、いつでも聞いてくださいね。一緒に最高に安定した監視基盤を作り上げましょう。