# Prometheus의 irate가 spike를 잡지 못하는 이유

> Clean Markdown view of GeekNews topic #17781. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17781](https://news.hada.io/topic?id=17781)
- GeekNews Markdown: [https://news.hada.io/topic/17781.md](https://news.hada.io/topic/17781.md)
- Type: news
- Author: [dongho42](https://news.hada.io/@dongho42)
- Published: 2024-11-15T22:44:52+09:00
- Updated: 2024-11-15T22:44:52+09:00
- Original source: [valyala.medium.com](https://valyala.medium.com/why-irate-from-prometheus-doesnt-capture-spikes-45f9896d7832)
- Points: 3
- Comments: 0

## Topic Body

- PromQL에서 per-second rate을 계산하는데 사용되는 `rate`와 `irate`  
- `irate`은 [range] 동안의 spike를 잡고, `rate`은 이 spike들을 평균낸다는 [오해](https://www.robustperception.io/irate-graphs-are-better-graphs/)가 존재  
- `irate`은 마지막 두 data points의 per-second rate 만을 계산  
- query_range의 각 query에서 보게될 마지막 두 data points가 어떤게 될건지는 `start`, `end`, `step` 파라미터에 의존함  
    - 따라서, `irate`에 의존하는 대시보드는 zooming과 scrolling에 따라 크게 변함  
- 급격하게 변하는 counter에서 `irate`로는 모든 spike를 잡기 어려움  
  
---  
  
- MetricsQL(PromQL과 대부분 호환되는 Query Language)에서는 이를 위해, `rollup_rate` 함수를 지원  
- 이 함수는 인접한 각 data point들끼리의 rate을 구하고 이것의 `min`, `avg`, `max`를 반환  
- 따라서 모든 spike가 일관되게 `min`과 `max`에 잡힐 수 있음  
- 직접 대시보드에서 시각화해보면, `rollup_rate(min)` <= `irate` <= `rollup_rate(max)`를 만족하는 band를 볼 수 있음  
  
---  
  
- `irate`에 대한 또 하나의 오해는, `rate` 보다 빠르다는 것  
- 아무래도 [range] interval 동안 주어진 data point들 중에서 마지막 두개만 봐서 그렇게 느끼는걸지도?  
    - 하지만 실제로 Prometheus가 가장 많은 CPU time을 쓰는곳은 query_range API를 사용할때, [start...end] interval 동안의 data point들을 추출하는 것  
    - 어떤 함수를 쓰는지는 크게 성능에 영향이 없음  
  
---  
  
블로그 글에서 설명이 안되어 있어서 추가하면, `rollup_rate`의 `rollup="avg"` 값을 쓰는것과, `rate`에 그냥 `avg`를 쓰는것에 대한 차이는 [MetricsQL 개발자의 다른 답변](https://stackoverflow.com/a/66855665/7899226)에서 확인 가능합니다.

## Comments



_No public comments on this page._
