Cấu hình Grafana để hiển thị kết quả dự báo từ LLM
Mục tiêu là tạo một Data Source mới trong Grafana để kết nối trực tiếp với API Gateway của mô hình LLM (được xây dựng ở Phần 4), cho phép truy vấn các dự báo sự cố dưới dạng văn bản tự nhiên.
Ta sẽ sử dụng plugin "Simple JSON" hoặc "InfluxDB/PostgreSQL" tùy vào nơi lưu trữ kết quả LLM, ở đây giả định kết quả LLM được lưu vào bảng `ai_predictions` trong PostgreSQL và truy vấn qua Data Source.
Bước 1: Cài đặt Data Source PostgreSQL (nếu chưa có) và cấu hình kết nối.
Lý do: Grafana cần biết nơi lưu trữ kết quả phân tích của LLM để vẽ biểu đồ hoặc hiển thị bảng cảnh báo.
Kết quả mong đợi: Data Source mới xuất hiện trong danh sách và trạng thái "Health Check" là OK.
cat > /etc/grafana/provisioning/datasources/ai_llm_ds.yml
Chạy lệnh dưới để khởi động lại Grafana và xác nhận Data Source hoạt động.
systemctl restart grafana-server && grafana-cli admin provisioning-check
Bước 2: Tạo Dashboard mới với biến (Variable) để lọc theo dịch vụ và hiển thị kết quả dự báo dạng văn bản.
Lý do: Cần giao diện linh hoạt để Ops Team chọn dịch vụ cụ thể và đọc ngay lập tức phân tích nguyên nhân (Root Cause Analysis) từ LLM.
Kết quả mong đợi: Dashboard hiện ra với bảng "AI Insight" chứa nội dung văn bản và biểu đồ xu hướng.
cat > /etc/grafana/provisioning/dashboards/aiops_main_dashboard.yml
Tạo file JSON nội dung Dashboard chi tiết với panel hiển thị văn bản LLM.
cat > /var/lib/grafana/dashboards/aiops/llm_predictions.json
Chạy lệnh để đồng bộ cấu hình Dashboard vào Grafana.
grafana-cli admin provisioning-check && systemctl restart grafana-server
Verify kết quả: Mở trình duyệt truy cập http://localhost:3000/d/aiops-llm-dashboard, chọn dịch vụ từ dropdown, kiểm tra xem panel "AI Insight" có hiển thị văn bản dự báo không.
Tích hợp API để nhận cảnh báo từ mô hình dự báo
Mục tiêu là xây dựng một endpoint API Gateway (sử dụng Go hoặc Python Flask) để nhận JSON từ mô hình LLM, xử lý logic, và đẩy vào hệ thống cảnh báo Grafana Alerting hoặc Slack.
Lý do: Mô hình LLM chạy độc lập (offline hoặc batch) cần một cầu nối để đẩy kết quả vào hệ thống monitoring real-time.
Kết quả mong đợi: API endpoint /api/v1/alerts sẵn sàng nhận POST request và trả về 200 OK.
Tạo thư mục project và file cấu hình Docker cho API Gateway.
mkdir -p /opt/aiops-alert-api && cd /opt/aiops-alert-api
cat > Dockerfile
cat > requirements.txt
Viết ứng dụng Python Flask để xử lý logic cảnh báo.
cat > app.py
Build và chạy container API Gateway.
docker build -t aiops-alert-api . && docker run -d --name aiops-api -p 8080:8080 -e SLACK_BOT_TOKEN="xoxb-your-token-here" aiops-alert-api
Verify kết quả: Gửi request thử nghiệm bằng curl.
curl -X POST http://localhost:8080/api/v1/alerts \
-H "Content-Type: application/json" \
-d '{"service_name": "payment-gateway", "severity": "critical", "prediction_text": "Dự đoán lỗi timeout do quá tải, đề xuất scale up.", "auto_remediation": "Scale to 5 pods"}'
Kiểm tra Slack channel xem có tin nhắn không và xem log của container.
docker logs aiops-api --tail 20
Thiết kế luồng xử lý cảnh báo (Escalation) dựa trên mức độ nghiêm trọng
Mục tiêu là mở rộng API Gateway để xử lý logic Escalation: nếu cảnh báo mức độ "Critical" không được giải quyết sau 15 phút, tự động nâng cấp lên cấp quản lý hoặc chuyển sang PagerDuty.
Lý do: Tránh tình trạng cảnh báo bị bỏ sót (alert fatigue) hoặc không được xử lý kịp thời đối với sự cố nghiêm trọng.
Kết quả mong đợi: API có cơ chế lưu trạng thái và tự động kích hoạt hành động nâng cấp sau khi hết thời gian chờ.
Thêm thư viện Redis để lưu trạng thái cảnh báo và thời gian chờ.
pip install redis --target /opt/aiops-alert-api/venv
Cập nhật file app.py với logic Escalation (chỉ thêm phần mới).
cat >> app.py
Khởi động lại container với biến môi trường mới và kết nối Redis.
docker stop aiops-api && docker rm aiops-api
docker run -d --name aiops-api \
-p 8080:8080 \
--network=host \
-e SLACK_BOT_TOKEN="xoxb-your-token-here" \
-e PAGERDUTY_URL="https://events.pagerduty.com/v2/enqueue" \
-e REDIS_HOST="redis" \
aiops-alert-api
Verify kết quả: Gửi cảnh báo Critical, đợi 15 phút (trong môi trường test có thể giảm biến ESCALATION_TIMEOUT_MINUTES xuống 1 phút trong code để test nhanh), kiểm tra log xem có dòng "ESCALATING" hay không.
docker logs aiops-api | grep -i "escalat"
Tự động hóa gửi thông báo qua Slack, Email hoặc PagerDuty
Mục tiêu là cấu hình Contact Point trong Grafana Alerting để liên kết trực tiếp với các kênh thông báo đã tạo ở trên, đồng thời mở rộng API để hỗ trợ gửi Email qua SMTP.
Lý do: Đảm bảo Ops Team nhận được thông báo đa kênh (Instant cho Slack/PagerDuty, Chi tiết cho Email).
Kết quả mong đợi: Khi Alert Rule trong Grafana kích hoạt, nó gọi vào API Gateway của chúng ta, và Gateway tự động phân phối thông tin ra Slack, Email, PagerDuty.
Thêm thư viện gửi email (smtplib) vào ứng dụng.
pip install smtplib --target /opt/aiops-alert-api/venv
Cập nhật app.py để thêm hàm gửi email.
cat >> app.py = warning)
EOF
Cấu hình Alert Rule trong Grafana để gọi vào API Gateway thay vì gửi trực tiếp.
Tạo file provisioning cho Alert Rule mới.
cat > /etc/grafana/provisioning/alerting/rules/aiops_rules.yml
Tạo Contact Point (Receiver) trong Grafana để gọi vào API Gateway của chúng ta.
cat > /etc/grafana/provisioning/alerting/contactpoints/aiops_webhook.yml
Khởi động lại Grafana để áp dụng cấu hình Alert Rule và Contact Point.
systemctl restart grafana-server
Verify kết quả:
1. Trong Grafana UI, vào "Alerting" -> "Rules", đảm bảo rule mới xuất hiện.
2. Vào "Contact points", đảm bảo "aiops-webhook-receiver" có trạng thái OK.
3. Trigger một cảnh báo giả (bằng cách insert dữ liệu fake vào bảng ai_predictions với severity=critical).
4. Kiểm tra log của container aiops-api xem có nhận được request và log "Email alert sent" hay không.
5. Kiểm tra hộp thư email của Ops Team.
docker logs aiops-api | grep -E "(Alert processed|Email alert sent|PagerDuty triggered)"
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng AIOps với Prometheus, Thanos và LLM để dự báo sự cố
« Phần 4: Xây dựng mô hình dự báo sự cố với LLM (RAG hoặc Fine-tuning)
Phần 6: Tối ưu hóa hiệu năng và xử lý sự cố cho hệ thống AIOps »