【入門編】PromQLの隠れた名関数を使い倒す:predict_linearとrate/irate/deltaの実践的ユースケース – 運用監視・オブザーバビリティ活用バイブル

オブザーバビリティの世界へようこそ。システムが「沈黙」している時ほど怖いものはありません。しかし、ただ闇雲にログを垂れ流すだけでは、真の異常は見抜けない。

今日はPrometheusの真髄、特に「未来を予測し、ノイズを排除する」ための魔法の関数群について解説します。これを武器にすれば、深夜の緊急呼び出し(アラート)に震える夜とはおさらばです。

—

1. Prometheusの「時間軸」を支配する:rate, irate, delta

Prometheusで最もよく使うのがカウンター(増え続ける値)ですが、そのままグラフにしても「右肩上がりの線」が見えるだけで、何も分かりません。ここで「速度」を抽出します。

rate vs irate:なぜ使い分けるのか?

  • `rate(v[range])`: 指定した期間(range)の平均変化率を計算します。長期的なトレンドを見たいとき、例えば「ここ1時間の平均トラフィック」を見るならこれです。
  • `irate(v[range])`: 直近の2つのデータポイントだけで変化率を計算します。瞬間的なスパイクを捉えるのに最適です。

【現場の知見】
ダッシュボードのグラフには`rate`を使い、アラートの閾値判定には`irate`を使います。なぜなら、平均化された値(rate)をアラートの閾値にすると、瞬間的な高負荷(スパイク)が平均化されて消えてしまい、「ユーザーがエラーで悲鳴を上げているのに、アラートが鳴らない」という最悪の事態を引き起こすからです。

—

2. 未来を予言する:predict_linearの数理モデル

「あとどれくらいでディスクが溢れるか?」を計算するのに、目視は不要です。`predict_linear`を使いましょう。

数式: `predict_linear(v[range], t)`
これは、過去の`range`期間のデータから線形回帰を行い、`t`秒後の値を予測します。

実践:ディスク枯渇予測アラート

例えば、「あと4時間後にディスクが100%になるか」を検知するクエリはこう書きます。

4時間後のディスク使用量を予測し、それが100%(1.0)を超えそうか判定
predict_linear(node_filesystem_free_percent[1h], 4 3600) < 0 【現場の知見】
`[1h]`のような期間指定は長すぎると予測が鈍くなり、短すぎるとノイズに振り回されます。ディスク容量のような「比較的緩やかな変化」には1時間から3時間程度が黄金比です。

—

3. 【初心者向け】HelloWorld的な最初の一歩

まずはPrometheusを触ってみましょう。Dockerがあれば一瞬です。

セットアップ(docker-compose.yml)

version: ‘3’
services:
prometheus:
image: prom/prometheus
ports:

  • “9090:9090”

volumes:

  • ./prometheus.yml:/etc/prometheus/prometheus.yml

動作確認用設定(prometheus.yml)

global:
scrape_interval: 15s # 15秒ごとにデータを収集

scrape_configs:

  • job_name: ‘prometheus’

static_configs:

  • targets: [‘localhost:9090’] # 自分自身のメトリクスを監視

最初のクエリ:HelloWorld

Prometheus UI(`http://localhost:9090`)を開き、Expression欄に以下を入力してください。

直近5分間のPrometheusのCPU使用率の変化(irate)
irate(process_cpu_seconds_total[5m])

グラフタブをクリックし、線が動くのを確認できれば成功です!これが「今、この瞬間のシステムの呼吸」です。

—

最後に:先輩からのアドバイス

オブザーバビリティの神髄は、「起きていること(ログ)」ではなく「起きつつあること(メトリクス)」を知ることにあります。

  • `rate` でトレンドを把握し、
  • `irate` で瞬間の悲鳴を聞き逃さず、
  • `predict_linear` で明日起きる事故を今日防ぐ。

これらを使いこなすだけで、あなたのシステム運用は「場当たり的な火消し」から「先回りした最適化」へと劇的に進化します。最初は難しく感じるかもしれませんが、PromQLは慣れれば言語のように直感的になります。

次は、ぜひ`sum by (instance)`などの集計関数と組み合わせて、サービス全体を俯瞰するクエリに挑戦してみてください。あなたのエンジニアライフが、より静かで、より確実なものになることを願っています。

タイトルとURLをコピーしました