Tích hợp Prometheus Alertmanager - Cảnh báo trên di động

Chuyển cảnh báo từ Prometheus Alertmanager tới Echobell để nhận thông báo đẩy hoặc cuộc gọi cho sự cố máy chủ và hạ tầng.


Prometheus cùng Alertmanager là bộ công cụ giám sát và cảnh báo mã nguồn mở được dùng rất rộng rãi. Bằng cách tích hợp Alertmanager với Echobell, bạn có thể nhận thông báo tức thì trên điện thoại (kể cả cảnh báo khẩn cấp hoặc dạng cuộc gọi) mỗi khi các quy tắc cảnh báo của bạn kích hoạt.

Yêu cầu

  • Một tài khoản Echobell đã tạo ít nhất một kênh
  • Một hệ thống Prometheus + Alertmanager đang chạy
  • Quyền chỉnh sửa cấu hình Alertmanager của bạn (alertmanager.yml)

Tổng quan thiết lập

  1. Tạo một kênh Echobell
  2. Cấu hình mẫu thông báo (và Mẫu liên kết nếu muốn)
  3. Chọn một cách tích hợp:
    • Webhook thông qua webhook receiver của Alertmanager (khuyên dùng)
    • Email thông qua email receiver của Alertmanager (cách thay thế)
  4. Tạo hoặc cập nhật quy tắc cảnh báo
  5. Thử nghiệm và tinh chỉnh

Hướng dẫn từng bước

Tạo một kênh Echobell

  1. Mở ứng dụng Echobell
  2. Tạo một kênh mới (ví dụ: "Prometheus Alerts")
  3. Chọn một màu để dễ nhận biết

Cấu hình mẫu thông báo

Payload webhook của Alertmanager chứa các trường có cấu trúc như status, commonLabels, commonAnnotations, externalURL và một mảng alerts. Bạn có thể tham chiếu trực tiếp những trường này trong mẫu của Echobell.

Mẫu gợi ý:

Mẫu tiêu đề:

{{commonLabels.alertname}} - {{status}}

Mẫu nội dung:

🔔 Alert: {{commonLabels.alertname}}
📊 Severity: {{commonLabels.severity}}
🖥️ Instance: {{alerts[0].labels["instance"]}}
⏰ Starts: {{alerts[0].startsAt}}
ℹ️ Summary: {{commonAnnotations.summary}}
🧾 Description: {{commonAnnotations.description}}

Mẫu liên kết tùy chọn (Cài đặt nâng cao):

{{alerts[0].generatorURL || externalURL}}

Cách này hiển thị một liên kết trực tiếp tới biểu đồ hoặc dashboard đang cảnh báo ngay trong bản ghi cảnh báo của bạn. Nếu không có generatorURL, hệ thống sẽ dùng externalURL thay thế.

Cách tích hợp A — Webhook (khuyên dùng)

  1. Trong kênh Echobell, sao chép Webhook URL ở phần Triggers
  2. Trong Alertmanager, thêm một webhook receiver gửi POST tới URL đó

Ví dụ alertmanager.yml tối giản:

route:
  receiver: echobell-webhook

receivers:
  - name: echobell-webhook
    webhook_configs:
      - url: "https://hook.echobell.one/t/<channel-token>"
        send_resolved: true
        http_config:
          follow_redirects: true

Ghi chú:

  • send_resolved: true cũng sẽ thông báo khi cảnh báo được xử lý xong (status chuyển thành resolved)
  • Echobell đọc nguyên body JSON, nên các mẫu ở trên sẽ hiển thị đúng

Cách tích hợp B — Email (thay thế)

Nếu bạn thích hoặc buộc phải dùng email, hãy dùng email receiver của Alertmanager và gửi tới địa chỉ email gắn với kênh.

  1. Trong Echobell, sao chép địa chỉ email của kênh ở mục Triggers
  2. Cấu hình một email receiver trong Alertmanager và dùng các mẫu đơn giản

