เหตุผลที่ `irate` ของ Prometheus จับ spike ไม่ได้
(valyala.medium.com)rateและirateที่ใช้คำนวณ per-second rate ใน PromQL- มีความเข้าใจผิดว่า
irateจะจับ spike ในช่วง [range] ได้ ส่วนrateจะนำ spike เหล่านั้นมาเฉลี่ย irateคำนวณเฉพาะ per-second rate ของ data points สองจุดสุดท้ายเท่านั้น- data points สองจุดสุดท้ายที่จะถูกนำมาดูในแต่ละ query ของ query_range ขึ้นอยู่กับพารามิเตอร์
start,end,step- ดังนั้น dashboard ที่พึ่งพา
irateจึงเปลี่ยนแปลงอย่างมากตามการซูมและการเลื่อนดู
- ดังนั้น dashboard ที่พึ่งพา
- สำหรับ counter ที่เปลี่ยนแปลงอย่างรวดเร็ว
irateจับทุก spike ได้ยาก
- ใน MetricsQL (Query Language ที่เข้ากันได้กับ PromQL เป็นส่วนใหญ่) จึงมีฟังก์ชัน
rollup_rateรองรับกรณีนี้ - ฟังก์ชันนี้จะคำนวณ rate ระหว่าง data point ที่อยู่ติดกันแต่ละคู่ แล้วคืนค่า
min,avg,max - ดังนั้น spike ทั้งหมดจึงสามารถถูกจับได้อย่างสม่ำเสมอใน
minและmax - เมื่อลองทำ visualization บน dashboard โดยตรง จะเห็น band ที่เป็นไปตาม
rollup_rate(min)<=irate<=rollup_rate(max)
- อีกหนึ่งความเข้าใจผิดเกี่ยวกับ
irateคือมันเร็วกว่าrate - อาจรู้สึกแบบนั้นเพราะมันดูแค่สองจุดสุดท้ายจาก data points ที่มีอยู่ในช่วง [range]
- แต่ในความเป็นจริง จุดที่ Prometheus ใช้ CPU time มากที่สุดคือการดึง data points ออกมาจากช่วง [start...end] ตอนใช้ query_range API
- จะใช้ฟังก์ชันไหนจึงแทบไม่ส่งผลต่อประสิทธิภาพมากนัก
- เพิ่มเติมจากที่บทความบล็อกไม่ได้อธิบายไว้ ความแตกต่างระหว่างการใช้ค่า
rollup="avg"ของrollup_rateกับการใช้avgกับrateตรงๆ สามารถดูได้จากคำตอบอีกอันของผู้พัฒนา MetricsQL
ยังไม่มีความคิดเห็น