PromQLのrate関数とirate関数について
この記事ではPromQLのrate関数とirate関数の違いと使うポイントについて紹介していきます。
はじめに
■Prometheusとは
Prometheus(プロメテウス)はSoundCloud社によって開発されたオープンソースのモニタリング・アラートシステムです。主に以下の機能を持ちます
■PromQLとは
上記でも紹介しましたが、Prometheus上で時系列データを選択して集計する関数型クエリ言語 PromQL(Prometheus Query Language) が提供されています。
これから紹介するrate関数・irate関数は範囲ベクトル(Range Vector, 各時系列に対して一定期間における時系列データの集合)を評価するのに使います。
関数について
■rate関数とは
rate関数とは、時系列データの特定期間内の「1秒あたりの平均増加率」を計算します。
■rate関数の具体例
以下のクエリは5分間隔でのHTTPリクエストのトータル数(http_requests_total) の平均増加率を計算します。
rate(http_requests_total[5m])
HTTPリクエストのトータル数が以下のように変化したとします。
$$
\begin{array}{|c|c|} \hline \text{時間} & \text{トータル数} \\ \hline \text{午前8:00} & 0件 \\ \hline \text{午前8:01} & 50件 \\ \hline \text{午前8:02} & 100件 \\ \hline \text{午前8:03} & 150件 \\ \hline \text{午前8:04} & 200件 \\ \hline \text{午前8:05} & 250件 \\ \hline \end{array}
$$
この時、午前8:00から午前8:05の増加量は250件です。1秒あたりの平均増加率を求めるにはこれを300秒(5分)で割り算すれば求めることができます。
250(件) / 300(秒) = 0.833 (件/秒)となりますので、午前8:05時点での rate(http_requests_total[5m]) の結果は0.833となります。
■irate関数とは
irate関数とは、時系列データの特定期間内の「1秒あたりの瞬間的な増加率」を計算します。「瞬間的」というのは特定期間内の最後の2つのデータポイントの増加量を使って求められます。
■irate関数の具体例
以下のクエリは5分間隔でのHTTPリクエストのトータル数(http_requests_total) の瞬間的な増加率を計算します。
irate(http_requests_total[5m])
HTTPリクエストのトータル数が以下のように変化したとします。(rate関数の例で使用したデータと同じです)
$$
\begin{array}{|c|c|} \hline \text{時間} & \text{トータル数} \\ \hline \text{午前8:00} & 0件 \\ \hline \text{午前8:01} & 50件 \\ \hline \text{午前8:02} & 100件 \\ \hline \text{午前8:03} & 150件 \\ \hline \text{午前8:04} & 200件 \\ \hline \text{午前8:05} & 250件 \\ \hline \end{array}
$$
特定期間内の最後の2つのデータポイントの増加量を求めるので、午前8:04と午前8:05の間の増加量を求めます。午前8:04から午前8:05の増加量は50件ですので、1秒あたりの平均増加率を求めるにはこれを60秒(1分)で割り算すれば求めることができます。
50(件) / 60(秒) = 0.833 (件/秒)となりますので、午前8:05時点での irate(http_requests_total[5m]) の結果は0.833となります。
■使い分けについて
rateもirateも増加率を計算するのには変わりないのですが以下のように使い分けすることができます
rate関数: 指定された期間全体の平均増加率を計算するため、長期間のトレンド分析に向いています。
irate関数: 特定期間内の最後の2つのデータポイントの増加量を使って求められるため、瞬間的な傾向変化を捉える必要があるアラート設定に適しています。