Vì sao `irate` của Prometheus không bắt được spike
(valyala.medium.com)ratevàirateđược dùng để tính per-second rate trong PromQL- Có một hiểu lầm rằng
iratesẽ bắt các spike trong [range], cònratethì lấy trung bình các spike này iratechỉ tính per-second rate của hai data point cuối cùng- Việc hai data point cuối nào sẽ được nhìn thấy trong mỗi query của
query_rangephụ thuộc vào các tham sốstart,end,step- Vì vậy, dashboard phụ thuộc vào
iratecó thể thay đổi rất nhiều khi zoom và cuộn
- Vì vậy, dashboard phụ thuộc vào
- Với các counter thay đổi đột ngột, rất khó để
iratebắt được mọi spike
- Trong MetricsQL (Query Language tương thích phần lớn với PromQL), có hỗ trợ hàm
rollup_ratecho mục đích này - Hàm này tính rate giữa từng cặp data point liền kề và trả về
min,avg,maxcủa chúng - Vì vậy, mọi spike đều có thể được phản ánh nhất quán trong
minvàmax - Nếu trực tiếp trực quan hóa trên dashboard, bạn có thể thấy một dải thỏa mãn
rollup_rate(min)<=irate<=rollup_rate(max)
- Một hiểu lầm khác về
iratelà nó nhanh hơnrate - Có lẽ vì nó chỉ nhìn hai data point cuối trong số các data point của khoảng [range] nên tạo cảm giác như vậy?
- Nhưng trên thực tế, nơi Prometheus tiêu tốn CPU time nhiều nhất là khi dùng query_range API để trích xuất các data point trong khoảng [start...end]
- Việc dùng hàm nào không ảnh hưởng nhiều đến hiệu năng
Bổ sung thêm vì bài blog không giải thích phần này: sự khác nhau giữa việc dùng giá trị rollup="avg" của rollup_rate và chỉ dùng avg với rate có thể xem trong một câu trả lời khác của tác giả MetricsQL.
Chưa có bình luận nào.