単調なメトリックの単調な sum を保存しておきたい
動機
現状の Prometheus だと sum(metric set)は metric set が全て単調増加するとしても単調増加しない metric set の中身が増減することが(スケールイン・アウトなどにより)あるため
そのためrate(sum(...))ではなくsum(rate(...))にするべきとされる
sum(rate(...))のような計算は SLO 関連で頻出するが、とても遅い SLO の計算は30日のような広大なウィンドウで計算されるため、30日分のラベル集合から該当するものを探してそれぞれに対してrateを計算し、それを足し合わせる必要がある
遅いので Recording Rule によって計算されがちだが、このルールは[30d]のような range vector selector を固定で含んでいるため、30日以外に対応できない
もしsum(...)が常に単調になるように Recording Rule で計算できたとすると、これを使ってrate(sum(...)[15d:])のようにして任意の範囲のrateを高速に計算できる
アイデア→ TSDB は正しい値を保存していると信じて差分を足し続ける
クエリを差分に置き換える
自動微分的な方法
メトリックまで分解したら、メトリックの差分をincreaseにする
TSDB から最新の値を取得し、最新の値の投稿時刻(or 内部的に覚えている計算時刻)から次の差分を計算し、足して投稿を繰り返す