PromQLで欠損値を扱う
Prometheusで収集するメトリクスにアラートを仕掛けるとき、no dataやno datapoints foundになって困ることがあります。
どういう種類()のメトリクスなのかや、どういうアラーティングをしたいのかにもよりますが、いくつか方法があるのでまとめるページです。 absentまたはabsent_over_timeを使う。
valueが1になることは注意。
ラベルの情報が不完全になることに注意。
まあ、missing dataはその瞬間はラベルが無いので難しくあるべくして難しい……はず。
ラベルが固定なら、replace_labelで無理やりラベルを付けることは出来ます。
or irate(対象のメトリクス[適当な時間])を使う。
counter専用。
maynotexistent or irate(maynotexistent[5m])
unlessを使う。
up{job="myjob"} unless maynotexistent{job="myjob"}
or on() vector(0)を使う。
ラベルが無くなることに注意。結果を更に何かとマッチングしたいとき困る。
ラベルが欲しいときはunlessの方が使えそう。
ラベルが固定ならreplace_labelで無理やりくっつけることは可能。
ほにゃらら_over_timeで誤魔化す。
正確なアラートでは無くなりますが、途切れるのが短い時間のみであると分かっているならある程度は誤魔化せます。
メモ
last_over_timeがあると便利な場面もありそうですが、今のところ「ユースケースが無い」というのでcloseされています。
Prometheus&Alertmanagerでのアラーティングを前提にしていますが、Grafanaでアラーティングするなら別の話。