Saturday, January 18, 2025

[Prometheus – Alerting] – Phần 6: Tùy chỉnh thông báo Slack trong Prometheus Alertmanager

-

Giới thiệu.

Thông báo chính trong Prometheus được gửi đến Alertmanager, sau đó Alertmanager gửi thông báo đến các nguồn nhận khác nhau dựa trên các nhãn (labels) của chúng. Một trong các nguồn nhận phổ biến là Slack, và bạn có thể tùy chỉnh thông báo Slack của mình để chứa thông tin quan trọng hoặc liên kết đến tài liệu hướng dẫn cụ thể về cảnh báo đang được gửi.

Dưới đây là một số ví dụ về cách tùy chỉnh thông báo Slack bằng cách sử dụng Prometheus Alertmanager.

Customizing Slack notifications.

Trong ví dụ này, chúng ta đã tùy chỉnh thông báo Slack để gửi một liên kết đến wiki của tổ chức của chúng ta về cách xử lý cảnh báo cụ thể đã được gửi.

global:
  # Cũng có thể đặt URL này trong một file.
  # Ví dụ: `slack_api_url_file: '/etc/alertmanager/slack_url'`
  slack_api_url: '<slack_webhook_url>'

route:
  receiver: 'slack-notifications'
  group_by: [alertname, datacenter, app]

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'
    text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}'

Accessing annotations in CommonAnnotations

Trong ví dụ này, chúng ta tùy chỉnh lại văn bản được gửi đến người nhận Slack bằng cách truy cập vào các phần tóm tắt và mô tả được lưu trữ trong CommonAnnotations của dữ liệu được gửi bởi Alertmanager.

Alert:
groups:
- name: Instances
  rules:
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
      summary: 'Instance {{ $labels.instance }} down'
Receiver:
- name: 'team-x'
  slack_configs:
  - channel: '#alerts'
    text: "<!channel> \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}"

Ranging over all received Alerts

Cuối cùng, giả sử cùng một cảnh báo như ví dụ trước, chúng ta tùy chỉnh người nhận của mình để duyệt qua tất cả các cảnh báo được nhận từ Alertmanager, in ra các tóm tắt và mô tả tương ứng của chúng trên các dòng mới.

Receiver:
- name: 'default-receiver'
  slack_configs:
  - channel: '#alerts'
    title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
    text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"

Defining reusable templates

Quay lại ví dụ đầu tiên của chúng ta, chúng ta cũng có thể cung cấp một file chứa các mẫu có tên, sau đó Alertmanager sẽ tải chúng để tránh sử dụng các mẫu phức tạp kéo dài qua nhiều dòng. Hãy tạo một file dưới thư mục /alertmanager/template/myorg.tmpl và tạo một mẫu trong đó có tên “slack.myorg.txt”:

{{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}

Cấu hình sẽ tải mẫu với tên cụ thể này cho trường “text” và chúng ta cung cấp một đường dẫn đến file mẫu tùy chỉnh của chúng ta:

global:
  slack_api_url: '<slack_webhook_url>'

route:
  receiver: 'slack-notifications'
  group_by: [alertname, datacenter, app]

receivers:
- name: 'slack-notifications'
  slack_configs:
  - channel: '#alerts'
    text: '{{ template "slack.myorg.text" . }}'

templates:
- '/etc/alertmanager/templates/myorg.tmpl'

Tổng kết.

Thông qua việc tùy chỉnh thông báo Slack trong Prometheus Alertmanager, bạn có thể tạo ra các thông báo cảnh báo động hơn và cung cấp liên kết đến tài liệu hướng dẫn cụ thể cho các tình huống cụ thể. Việc sử dụng các mẫu và chức năng tùy chỉnh giúp bạn tận dụng được tiềm năng của Alertmanager để quản lý cảnh báo một cách hiệu quả.

1 COMMENT

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories