Por que o `irate` do Prometheus não consegue capturar spikes
(valyala.medium.com)- Em PromQL,
rateeiratesão usados para calcular a taxa por segundo - Existe o equívoco de que o
iratecaptura os spikes durante o [range], enquanto oratefaz a média desses spikes - O
iratecalcula apenas a taxa por segundo dos dois últimos data points - Quais serão os dois últimos data points vistos em cada query de
query_rangedepende dos parâmetrosstart,endestep- Portanto, dashboards que dependem de
iratevariam bastante conforme zoom e rolagem
- Portanto, dashboards que dependem de
- Em counters que mudam abruptamente, é difícil capturar todos os spikes com
irate
- No MetricsQL (uma linguagem de consulta majoritariamente compatível com PromQL), existe a função
rollup_ratepara isso - Essa função calcula a taxa entre cada par de data points adjacentes e retorna
min,avgemax - Assim, todos os spikes podem ser capturados de forma consistente em
minemax - Ao visualizar isso diretamente em um dashboard, é possível ver uma banda que satisfaz
rollup_rate(min)<=irate<=rollup_rate(max)
- Outro equívoco sobre o
irateé achar que ele é mais rápido que orate - Talvez isso pareça fazer sentido porque, entre os data points fornecidos no intervalo [range], ele olha apenas para os dois últimos?
- Mas, na prática, onde o Prometheus mais consome CPU ao usar a API
query_rangeé na extração dos data points ao longo do intervalo [start...end] - A função usada não tem grande impacto no desempenho
- Mas, na prática, onde o Prometheus mais consome CPU ao usar a API
Como isso não foi explicado no post do blog, vale acrescentar que a diferença entre usar rollup_rate com rollup="avg" e simplesmente usar avg com rate pode ser vista em outra resposta do desenvolvedor do MetricsQL.
Ainda não há comentários.