Sunday, February 23, 2025

Hiểu rõ độ trễ cảnh báo Trong Prometheus

-

📌 Giới thiệu

Prometheus là một hệ thống giám sát và cảnh báo mạnh mẽ, được sử dụng rộng rãi trong các hệ thống Observability. Tuy nhiên, một trong những điều quan trọng khi triển khai Prometheus là hiểu rõ độ trễ (delay) trong quá trình cảnh báo, từ lúc sự kiện xảy ra trên hệ thống đến khi cảnh báo được gửi qua các kênh thông báo.

Trong bài viết này, chúng ta sẽ phân tích chu kỳ hoạt động của cảnh báo trong Prometheus, cách Alertmanager xử lý thông báo, và vì sao có thể mất nhiều thời gian hơn bạn nghĩ để nhận được cảnh báo.

1️⃣ Quá Trình Scraping, Đánh Giá & Cảnh Báo

🔹 Prometheus thu thập dữ liệu như thế nào?

Prometheus thu thập (scrape) dữ liệu từ các targets theo chu kỳ được xác định bởi scrape_interval (mặc định là 1 phút).

  • Dữ liệu này được lưu trữ cục bộ trên hệ thống Prometheus để sử dụng cho các truy vấn và đánh giá cảnh báo.

Ngoài ra, Prometheus cũng có một vòng lặp độc lập để đánh giá cảnh báo theo chu kỳ evaluation_interval (mặc định cũng là 1 phút).

  • Trong mỗi chu kỳ đánh giá, Prometheus kiểm tra điều kiện cảnh báo, cập nhật trạng thái và quyết định có kích hoạt cảnh báo hay không.

📌 Một số trạng thái của cảnh báo trong Prometheus:

Trạng tháiMô tả
InactiveCảnh báo chưa kích hoạt
PendingCảnh báo mới được phát hiện nhưng chưa đạt điều kiện thời gian
FiringCảnh báo đã đủ điều kiện và được gửi đi

2️⃣ Hiểu Rõ Vòng Đời Của Cảnh Báo Trong Prometheus

🔹 Một ví dụ thực tế

Giả sử chúng ta có một cảnh báo kiểm tra tải CPU trung bình trong 1 phút (node_load1), và kích hoạt nếu nó cao hơn 20 trong ít nhất 1 phút:

ALERT NODE_LOAD_1M
  IF node_load1 > 20
  FOR 1m

Hệ thống của chúng ta được cấu hình như sau:

global:
  scrape_interval: 20s
  evaluation_interval: 1m

🚀 Câu hỏi: Khi tải CPU trung bình (node_load1) vượt ngưỡng 20, mất bao lâu để cảnh báo được gửi đi?

💡 Câu trả lời:
Thời gian cảnh báo có thể dao động từ 1 phút đến 2 phút 20 giây.

🔹 Giải thích chi tiết

🔹 Các sự kiện diễn ra theo thứ tự như sau:
1️⃣ Prometheus thu thập dữ liệu hệ thống sau mỗi 20 giây.
2️⃣ Prometheus đánh giá cảnh báo mỗi phút. Nếu node_load1 > 20, cảnh báo chuyển sang trạng thái pending (chờ).
3️⃣ Nếu tại lần đánh giá tiếp theo (sau 1 phút), node_load1 vẫn lớn hơn 20, cảnh báo chuyển sang firing (kích hoạt).
4️⃣ Prometheus gửi cảnh báo đến Alertmanager để xử lý và gửi thông báo.

📌 Lý do độ trễ có thể cao hơn 1 phút:

  • Nếu CPU tăng đột ngột ngay sau một lần scraping, ta phải đợi tối đa 20 giây để Prometheus thu thập dữ liệu.
  • Sau đó phải đợi đến lần đánh giá tiếp theo (1 phút sau) mới bắt đầu tính thời gian chờ FOR 1m.
  • Sau 1 phút nữa, cảnh báo mới chuyển sang trạng thái firing.

💡 Kết quả: Tổng thời gian chờ có thể dao động từ 1m – 2m20s, tùy thuộc vào thời điểm tải CPU tăng so với chu kỳ đánh giá.

3️⃣ Alertmanager: Xử Lý Cảnh Báo & Gửi Thông Báo

🔹 Alertmanager là gì?
Alertmanager là thành phần xử lý cảnh báo trước khi gửi đi qua các kênh như Slack, Email, PagerDuty,…

🔹 Các bước xử lý của Alertmanager:
1️⃣ Nhận cảnh báo từ Prometheus khi chuyển sang trạng thái firing.
2️⃣ Nhóm các cảnh báo tương tự lại để tránh gửi quá nhiều thông báo.
3️⃣ Đợi một khoảng thời gian (group_wait) trước khi gửi thông báo đầu tiên.
4️⃣ Nếu có nhiều cảnh báo mới xuất hiện trong nhóm, chúng sẽ không gửi ngay lập tức, mà đợi group_interval để gộp lại và gửi một lần.

📌 Ví dụ cấu hình Alertmanager:

route:
  group_by: [ 'instance' ]
  group_wait: 30s
  group_interval: 5m

🚀 Ý nghĩa của các thông số này:

  • group_by: ['instance'] → Gộp cảnh báo theo server (instance).
  • group_wait: 30s → Đợi 30 giây trước khi gửi thông báo đầu tiên (để gộp thêm các cảnh báo cùng nhóm).
  • group_interval: 5m → Nếu có thêm cảnh báo trong nhóm, chúng sẽ không được gửi ngay, mà đợi 5 phút trước khi thông báo tiếp theo được gửi.

💡 Tác động của group_waitgroup_interval:

  • Thêm 30 giây độ trễ ban đầu do group_wait.
  • Nếu có nhiều cảnh báo cùng nhóm, có thể mất thêm 5 phút trước khi thông báo tiếp theo được gửi.

📌 Tổng Kết: Độ Trễ Cảnh Báo Trong Prometheus Là Bao Lâu?

⏳ Tổng hợp các yếu tố gây trễ cảnh báo:

Yếu tốThời gian trễ tối đa
Scrape Interval (scrape_interval)20s
Evaluation Interval (evaluation_interval)1m
FOR Clause (FOR 1m)1m
Group Wait (Alertmanager)30s
Group Interval (Alertmanager)5m

👉 Thời gian trễ tổng cộng có thể dao động từ 1 phút đến hơn 8 phút, tùy vào cấu hình của bạn.

🚀 Cách giảm độ trễ:
Giảm scrape_interval (Ví dụ: từ 1m xuống 15s).
Giảm evaluation_interval để kiểm tra cảnh báo thường xuyên hơn.
Không đặt FOR quá lâu, trừ khi thực sự cần thiết.
Giảm group_waitgroup_interval nếu muốn cảnh báo được gửi nhanh hơn.

🎯 Kết Luận

✅ Prometheus có thể mất 1 – 2 phút để phát hiện cảnh báo, nhưng có thể mất tới 8 phút để nhận thông báo tùy vào cách cấu hình Alertmanager.
✅ Hiểu rõ scrape_interval, evaluation_interval, FOR clause, group_wait, group_interval giúp bạn điều chỉnh Prometheus phù hợp với nhu cầu.
✅ Nếu bạn cần cảnh báo tức thời, hãy giảm các giá trị scrape_interval, evaluation_interval, và group_wait.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories