Warum `irate` von Prometheus Spikes nicht erfassen kann
(valyala.medium.com)- In PromQL werden
rateundirateverwendet, um die per-second rate zu berechnen - Es gibt das Missverständnis, dass
irateSpikes innerhalb von [range] erfasst undratediese Spikes nur mittelt irateberechnet nur die per-second rate der letzten beiden data points- Welche letzten beiden data points bei jeder Query von
query_rangebetrachtet werden, hängt von den Parameternstart,endundstepab- Deshalb verändern sich Dashboards, die von
irateabhängen, je nach Zooming und Scrolling stark
- Deshalb verändern sich Dashboards, die von
- Bei Countern mit starken Schwankungen ist es mit
irateschwierig, alle Spikes zu erfassen
- Dafür unterstützt MetricsQL (eine Query Language, die größtenteils mit PromQL kompatibel ist) die Funktion
rollup_rate - Diese Funktion berechnet die Rate zwischen jeweils benachbarten data points und gibt deren
min,avgundmaxzurück - Dadurch können alle Spikes konsistent in
minundmaxerfasst werden - Wenn man das direkt im Dashboard visualisiert, sieht man ein Band, für das
rollup_rate(min)<=irate<=rollup_rate(max)gilt
- Ein weiteres Missverständnis über
irateist, dass es schneller sei alsrate - Das wirkt vielleicht so, weil innerhalb des [range]-Intervalls nur die letzten beiden data points betrachtet werden
- Tatsächlich verbraucht Prometheus aber die meiste CPU-Zeit bei Verwendung der
query_rangeAPI dafür, die data points aus dem Intervall [start...end] zu extrahieren - Welche Funktion verwendet wird, hat auf die Performance keinen großen Einfluss
- Tatsächlich verbraucht Prometheus aber die meiste CPU-Zeit bei Verwendung der
Da dies im Blogbeitrag nicht erklärt wird, hier noch eine Ergänzung: Den Unterschied zwischen der Verwendung des rollup="avg"-Werts von rollup_rate und der einfachen Nutzung von avg mit rate kann man in einer weiteren Antwort des MetricsQL-Entwicklers nachlesen.
Noch keine Kommentare.