ぶていのログでぶログ

思い出したが吉日

PromQLでN日前のグラフと比較する

毎度忘れてそのたびに色々検索するのでブログにメモしておく。

結論から書くとoffset modifierを使うと実現できる。 prometheus.io

例えば、exampleサーバの5分間のCPUの%idleを取りたい場合は以下のように書くと思う。

sum by (mode)(irate(node_cpu_seconds_total{mode="idle", instance="example"}[5m]))

7日前の同じデータを取りたい場合は、 offset 7d を付与する。

sum by (mode)(irate(node_cpu_seconds_total{mode="idle", instance="example"}[5m] offset 7d))

グラフの横軸が6/20(この記事の投稿日)になっていて分かりづらいが、7日前のグラフになっている。 実際にoffset modifierを取り除いてグラフの描画範囲を7日前に変えると、offset modifierを指定したグラフと同じになっていることがわかる。

現在のデータ - 7日前のデータ とするとどのくらい差があるかわかる。

sum by (mode)(irate(node_cpu_seconds_total{mode="idle", instance="example"}[5m]))- sum by (mode)(irate(node_cpu_seconds_total{mode="idle", instance="example"}[5m] offset 7d))

マイナスになっているということは7日前のほうが%idleが高かったということになる。

使いみち

前述したとおりN日前との差を見たいときに使う。 例えば、CPUが高負荷になったが先週と同じトレンドであるかを確認したり、サーバのハードウェアスペックを上げたので上げる前と比較してどの程度効果があるかみてみたりするという使い方が考えられる。 個人的には後者の使い方が多い気がする。

今回の例だとN日前になっているが、N分前など色々指定できる。 詳しくは公式のドキュメントを参考のこと

ちなみに

mackerelでも同じことが式による監視で行える。便利。

mackerel.io