Đoạn cấu hình ví dụ:

receivers:
  - name: echobell-email
    email_configs:
      - to: "PASTE_CHANNEL_EMAIL_ADDRESS"
        send_resolved: true
        subject: "{{ .CommonLabels.alertname }} - {{ .Status }}"
        html: |
          <p><strong>Summary:</strong> {{ .CommonAnnotations.summary }}</p>
          <p>{{ .CommonAnnotations.description }}</p>
          <p>
            <a href='{{ (index .Alerts 0).GeneratorURL }}' target='_blank' rel='noopener'>Open in Prometheus</a>
          </p>

Trong mẫu Echobell dành cho kích hoạt qua email, bạn có thể dùng các biến như subject, text và html mà Echobell tự động cung cấp.

Tạo một quy tắc cảnh báo ví dụ

Đây là một quy tắc nhỏ để thử luồng hoạt động:

groups:
  - name: example
    rules:
      - alert: HighCPU
        expr: avg(rate(process_cpu_seconds_total[5m])) > 0.8
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage"
          description: "CPU has been over 80% for 2 minutes"

Khi cảnh báo này kích hoạt, Alertmanager sẽ gửi sự kiện tới receiver bạn đã cấu hình và Echobell sẽ thông báo cho những người đăng ký kênh.

Kiểm thử tích hợp

  1. Tạm thời hạ ngưỡng xuống hoặc tạo một cảnh báo thử kích hoạt nhanh
  2. Xác nhận bạn nhận được thông báo Echobell khi cảnh báo kích hoạt
  3. Nếu dùng Mẫu liên kết, hãy mở bản ghi và chạm vào liên kết
  4. Xử lý xong cảnh báo và kiểm tra xem bạn có nhận được thông báo resolved không (nếu đã bật)

Chọn kiểu thông báo

  • Khẩn cấp: sự cố production nghiêm trọng, mức độ cần gọi người trực
  • Cuộc gọi: sự cố nặng, khi bạn cần được đánh thức hoặc phải vượt qua chế độ tập trung
  • Thông thường: cảnh báo thường ngày, cảnh báo mức warning hoặc thông tin tham khảo

Thực hành tốt nhất

  1. Giữ mẫu ngắn gọn nhưng đủ thông tin (tên cảnh báo, mức nghiêm trọng, instance, tóm tắt)
  2. Dùng Mẫu liên kết để nhảy thẳng tới biểu đồ hoặc dashboard liên quan
  3. Gom nhóm và định tuyến cảnh báo trong Alertmanager để tránh nhiễu và mệt mỏi vì cảnh báo
  4. Thêm nhãn severity và dùng các kiểu thông báo của Echobell tương ứng với mức độ khẩn cấp
  5. Bảo vệ webhook URL của Echobell như một thông tin bí mật; hãy đổi mới nếu bị lộ

Xử lý sự cố

Nếu cảnh báo không xuất hiện trong Echobell:

  • Kiểm tra lại webhook URL hoặc địa chỉ email của kênh có đúng không
  • Đảm bảo kênh Echobell đang hoạt động và có người đăng ký
  • Xem log Alertmanager để tìm lỗi gửi
  • Xác nhận route trong alertmanager.yml thực sự trỏ tới receiver mà bạn muốn
  • Thử với một quy tắc cảnh báo đơn giản, dùng một lần
  • Nếu dùng email, hãy đảm bảo cấu hình SMTP hoạt động và email được gửi đi

Quyền riêng tư và xử lý dữ liệu

Echobell ưu tiên quyền riêng tư:

  • Nội dung thông báo nằm lại trên thiết bị của bạn
  • Chỉ dữ liệu cấu hình tối thiểu được lưu trên máy chủ
  • Webhook URL và địa chỉ email của kênh nên được coi là thông tin bí mật
  • Echobell không giữ lại payload cảnh báo của bạn trên máy chủ

Tài nguyên khác