Hướng dẫn tích hợp Prometheus Alertmanager với DingTalk qua Webhook

Dự án prometheus-webhook-dingtalk đóng vai trò như một middleware (trung gian) giúp chuyển đổi các thông báo cảnh báo từ Prometheus Alertmanager sang định dạng mà robot DingTalk có thể hiểu và hiển thị. Đây là giải pháp hiệu quả để quản lý hạ tầng và nhận thông báo thời gian thực trên nền tảng DingTalk.

1. Cấu trúc thư mục dự án

Dưới đây là sơ đồ tổ chức mã nguồn và các thành phần quan trọng trong dự án:

prometheus-webhook-dingtalk/
├── cmd/
│   └── main.go                 # Điểm khởi đầu của ứng dụng (Entry point)
├── config/
│   ├── dingtalk.yml            # Tệp cấu hình mẫu cho các endpoint DingTalk
│   └── example.yml             # Các thiết lập cấu hình mở rộng
├── internal/
│   └── ...                     # Chứa logic xử lý nghiệp vụ và điều hướng Webhook
├── scripts/
│   └── ...                     # Các kịch bản hỗ trợ đóng gói và triển khai
├── docker-compose.yml          # Cấu hình để chạy nhanh ứng dụng bằng Docker
├── go.mod                      # Quản lý các thư viện phụ thuộc (Dependencies)
└── LICENSE                     # Giấy phép mã nguồn mở

Trong đó, thư mục internal/ là nơi chứa các mã nguồn xử lý chính về việc chuyển đổi template từ Alertmanager sang Markdown hoặc văn bản thuần túy cho DingTalk. Thư mục cmd/ chịu trách nhiệm khởi tạo các tham số dòng lệnh và khởi động HTTP Server.

2. Cơ chế hoạt động của file khởi tạo

Tệp cmd/main.go đóng vai trò điều khiển toàn bộ vòng đời của ứng dụng. Khi thực thi, chương trình sẽ thực hiện các bước sau:

  • Nạp cấu hình: Đọc tham số từ file YAML hoặc biến môi trường để xác định cổng dịch vụ và các token của DingTalk.
  • Đăng ký Router: Thiết lập các endpoint nhận dữ liệu (thường là /dingtalk/<name>/send).
  • Xử lý tín hiệu: Lắng nghe các yêu cầu POST từ Alertmanager, sau đó định dạng lại nội dung dựa trên template đã định nghĩa trước khi chuyển tiếp tới API của DingTalk.

3. Chi tiết cấu hình Webhook

Để kết nối Alertmanager với DingTalk, bạn cần chỉnh sửa file cấu hình (ví dụ: config.yml). File này cho phép bạn định nghĩa nhiều "target" (đích đến) khác nhau cho các nhóm hoặc kênh DingTalk khác nhau.

## Cấu hình mục tiêu gửi cảnh báo
targets:
  ops_team:
    url: "https://oapi.dingtalk.com/robot/send?access_token=YOUR_SECURE_TOKEN"
    # Ký hiệu bảo mật nếu robot DingTalk yêu cầu mã xác thực (Signature)
    secret: "SEC1234567890abcdef"
    # Danh sách số điện thoại cần được @ nhắc tên trực tiếp
    mention_mobiles:
      - "0901234567"
      - "0987654321"
    # Tùy chọn nhắc tên tất cả thành viên trong nhóm
    mention_all: false

  dev_team:
    url: "https://oapi.dingtalk.com/robot/send?access_token=ANOTHER_TOKEN"
    mention_all: true

Các tham số quan trọng cần lưu ý:

  • url: URL Webhook được cung cấp khi bạn tạo Bot trong nhóm DingTalk.
  • secret: Nếu bạn chọn phương thức bảo mật "Signature" trong cài đặt Bot, bạn phải cung cấp chuỗi khóa này để xác thực yêu cầu.
  • mention_mobiles: Giúp thông báo không bị trôi bằng cách gắn thẻ (tag) trực tiếp những người chịu trách nhiệm.

4. Tích hợp với Prometheus Alertmanager

Sau khi dịch vụ prometheus-webhook-dingtalk đã chạy, bạn cần cấu hình Alertmanager để gửi dữ liệu đến nó. Trong file alertmanager.yml, hãy thêm receiver như sau:

receivers:
- name: 'dingtalk-notifications'
  webhook_configs:
  - url: 'http://localhost:8060/dingtalk/ops_team/send'
    send_resolved: true

Địa chỉ URL trong cấu hình trên tương ứng với tên target ops_team đã được định nghĩa trong file cấu hình của công cụ Webhook. Tham số send_resolved: true đảm bảo rằng bạn sẽ nhận được thông báo khi vấn đề đã được khắc phục.

Thẻ: prometheus alertmanager DingTalk Webhook DevOps

Đăng vào ngày 26 tháng 7 lúc 18:44