New Relic の New Relic Query Languege (NRQL) には、時系列データの将来値を予測できる PREDICT 句があります。
CPU 使用率や JVM のヒープ使用量、サービスのスループットなど、普段使っている TIMESERIES クエリに 1 行追加するだけで、「この傾向が続いた場合、次にどうなりそうか」を可視化できます。
本記事では、
- PREDICT 句の基本
- 内部で使われている予測アルゴリズム
- JVM メトリクスでの実践的な使い方
- サービススループットとの組み合わせ例
を紹介します。
最新のアップデートの詳細はこちら
New Relic アップデート一覧
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!
PREDICT 句とは?
PREDICT は TIMESERIES クエリ専用の NRQL 句です。
過去の時系列データをもとに、将来の値を推定し、グラフ上に「予測ライン」として描画します。
FROM SystemSample
SELECT max(cpuPercent)
FACET hostname
TIMESERIES
PREDICT
このように PREDICT を付けると、
過去〜現在:実測値(実線)
現在以降:予測値(破線)
という形で表示されます。
予測の動作
デフォルトで表示される予測値の時間範囲は、クエリで指定した時間範囲の20%になります。SINCE 60 minutes AGO で過去60分間のデータを表示すると12分間の予測値が表示されます。
予測に使用する学習データもクエリで指定した時間範囲に依存し、クエリで指定した時間範囲の3倍の時間範囲がトレーニングに使用されるデータの範囲です。SINCE 60 minutes AGO で過去60分間のデータを表示すると過去180分間のデータがトレーニングに使用されます。
内部で使われている予測アルゴリズム
PREDICT 句では、Holt-Winters 法(指数平滑法) をベースにした時系列予測アルゴリズムが使われています。
Holt-Winters 法とは?
Holt-Winters 法は、次の3要素を分離して扱う予測手法です。
- レベル(Level): 現在の値の水準
- トレンド(Trend): 上昇・下降といった傾向
- 季節性(Seasonality): 時間帯・曜日などの周期的変動
これにより、単なる直線予測ではなく、「傾向が続いた場合の自然な延長」 を計算できます。
PREDICT 句と相性がいいのはどんなデータか
Holt-Winters 法は、
- 徐々に増える
- 徐々に減る
- 一定の周期で変動する
といった なだらかな変化 を捉えるのが得意です。
そのため PREDICT は、
- JVM のヒープ使用量
- GC 回数の増加傾向
- サービスのスループット推移
のような 「じわじわ変化するメトリクス」 と特に相性が良くなります。
逆に、突発的なスパイクや障害そのものを当てる用途には向いていません。
実用例①:JVM メトリクスでの活用(ヒープ使用量)
JVM メトリクスは、PREDICT の思想と非常によく合います。
理由は、JVM は突然壊れるより前兆として数値が変化することが多いためです。
ヒープ使用量の将来予測
FROM Metric
SELECT average(apm.service.memory.heap.used) * 1000 * 1000 as 'Used Heap'
WHERE appName LIKE '%'
FACET appName, `host` OR `host.displayName` OR `instanceName`
LIMIT MAX
TIMESERIES
PREDICT
このクエリを見ることで、
- ヒープ使用量が横ばいなのか
- 少しずつ増えているのか
- 増加ペースが加速していないか
といった傾向を把握できます。
OOM を直接予測するわけではありませんが、メモリリークや GC 負荷増加の初期兆候を察知する材料として有効です。
実用例②:サービスのスループットの変化を見る
JVM メトリクスと合わせて見たいのが、**サービス全体のスループット(リクエスト数)**です。
FROM Transaction
SELECT rate(count(*), 1 minute)
WHERE appName = 'Currency Service'
TIMESERIES
PREDICT
このクエリでは、
- トラフィックが緩やかに増えているのか
- 想定以上のペースで伸びているのか
- 逆に減少傾向なのか
を予測ラインで確認できます。
JVM のヒープ使用量と並べて見ることで、
- JVM が逼迫しているのか
- 単純にトラフィックが増えた結果なのか
といった原因切り分けのヒントが得られます。
予測を調整するためのオプション
PREDICT では、予測の仕方をある程度コントロールするためのオプションを指定できます。
BY:どの粒度で未来を予測するか
PREDICT BY 10 minutes
- 予測値をどの時間間隔で算出するかを指定
- TIMESERIES と同じ粒度で指定するのが一般的
- 未来の「解像度」を調整するイメージ
USING:どれくらいの過去データを学習に使うか
PREDICT USING 2 weeks
- 予測モデルがどの期間の過去データを使うかを指定
- 短期傾向を重視するか、長期傾向を見るかを切り替えられる
- データ量が十分ある場合に有効
予測モデルを作成(トレーニング)する際、トレーニングに利用できる過去データの数(データポイント)は、最大 3,660個 と決まっています。TIMESERIES(データの粒度)を変えると、どれくらいの期間(USING)まで遡ってデータを学習できるかが変わります。
| データの粒度 (TIMESERIES) | 学習できる最大期間の目安 | 解説 |
|---|---|---|
| 1 minute | 約 2.5 日 | (61時間) ドキュメントの例と同じ。直近の細かい動きを予測する場合 |
| 5 minutes | 約 12 日 | 1週間程度の傾向を見て予測したい場合。 |
| 30 minutes | 約 76 日 | (約2.5ヶ月) 数ヶ月単位の季節性を見たい場合。 |
| 1 hour | 約 152 日 | (約5ヶ月) 長期的なトレンド予測をする場合。 |
ハイパーパラメータの指定について
PREDICT では、Holt-Winters 法の ハイパーパラメータを明示的に指定することも可能です。
PREDICT holtwinters(alpha: 0.2, beta: 0.1, gamma: 0.3)
-
alpha:レベルへの追従度 -
beta:トレンドへの追従度 -
gamma:季節性への追従度
通常はデフォルト設定のままで問題ありませんが、「追従を速くしたい/なだらかにしたい」といった場合に調整できる余地がある、という位置づけです。
※ 実務では「まずはデフォルト → 必要なら調整」くらいの理解で十分です。
PREDICT を使う際の注意点
- TIMESERIES は必須
- SELECT は 1 つの集計関数に絞る
- スパイクが多いデータでは予測が不安定になりやすい
- あくまで 過去傾向の延長線上の推定
PREDICT は「未来を当てる機能」ではなく、 「傾向を見やすくするための補助線」 と考えると適切です。
まとめ
NRQL の PREDICT 句は、JVM のヒープ使用量、サービスのスループットのような徐々に変化するメトリクスの傾向を、将来に伸ばして可視化する機能です。
内部では Holt-Winters 法による時系列予測が使われており、「この傾向が続いたらどうなりそうか」を非常に低コストで確認できます。
普段使っている TIMESERIES クエリに PREDICT を1行追加するだけなので、まずは身近なメトリクスで試してみるのがおすすめです。
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!



