Header Ads Widget

Ticker

6/recent/ticker-posts

Hệ thống cảnh báo "Alert Manager" trên Grafana phiên bản mới

Keyword: How to setting "Alert Manager" on Grafana new version.

Đã gần một năm mình đã không đụng chạm gì tới trang web này của mình, một phần vì công việc hiện tại của mình quá nhiều, một phần vì gia đình mình xảy ra vài chuyện thành ra để viết blog cũng như chia sẽ tới các bạn đến cuối năm nay mình mới có cơ hội viết. Cũng một phần là nhờ gần đây chợt tình cờ mình đụng chạm lại tới thằng alert của Grafana thì thấy rằng hình như nó đã thay đổi quá nhiều lẫn cả giao diện và config.

Thành ra mình xin phép đóng góp vài kiến thức nho nhỏ cũng như để các bạn giống như mình đỡ bỡ ngỡ.

Alert Manager của Grafana bắt đầu thay đổi giao diện và setting mới từ phiên bản 8.0.0.

Phiên bản 8.0.0 của Alert Manager đã giới thiệu một số thay đổi quan trọng, bao gồm:

  • Giao diện người dùng mới: Giao diện người dùng mới của Alert Manager được thiết kế lại để dễ sử dụng hơn và cung cấp nhiều tính năng mới.
  • Các setting mới: Các setting mới cho phép bạn kiểm soát tốt hơn các alert của mình.
  • Hỗ trợ Prometheus Operator: Alert Manager hiện hỗ trợ Prometheus Operator, giúp bạn dễ dàng triển khai và quản lý Alert Manager.

Ok, thôi thì mình không dài dòng nữa, mình sẽ đi thẳng vào vấn đề chính luôn vậy, để xây dựng alert cho Grafana phiên bản mới này thì buộc các bạn phải chú ý 3 tabs quan trọng sau trong Grafana:

  1. Alert rules: Nơi chúng ta sẽ setting rules cho alert
  2. Contact points: Tạo những contact để bạn có thể bắn alert đến, đại loại ở đây có thể là Telegram hoặc Email v.v
  3. Notification policies: Tạo policy để khi setting ở phần "Alerts rules" mình sẻ trỏ Labels đến policy đã được lựa chọn points sẵn points bắn thông báo về (đoạn này khá phức tạp và khó hiểu đúng không, ban đầu mình cũng như các bạn vậy, mới tìm hiểu luôn thế nhưng để mình làm mẫu cho các bạn là các bạn sẽ hiểu liền thôi)

Bước 1: Chúng ta sẽ thực hiện truy cập vào "Contact points" trước nhé và các bạn thực hiện add mới

Tại đây mình sẻ sử dụng alert tới Telegram để làm bài Lab này cho các bạn nhé, còn việc setting để alert tới Telegram như thế nào thì các bạn có thể xem ở bài viết sau:

Bước 2: Chúng ta sẽ chuyển sang config cho thằng "Notification policies"

Thực hiện tạo mới bằng cách chọn "New nested policy"

Sau đó chúng ta sẻ đặt name Label cho policy này, ở đây mình đặt Label là "send_to" và bằng với giá trị là "telegram" sau đó chọn Contact point lúc nảy mình đã tạo ở trên, thường mình sẽ đặt tên giá trị của Label trùng với Contact point để dễ dàng quản lý.

Ở đây chúng ta có 3 mục mà đối với mình thấy là khá thú vị và đặt biệt là mục "Repeat interval" để nhắc cho mình liên tục khi mình bị miss tin nhắn hay là để biết rằng hệ thống chưa được sữa chữa và rất gấp vì nếu mình setting là 1s thì nó sẻ bắn alert liên tục về cho mình, mình sẽ nói chi tiết rõ hơn từng mục ở dưới nhé


1. Group wait:

  • Ý nghĩa: Thời gian chờ trước khi gửi thông báo đầu tiên cho một nhóm mới được tạo bởi một cảnh báo đến.
  • Mục đích: Tạo khoảng trễ để tránh gửi quá nhiều thông báo liên tục cho cùng một vấn đề, gây ra tình trạng spam cảnh báo.
  • Cách hoạt động:
    • Nếu có nhiều cảnh báo tương tự đến trong khoảng thời gian "Group wait", chúng sẽ được nhóm lại thành một nhóm duy nhất.
    • Sau khi hết thời gian "Group wait", chỉ một thông báo duy nhất sẽ được gửi cho nhóm đó.
  • Thiết lập: Nếu để trống, giá trị này sẽ được kế thừa từ policy cha.

