Cấu hình Prometheus để phát hiện vi phạm chính sách AI
Bước đầu tiên là định nghĩa các ngưỡng cảnh báo trong Prometheus dựa trên các chỉ số AI đã thu thập ở Phần 3. Chúng ta cần tạo các rule để phát hiện khi model AI có độ chính xác (accuracy) giảm đột ngột hoặc thời gian phản hồi (latency) vượt quá ngưỡng cho phép.
Việc này giúp Prometheus tự động tính toán trạng thái "vi phạm" và sẵn sàng gửi tín hiệu cảnh báo thay vì chỉ hiển thị trên dashboard.
Tạo file cấu hình alert rules tại /etc/prometheus/prometheus.yml hoặc trong thư mục rules riêng. Dưới đây là nội dung file rules cho AI Governance:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: ai-governance-rules
namespace: monitoring
spec:
groups:
- name: ai-governance
rules:
- alert: AIAccuracyDrop
expr: rate(ai_model_accuracy_total{model="recommendation_engine"}[5m]) < 0.95
for: 2m
labels:
severity: critical
policy_type: "model_quality"
annotations:
summary: "Độ chính xác model AI giảm dưới 95%"
description: "Model {{ $labels.model }} có accuracy {{ $value }} trong 2 phút qua."
- alert: AILatencyHigh
expr: histogram_quantile(0.95, rate(ai_inference_latency_bucket{model="recommendation_engine"}[5m])) > 200
for: 1m
labels:
severity: warning
policy_type: "performance"
annotations:
summary: "Độ trễ inference vượt quá 200ms"
description: "P95 latency của model {{ $labels.model }} là {{ $value }}ms."
Kết quả mong đợi: Prometheus sẽ bắt đầu đánh giá các biểu thức này mỗi 30 giây. Khi điều kiện đúng trong khoảng thời gian "for", trạng thái alert sẽ chuyển sang "Firing".
Để verify kết quả, truy cập vào Prometheus UI tại http://:9090, chọn tab "Status" -> "Rules". Bạn sẽ thấy các rule trên có trạng thái "Firing" nếu metric hiện tại vi phạm.
Sử dụng OPA để đánh giá metric từ Prometheus
Triển khai OPA Policy cho Alert
Bây giờ chúng ta cần một bộ lọc trung gian để quyết định xem một alert từ Prometheus có thực sự cần hành động mạnh mẽ (như rollback) hay chỉ cần ghi log. OPA sẽ đóng vai trò Policy Engine ở đây.
Chúng ta sẽ viết một chính sách OPA (Rego) để đọc input từ Prometheus Alertmanager và chỉ cho phép hành động tự động nếu vi phạm thuộc nhóm "critical" và liên quan đến "model_quality".
Tạo file policy mới tại /etc/opa/policies/ai_alert_policy.rego:
package ai_governance
# Cho phép hành động tự động nếu độ nghiêm trọng là critical và loại chính sách là model_quality
allow {
input.alerts[_].labels.severity == "critical"
input.alerts[_].labels.policy_type == "model_quality"
input.action == "auto_rollback"
}
# Chỉ ghi log nếu là warning hoặc các loại khác
log_only {
input.alerts[_].labels.severity == "warning"
}
# Deny nếu không có rule nào khớp (bảo mật mặc định)
deny {
true
}
# Metadata để ghi log chi tiết
violation_info {
input.alerts[_].annotations.summary
input.alerts[_].labels.model
}
Kết quả mong đợi: File policy này sẽ được OPA tải vào. Khi nhận request từ Alertmanager, OPA sẽ trả về kết quả `allow: true` hoặc `deny: true` dựa trên logic trên.
Cấu hình OPA Server để lắng nghe request
Khởi tạo OPA Server để chạy ở chế độ "server" và lắng nghe endpoint `/v1/data/ai_governance/allow` để Alertmanager gọi tới.
docker run -d --name opa-server \
-p 8080:8080 \
-v $(pwd)/policies:/policies \
openpolicyagent/opa:latest \
run --server --addr 0.0.0.0:8080 \
--log-level debug \
--watch /policies
Kết quả mong đợi: OPA Server chạy trên cổng 8080. Bạn có thể test bằng cách gọi curl vào endpoint `/v1/data/ai_governance/allow` với payload JSON giả lập alert để xem kết quả `result.allow`.
Triển khai Webhook để kích hoạt hành động tự động
Xây dựng Webhook Receiver
Chúng ta cần một ứng dụng nhỏ (webhook receiver) đóng vai trò cầu nối: nhận alert từ Alertmanager, gửi request kiểm tra đến OPA, và nếu OPA cho phép, thực thi lệnh rollback model.
Viết script Python đơn giản để thực hiện luồng này. Lưu file tại /opt/ai-governance/webhook_receiver.py:
import requests
import json
import subprocess
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
OPA_URL = "http://opa-server:8080/v1/data/ai_governance/allow"
@app.route('/ai-governance-webhook', methods=['POST'])
def handle_alert():
try:
data = request.json
# Chuẩn bị payload cho OPA
opa_payload = {
"action": "auto_rollback",
"alerts": data.get("alerts", [])
}
# Gọi OPA để đánh giá
response = requests.post(OPA_URL, json=opa_payload)
result = response.json()
# Kiểm tra kết quả từ OPA
if result.get("result", {}).get("allow"):
# OPA cho phép -> Thực thi hành động Rollback
model_name = data.get("alerts")[0].get("labels", {}).get("model")
print(f"Executing rollback for model: {model_name}")
# Giả lập lệnh rollback (trong thực tế có thể gọi API Kubernetes hoặc ML Platform)
cmd = f"kubectl rollout undo deployment/{model_name}-service --namespace=ai-production"
subprocess.run(cmd, shell=True, check=True)
# Ghi log thành công
log_event("SUCCESS", f"Rolled back model {model_name} due to governance violation")
return jsonify({"status": "action_taken", "message": "Model rolled back successfully"}), 200
else:
# OPA không cho phép hành động mạnh -> Chỉ ghi log
print(f"Policy denied auto-rollback for model: {model_name}")
log_event("INFO", f"Alert received but auto-rollback denied by policy.")
return jsonify({"status": "action_denied", "message": "Policy does not allow auto-rollback"}), 200
except Exception as e:
log_event("ERROR", str(e))
return jsonify({"status": "error", "message": str(e)}), 500
def log_event(level, message):
with open("/var/log/ai-governance.log", "a") as f:
f.write(f"[{level}] {message}\n")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Kết quả mong đợi: Script này sẽ lắng nghe trên cổng 5000. Khi nhận được POST request từ Alertmanager, nó sẽ hỏi OPA và thực thi lệnh `kubectl rollout undo` nếu được phê duyệt.
Cấu hình Alertmanager để gửi webhook
Cập nhật file cấu hình Alertmanager (/etc/alertmanager/alertmanager.yml) để định tuyến các alert AI về webhook receiver vừa tạo.
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'model']
group_wait: 10s
group_interval: 5m
repeat_interval: 1h
receiver: 'ai-governance-webhook'
routes:
- match:
severity: critical
policy_type: model_quality
receiver: 'ai-governance-webhook'
continue: true
receivers:
- name: 'ai-governance-webhook'
webhook_configs:
- url: 'http://webhook-receiver:5000/ai-governance-webhook'
send_resolved: true
Kết quả mong đợi: Alertmanager sẽ gửi JSON payload của alert tới địa chỉ webhook. Webhook receiver nhận được, hỏi OPA, và thực hiện hành động.
Để verify: Tạo một test alert bằng cách giả lập metric sai trong Prometheus, sau đó check log tại /var/log/ai-governance.log và xem trạng thái deployment của model có bị rollback không.
Xây dựng luồng phản hồi: Từ phát hiện đến ghi log
Để đảm bảo tính minh bạch (auditability), mọi quyết định của OPA và hành động của hệ thống phải được ghi lại đầy đủ. Luồng này bao gồm: Prometheus -> Alertmanager -> Webhook -> OPA -> Action -> Log.
Thêm đoạn code ghi log chi tiết vào webhook receiver để ghi lại input từ OPA và output của hành động.
import logging
from datetime import datetime
# Cấu hình logging chuẩn
logging.basicConfig(
filename='/var/log/ai-governance.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def log_event(level, message):
if level == "SUCCESS":
logging.info(message)
elif level == "ERROR":
logging.error(message)
else:
logging.info(message)
Kết quả mong đợi: File log sẽ chứa dòng thời gian rõ ràng: thời điểm nhận alert, quyết định của OPA (allow/deny), và kết quả thực thi lệnh. Điều này rất quan trọng cho việc audit sau này.
Verify bằng cách xem file log: tail -f /var/log/ai-governance.log. Bạn sẽ thấy các dòng log tương ứng với sự kiện test vừa thực hiện.
Tối ưu hóa hiệu năng khi xử lý lượng lớn sự kiện AI
Điều chỉnh tham số nhóm (Grouping) trong Alertmanager
Khi có hàng ngàn model AI chạy song song, số lượng alert có thể bùng nổ. Cần điều chỉnh `group_wait`, `group_interval` để gom các alert cùng loại thành một gói (batch) trước khi gửi đến OPA, tránh làm quá tải OPA Server.
Chỉnh sửa phần `route` trong file /etc/alertmanager/alertmanager.yml:
route:
group_by: ['alertname', 'model', 'severity']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'ai-governance-webhook'
Kết quả mong đợi: Alertmanager sẽ chờ 30 giây để gom tất cả các alert mới phát sinh cùng nhóm trước khi gửi một lần duy nhất đến webhook. Điều này giảm số lượng request gửi đến OPA đáng kể.
Tối ưu OPA Policy Cache
OPA có thể bị chậm nếu phải đánh giá lại chính sách cho cùng một input nhiều lần. Kích hoạt caching trong OPA Server để lưu kết quả đánh giá cho các input tương tự trong khoảng thời gian ngắn.
Cập nhật lệnh khởi động OPA (hoặc file config nếu dùng Kubernetes):
docker run -d --name opa-server \
-p 8080:8080 \
-v $(pwd)/policies:/policies \
openpolicyagent/opa:latest \
run --server --addr 0.0.0.0:8080 \
--log-level debug \
--watch /policies \
--enable-decision-log \
--decision-log-path /var/log/opa/decision.log \
--metrics-path /metrics
Kết quả mong đợi: OPA sẽ ghi lại quyết định vào log và có thể phục vụ các request lặp lại nhanh hơn. Bạn có thể xem hiệu năng qua endpoint `/metrics` của OPA.
Sử dụng Kubernetes HPA cho Webhook Receiver
Webhook receiver là điểm nghẽn nếu xử lý chậm. Cần triển khai nó dưới dạng Deployment và kích hoạt Horizontal Pod Autoscaler (HPA) để tự động tăng số lượng pod khi CPU usage cao.
Tạo file HPA tại /opt/ai-governance/hpa.yaml:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: ai-governance-webhook-hpa
namespace: monitoring
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ai-governance-webhook
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Áp dụng cấu hình: kubectl apply -f /opt/ai-governance/hpa.yaml
Kết quả mong đợi: Khi có lượng alert lớn ồ ạt, Kubernetes sẽ tự động scale lên số pod webhook receiver để đảm bảo thời gian phản hồi (latency) luôn nằm trong giới hạn cho phép, tránh bị mất sự kiện.
Verify hiệu năng bằng cách tạo load test giả lập 1000 alert cùng lúc và quan sát số lượng pod webhook tăng lên và thời gian xử lý trung bình.
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng AI Governance tự động với OPA, Prometheus và Policy Engine
« Phần 3: Cấu hình Prometheus để thu thập và giám sát chỉ số AI