Mở Đầu.
Prometheus là một hệ thống giám sát và cảnh báo mã nguồn mở phổ biến được sử dụng rộng rãi để thu thập dữ liệu từ các ứng dụng và hệ thống khác nhau. Để bảo đảm rằng các cảnh báo được tạo ra bởi Prometheus được gửi và xử lý một cách hiệu quả, người dùng thường tích hợp Prometheus với Alertmanager – một thành phần quan trọng trong hệ thống giám sát.
Alertmanager có khả năng nhận cảnh báo từ Prometheus và gửi thông báo tới các kênh như email, Slack, PagerDuty và nhiều ứng dụng khác. Để thực hiện điều này, Alertmanager sử dụng các mẫu thông báo để tạo nội dung thông báo dựa trên thông tin từ các cảnh báo. Trong bài viết này, chúng ta sẽ tìm hiểu về cách gửi cảnh báo cho Alertmanager và định dạng cơ bản của cảnh báo.
Gửi Cảnh Báo cho Alertmanager.
Prometheus tự động xử lý việc gửi cảnh báo được tạo ra bởi các quy tắc cảnh báo đã được cấu hình. Đề nghị mạnh mẽ cấu hình quy tắc cảnh báo trong Prometheus dựa trên dữ liệu chuỗi thời gian thay vì triển khai một client trực tiếp.
Alertmanager có hai phiên bản API, v1 và v2, cả hai đều lắng nghe các cảnh báo. Định dạng cho v1 được mô tả trong đoạn mã dưới đây. Định dạng cho v2 được chỉ định trong một thông số OpenAPI có thể được tìm thấy trong kho lưu trữ Alertmanager. Các client được mong đợi liên tục gửi lại các cảnh báo miễn là chúng vẫn còn hoạt động (thường trong khoảng từ 30 giây đến 3 phút). Các client có thể đẩy danh sách cảnh báo đến Alertmanager thông qua một yêu cầu POST.
Nhãn của từng cảnh báo được sử dụng để xác định các phiên bản giống nhau của một cảnh báo và thực hiện việc loại bỏ trùng lặp. Các ghi chú luôn được đặt thành ghi chú nhận được gần đây nhất và không xác định một cảnh báo.
Cả hai timestamps startsAt và endsAt là tùy chọn. Nếu startsAt bị bỏ qua, thời gian hiện tại sẽ được gán bởi Alertmanager. endsAt chỉ được đặt nếu thời gian kết thúc của một cảnh báo đã được xác định. Nếu không, nó sẽ được đặt thành một khoảng thời gian đếm ngược có thể được cấu hình từ thời điểm cuối cùng mà cảnh báo đã được nhận.
Trường generatorURL là một liên kết back-link duy nhất xác định thực thể gây ra cảnh báo này trong client.
Dưới đây là một ví dụ về định dạng JSON để gửi cảnh báo:
[
{
"labels": {
"alertname": "<Tên cảnh báo bắt buộc>",
"<tên nhãn>": "<giá trị nhãn>",
...
},
"annotations": {
"<tên nhãn>": "<giá trị nhãn>",
},
"startsAt": "<rfc3339>",
"endsAt": "<rfc3339>",
"generatorURL": "<đường dẫn_nguồn_tạo_ra>"
},
...
]
Trong đó:
"labels"
: Chứa danh sách các nhãn (labels) của cảnh báo, bao gồm nhãn bắt buộc “alertname” và các nhãn tùy chọn khác."annotations"
: Chứa danh sách các ghi chú (annotations) của cảnh báo."startsAt"
: Thời điểm bắt đầu của cảnh báo, được định dạng theo chuẩn RFC3339."endsAt"
: Thời điểm kết thúc của cảnh báo, được định dạng theo chuẩn RFC3339 (tùy chọn)."generatorURL"
: Đường dẫn URL đến nguồn tạo ra cảnh báo.
Kết luận.
Trong bài viết này, chúng ta đã tìm hiểu về cách gửi cảnh báo cho Alertmanager của Prometheus. Việc cấu hình và gửi cảnh báo một cách hiệu quả rất quan trọng trong quá trình giám sát hệ thống và ứng dụng. Alertmanager đóng vai trò quan trọng trong việc quản lý và gửi cảnh báo đến các kênh thông báo khác nhau, giúp đảm bảo rằng nhóm hoặc tổ chức có thể phản ứng kịp thời với các sự cố.