Saturday, January 18, 2025

[Prometheus – Alerting] – Phần 5: Cấu trúc alert template trong Alertmanager

-

1. Mở đầu.

Trong quá trình giám sát hệ thống, việc thông báo về các cảnh báo là một phần quan trọng để duyệt qua các vấn đề một cách hiệu quả. Alertmanager, một thành phần của hệ thống Prometheus, đảm nhận nhiệm vụ này bằng cách xử lý các cảnh báo và gửi thông báo đến các đối tượng tiếp nhận khác nhau, chẳng hạn như Slack, PagerDuty, email, hoặc cách tích hợp tùy chỉnh thông qua giao diện webhook.

Thông báo được gửi đến các đối tượng tiếp nhận được xây dựng thông qua các mẫu. Alertmanager đi kèm với các mẫu mặc định, nhưng chúng cũng có thể được tùy chỉnh. Để tránh sự nhầm lẫn, quan trọng là lưu ý rằng các mẫu của Alertmanager khác biệt so với việc tạo mẫu trong Prometheus, tuy nhiên, Prometheus cũng bao gồm việc tạo mẫu trong các nhãn/ghi chú của các quy tắc cảnh báo.

Mẫu thông báo của Alertmanager được dựa trên hệ thống Go templating. Lưu ý rằng một số trường được đánh giá là văn bản, và một số trường được đánh giá là HTML, điều này sẽ ảnh hưởng đến việc tránh những ký tự đặc biệt.

2. Dữ liệu cấu trúc.

Trước khi chúng ta khám phá chi tiết về cách tạo mẫu thông báo, hãy tìm hiểu về cấu trúc dữ liệu cơ bản:

  • Receiver: Xác định tên của đối tượng tiếp nhận mà thông báo sẽ được gửi đến (Slack, email, vv.).
  • Status: Được xác định là “firing” nếu ít nhất một cảnh báo đang hoạt động, ngược lại là “resolved.”
  • Alerts: Danh sách tất cả các đối tượng cảnh báo trong nhóm này.
  • GroupLabels: Các nhãn mà các cảnh báo này đã được nhóm theo.
  • CommonLabels: Các nhãn phổ biến cho tất cả các cảnh báo.
  • CommonAnnotations: Tập hợp các chú thích phổ biến cho tất cả các cảnh báo, được sử dụng để chứa các thông tin mở rộng về cảnh báo.
  • ExternalURL: Liên kết trở lại Alertmanager đã gửi thông báo.

3. Alerts.

Alerts (Cảnh báo) là một phần quan trọng của dữ liệu, và chúng cung cấp các thông tin cụ thể về cảnh báo như sau:

  • Status: Xác định xem cảnh báo đã được giải quyết (resolved) hay đang hoạt động (firing).
  • Labels: Tập hợp các nhãn được gắn vào cảnh báo.
  • Annotations: Tập hợp các chú thích cho cảnh báo.
  • StartsAt: Thời điểm bắt đầu cảnh báo. Nếu bỏ trống, thời gian hiện tại được gán bởi Alertmanager.
  • EndsAt: Chỉ được thiết lập nếu thời gian kết thúc của cảnh báo đã biết. Nếu không, nó sẽ được thiết lập thành một khoảng thời gian cố định từ thời điểm cuối cùng cảnh báo được nhận.
  • GeneratorURL: Liên kết trở lại xác định thực thể gây ra cảnh báo.
  • Fingerprint: Dấu vân tay có thể được sử dụng để xác định cảnh báo.

4. KV.

Cùng với cấu trúc dữ liệu trên, chúng ta còn có một kiểu dữ liệu quan trọng khác là KV, đại diện cho các cặp khóa/giá trị chuỗi:

type KV map[string]string

KV cho phép lưu trữ các nhãn và chú thích của cảnh báo. Ngoài việc truy cập trực tiếp vào dữ liệu (nhãn và chú thích) lưu trữ dưới dạng KV, chúng ta cũng có các phương thức để sắp xếp, loại bỏ và xem danh sách nhãn:

  • SortedPairs: Trả về một danh sách sắp xếp các cặp khóa/giá trị chuỗi.
  • Remove: Trả về một bản sao của bản đồ khóa/giá trị mà không có các khóa được chỉ định.
  • Names: Trả về tên của các nhãn trong bản đồ.
  • Values: Trả về một danh sách các giá trị trong bản đồ.

5. Hàm.

Go templating system cung cấp một số hàm mặc định để biến đổi và xử lý dữ liệu:

  • title: Chuyển đổi chuỗi thành dạng in hoa chữ cái đầu của mỗi từ.
  • toUpper: Chuyển đổi tất cả các ký tự trong chuỗi thành chữ in hoa.
  • toLower: Chuyển đổi tất cả các ký tự trong chuỗi thành chữ thường.
  • trimSpace: Loại bỏ các khoảng trắng dẫn và kết thúc trong chuỗi.
  • match: Kiểm tra xem một chuỗi có khớp với một biểu thức chính quy đã cho hay không.
  • reReplaceAll: Thực hiện thay thế chuỗi con khớp với biểu thức chính quy bằng một chuỗi khác.
  • join: Kết hợp các phần tử của một mảng chuỗi để tạo thành một chuỗi duy nhất. Tham số sep xác định dấu phân tách giữa các phần tử.
  • safeHtml: Đánh dấu chuỗi là HTML và không yêu cầu việc tự động thoát các ký tự đặc biệt.
  • stringSlice: Trả về các chuỗi đã truyền dưới dạng một mảng chuỗi.

6. Kết luận.

Trong bài viết này, chúng tôi đã khám phá cấu trúc dữ liệu và các khái niệm cơ bản về mẫu thông báo trong Alertmanager. Chúng tôi đã tìm hiểu về cách sử dụng hệ thống Go templating để tạo ra các thông báo linh hoạt và đáp ứng nhu cầu cụ thể của tổ chức. Sự kết hợp giữa dữ liệu cấu trúc và các hàm mặc định cung cấp một cách mạnh mẽ để tùy chỉnh thông báo và cung cấp thông tin cảnh báo quan trọng.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories