2 điểm bởi dongho42 2024-11-24 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Khi xử lý counter trong Prometheus, có một lỗi rất dễ mắc phải khi áp dụng các hàm chỉ dành cho counter như rate cùng với aggregation
  • Trong Prometheus, counter chỉ có thể: "tăng lên", "giữ nguyên" hoặc "được khởi tạo lại"
  • Khi muốn tính tỷ lệ request mỗi giây của Node Exporter, có thể viết truy vấn như sau?
    • sum by (job)(rate(http_requests_total{job="node"}[5m]))
  • Nhưng còn truy vấn sau thì sao?
    • rate(sum by (job)(http_requests_total{job="node"})[5m])
    • Truy vấn này có vấn đề
  • Nếu một node nào đó bị khởi động lại, thì http_requests_total của Node Exporter trên node đó sẽ được đặt lại về 0
    • Khi đó giá trị của toàn bộ sum(...) sẽ bị giảm xuống
    • rate() sẽ cho rằng counter đã bị reset, và tạo ra spike sai lệch
      • *nếu giá trị giảm từ n xuống n-a, thì theo góc nhìn của rate, nó sẽ được hiểu là giá trị đã nhảy vọt thêm (n-a)
  • Vì vậy...
    • rate(counter_a[5m] + counter_b[5m]) như thế này là NO
    • rate(counter_a[5m]) + rate(counter_b[5m]) như thế này là YES
  • Điều này không chỉ áp dụng cho sum() mà còn với min(), max(), avg(), ceil(), histogram_quantile(), predict_linear()
  • Ngoài rate(), các hàm dành cho counter còn có irate(), increase(), resets()

Phần tóm tắt có dấu * là phần giải thích bổ sung không có trong nguyên văn nên đã được đánh dấu riêng.

Chưa có bình luận nào.

Chưa có bình luận nào.