2. Group interval:

  • Ý nghĩa: Thời gian chờ giữa các lần gửi hàng loạt các cảnh báo mới cho cùng một nhóm sau khi thông báo đầu tiên đã được gửi.
  • Mục đích: Tương tự như "Group wait", nhằm giảm thiểu số lượng thông báo được gửi đi cho cùng một vấn đề.
  • Cách hoạt động:
    • Sau khi thông báo đầu tiên được gửi cho nhóm cảnh báo, các cảnh báo mới đến trong cùng nhóm sẽ được giữ lại và gửi theo từng đợt (batch) sau mỗi khoảng thời gian "Group interval".
  • Thiết lập: Nếu để trống, giá trị này cũng sẽ được kế thừa từ policy cha.

3. Repeat interval:

  • Ý nghĩa: Thời gian chờ giữa các lần gửi lại một cảnh báo sau khi nó đã được gửi thành công.
  • Mục đích: Đảm bảo rằng các cảnh báo quan trọng không bị bỏ lỡ nếu chúng vẫn tồn tại sau lần gửi đầu tiên.
  • Cách hoạt động:
    • Nếu một cảnh báo vẫn đang ở trạng thái "firing" sau khi đã được gửi thành công, nó sẽ được gửi lại sau mỗi khoảng thời gian "Repeat interval" cho đến khi nó được giải quyết.

4. Mute timings:

  • Ý nghĩa: Tùy chọn thêm thời gian tắt tiếng (mute) cho policy.
  • Mục đích: Cho phép bạn tạm thời tắt tiếng các cảnh báo trong một khoảng thời gian nhất định, ví dụ như trong lúc bảo trì hệ thống hoặc khi bạn đã biết về vấn đề và đang xử lý nó.
  • Cách hoạt động:
    • Khi một policy được tắt tiếng, các cảnh báo thuộc policy đó sẽ không được gửi đi nữa.

 Bước 3: Cũng là bước cuối cùng các bạn chọn "Alert rules" sau đó chọn "New alert rule"

Ở phần này chúng ta sẽ không làm gì khác so với phiên bản trước đây vẫn là những câu Query vẫn như vậy, thành ra mình sẽ không nói nhiều đến những câu Query này mà chỉ đi vào phần alert thôi nhé


Nhưng cái chúng ta quan tâm chính là chỗ Labels này, bạn còn nhớ cái đoạn ở bước 2 chúng ta làm chứ

Chính xác là như vậy, ở phần Labels này chúng ta phải điền trùng với Label ở phần "Notification policies" mà chúng ta đã setting ở trên để nó có thể tìm thấy và bắn alert đến "Contact points" mà mình setting trong policy, do ở trên mình đã setting key là "send_to"value là "telegram" sau đó bắn về point "telegram" nên giờ mình chỉ việc viết lại key và value của đoạn "Notification policies" thôi.

Vấn đề quan trọng thứ 2 chính là phần annotations, bởi vì như trước đây thì bạn không cần lo về giá trị bắn ra, cũng như name của nó sẽ như thế nào, nhưng bây giờ thì lại khác, bạn buộc phải quan tâm những điều đó vì bây giờ nó chỉ show ra dưới dạng B0, B1, B2, v.v

Ứng với từng giá trị B đó sẻ là value, ví dụ như trước đây nó sẻ show ra là "node-exporter:9100=15" còn bây giờ thì nó sẻ show ra "B0=15" vậy để giải quyết vấn đề này chúng ta cần phải code, dưới đây là một đoạn code ngắn của mình các bạn có thể lấy tham khảo

[+] List RAM have value above 80%:
{{ range $k, $v := $values -}}
  {{ if (match "B[0-9]+" $k) -}}
    {{ $v.Labels.instance }}: {{ $v.Value }}
    {{ title "---------------------------------------" }}
  {{ end }}
{{ end }}

Hoặc các bạn có thể theo dõi bài viết gốc này của Grafana nhé: Click

Nguồn: www.itblognote.com

Post a Comment

0 Comments