Cấu hình cảnh báo (Alerting) và tự động hóa trên InfluxDB 2.x
Tạo Alert Rule để giám sát ngưỡng CPU và RAM
Truy cập vào giao diện web của InfluxDB (thường ở http://localhost:8086). Nhấn vào menu Load Data hoặc Explore để truy vấn dữ liệu từ Bucket đã tạo ở phần trước (ví dụ: bucket "telegraf-ubuntu").
Sử dụng ngôn ngữ truy vấn Flux để lọc dữ liệu CPU và RAM. Trong phần "Query" của Explore, dán đoạn code dưới đây để tính toán giá trị trung bình CPU và RAM trong 5 phút qua:
from(bucket: "telegraf-ubuntu")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu" or r._measurement == "mem")
|> filter(fn: (r) => r._field == "usage_user" or r._field == "usage_percent")
|> aggregateWindow(every: 1m, fn: mean)
Kết quả mong đợi: Bảng dữ liệu hiện ra các dòng giá trị trung bình của CPU và RAM theo từng khoảng thời gian 1 phút.
Chuyển sang tab Alerting trong thanh menu chính. Nhấn nút New Alert Rule. Chọn Flux làm nguồn dữ liệu (Data Source) và chọn Bucket "telegraf-ubuntu".
Sử dụng mẫu code Flux sau để định nghĩa điều kiện kích hoạt cảnh báo khi CPU usage_user vượt quá 80% hoặc RAM usage_percent vượt quá 90%:
from(bucket: "telegraf-ubuntu")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "cpu")
|> filter(fn: (r) => r._field == "usage_user")
|> aggregateWindow(every: 1m, fn: mean)
|> yield(name: "mean")
from(bucket: "telegraf-ubuntu")
|> range(start: -5m)
|> filter(fn: (r) => r._measurement == "mem")
|> filter(fn: (r) => r._field == "usage_percent")
|> aggregateWindow(every: 1m, fn: mean)
|> yield(name: "mean")
Kết quả mong đợi: InfluxDB hiển thị biểu đồ xu hướng của CPU và RAM trong 5 phút.
Trong phần Conditions, nhấn Add Condition. Chọn Threshold. Cấu hình như sau:
- Field: Chọn "usage_user" (đối với CPU) hoặc "usage_percent" (đối với RAM).
- Operator: Chọn ">" (Lớn hơn).
- Value: Nhập "80" cho CPU và "90" cho RAM.
Tên Alert Rule: Đặt là "High CPU or RAM Usage". Chọn Check every là 1m. Nhấn Save.
Để verify: Vào tab Alerting -> Alert Rules. Bạn sẽ thấy rule "High CPU or RAM Usage" ở trạng thái "Active". Nếu tải CPU cao, trạng thái sẽ chuyển sang "Firing".
Cấu hình Alert Notification (Email và Slack)
Để cảnh báo được gửi đi, bạn cần tạo một Notification Endpoint. Truy cập vào menu Load Data -> Alerting -> Notification Endpoints.
Cấu hình gửi cảnh báo qua Email
Nhấn New Notification Endpoint. Chọn loại Email.
Điền thông tin cấu hình SMTP của server mail của bạn (ví dụ sử dụng Gmail hoặc SMTP server nội bộ). Lưu ý: Nếu dùng Gmail, bạn cần bật "Less secure app access" hoặc tạo "App Password".
{
"type": "email",
"name": "email-alerts",
"address": "your-email@example.com",
"port": 587,
"host": "smtp.gmail.com",
"username": "your-email@example.com",
"password": "YOUR_APP_PASSWORD_HERE",
"subject": "InfluxDB Alert: High Resource Usage",
"from": "influxdb@your-domain.com"
}
Kết quả mong đợi: Sau khi nhấn Test Connection, InfluxDB báo "Connection successful". Nhấn Save.
Cấu hình gửi cảnh báo qua Slack
Tiếp tục tạo Endpoint mới. Chọn loại Slack.
Bạn cần có một Webhook URL từ Slack. Tạo channel mới trên Slack, vào Integrations -> Incoming Webhooks, copy URL.
{
"type": "slack",
"name": "slack-alerts",
"url": "https://hooks.slack.com/services/XXXX/YYYY/ZZZZ",
"channel": "#alerts"
}
Kết quả mong đợi: Nhấn Test Connection, bạn sẽ nhận được một tin nhắn thử nghiệm trên kênh Slack. Nhấn Save.
Liên kết Alert Rule với Notification Endpoint
Vào lại tab Alert Rules. Click vào rule "High CPU or RAM Usage" đã tạo ở phần trên.
Trong tab Notifications của rule đó, nhấn Add Notification.
Chọn Endpoint vừa tạo (ví dụ: "email-alerts" hoặc "slack-alerts"). Cấu hình hành động:
- When: Chọn "When status is firing" (khi cảnh báo kích hoạt).
- Message: Tùy chỉnh thông báo, ví dụ: "CPU usage is above 80% on Ubuntu 24.04 server".
Nhấn Save để hoàn tất liên kết.
Để verify: Tạo tải CPU giả lập bằng lệnh yes > /dev/null & trên server. Chờ 1 phút, sau đó kiểm tra email hoặc Slack. Bạn sẽ nhận được cảnh báo.
Sử dụng Task để tự động hóa truy vấn Flux
Task cho phép bạn chạy một đoạn code Flux định kỳ mà không cần Dashboard hay Alert Rule, thường dùng để dọn dẹp dữ liệu hoặc chuyển đổi định dạng.
Vào menu Load Data -> Tasks. Nhấn New Task.
Đặt tên Task là "Cleanup Old Data". Chọn Schedule: Every 1 hour (hoặc tùy nhu cầu).
Viết code Flux để xóa dữ liệu cũ hơn 7 ngày khỏi bucket "telegraf-ubuntu". Lưu ý: Cần dùng delete function hoặc deleteBucket logic tùy phiên bản, ở đây dùng delete để xóa điểm dữ liệu:
import "influxdata/influxdb/v1"
v = {
bucketID: "YOUR_BUCKET_ID_HERE",
orgID: "YOUR_ORG_ID_HERE",
predicate: "_measurement =~ /^cpu$/ and _time < -7d",
start: 0,
stop: -7d
}
v1.deleteBucket(
bucketID: v.bucketID,
orgID: v.orgID,
predicate: v.predicate,
start: v.start,
stop: v.stop
)
Kết quả mong đợi: Task được tạo với trạng thái "Running". Nó sẽ tự động chạy mỗi giờ để xóa dữ liệu CPU cũ hơn 7 ngày.
Để verify: Vào tab Tasks, chọn task vừa tạo, vào tab Runs. Bạn sẽ thấy lịch sử các lần chạy. Nếu muốn chạy thủ công để test, nhấn nút Run Now.
Kiểm tra lịch sử cảnh báo và trạng thái kích hoạt
Để xem lại các sự kiện cảnh báo đã xảy ra, truy cập menu Load Data -> Alerting -> Notification Logs.
Trong bảng log, bạn có thể lọc theo:
- Status: Firing, OK, Inactive.
- Alert Rule: Chọn tên rule cụ thể.
- Time range: Chọn khoảng thời gian cần kiểm tra.
Kết quả mong đợi: Bảng hiện ra danh sách các lần cảnh báo đã được kích hoạt, thời gian xảy ra, và trạng thái gửi đi (Success/Failed) của endpoint.
Để xem chi tiết một sự kiện: Click vào dòng log. Bạn sẽ thấy thông tin đầy đủ về giá trị dữ liệu (value) tại thời điểm kích hoạt, message đã gửi, và endpoint đã sử dụng.
Để kiểm tra trạng thái thời gian thực của tất cả rules, vào tab Alert Rules. Cột Status sẽ hiển thị:
- Active: Rule đang chạy và giám sát.
- Firing: Rule đang kích hoạt cảnh báo (điều kiện thỏa mãn).
- OK: Rule đang chạy nhưng điều kiện chưa thỏa mãn.
- Inactive: Rule bị tạm dừng (Disabled).
Điều hướng series:
Mục lục: Series: Triển khai Database Time-Series với InfluxDB trên Ubuntu 24.04
« Phần 7: Triển khai dashboard trực quan với Grafana
Phần 9: Tối ưu hóa hiệu năng và sao lưu dữ liệu »