Dùng AI làm trợ thủ: Cách tôi tự động hoá rà soát log và báo cáo hệ thống
Thay vì đọc hàng nghìn dòng log máy chủ thủ công mỗi sáng, tôi viết script tích hợp mô hình ngôn ngữ để lọc mã lỗi bất thường.

Mỗi buổi sáng khi bắt đầu ca làm việc, một trong những nhiệm vụ buồn ngủ nhất của kỹ sư hệ thống là mở hàng chục file log: IIS Web Server, Windows Event Logs, Syslog của tường lửa, và log của ứng dụng HIS/LIS nội bộ.
Hàng trăm megabyte văn bản, 99.5% là log thông tin bình thường (INFO), nhưng chỉ 0.5% log cảnh báo (WARN) hoặc lỗi nghiêm trọng (FATAL) nếu bỏ sót thì sẽ là thảm họa vào cuối ngày.
Vấn đề với regex và lọc từ khóa truyền thống
Trước đây tôi viết các đoạn bash script hoặc PowerShell đơn giản dùng grep hay Select-String "ERROR".
Cách này có 2 nhược điểm rất lớn:
- Quá nhiều báo động giả (False Positives): Ví dụ
"Socket connection closed: error code 0 (success)"- chứa chữ error nhưng lại là bình thường. - Bỏ sót ngữ cảnh: Một lỗi xuất hiện 1 lần không đáng sợ, nhưng một cảnh báo nhẹ lặp lại 500 lần trong 5 phút lại là dấu hiệu sắp sập dịch vụ.
Giải pháp: Script Python kết hợp AI phân tích mẫu
Tôi xây dựng một script chạy nền vào 6h30 mỗi sáng. Thay vì gửi toàn bộ log lên mô hình AI (vừa tốn chi phí, vừa vi phạm bảo mật dữ liệu), tôi áp dụng quy trình 3 bước:
[Log thô] ──> [Bộ lọc khử dữ liệu cá nhân & băm IP] ──> [Gom nhóm Exception] ──> [AI tóm tắt bất thường] ──> [Telegram Bot]
Bước 1: Khử định danh (Anonymization)
Tuyệt đối không bao giờ gửi IP nội bộ, tên máy chủ thật hay dữ liệu nhạy cảm lên API bên ngoài. Dùng regex để thay thế toàn bộ địa chỉ IP thành dạng giả lập và băm tên bảng:
import re
def sanitize_log(raw_text: str) -> str:
# Che địa chỉ IP nội bộ
sanitized = re.sub(r'\b192\.168\.\d{1,3}\.\d{1,3}\b', '[LOCAL_IP]', raw_text)
sanitized = re.sub(r'\b10\.\d{1,3}\.\d{1,3}\.\d{1,3}\b', '[SERVER_IP]', sanitized)
# Lược bỏ các chuỗi token hoặc mật mã
sanitized = re.sub(r'token=[\w\d]+', 'token=[REDACTED]', sanitized)
return sanitized
Bước 2: Gom nhóm mẫu lỗi (Clustering)
Script gom các vết stack trace giống nhau lại thành nhóm và đếm tần suất xuất hiện. Ví dụ: SqlException: Connection Timeout (432 occurrences).
Bước 3: Đưa vào Prompt để AI phát hiện bất thường
prompt = f"""
Bạn là chuyên gia DevOps/Sysadmin. Dưới đây là danh sách tóm tắt các cụm lỗi trong ca trực đêm qua:
{condensed_error_summary}
Hãy trả về định dạng ngắn gọn:
1. Top 2 lỗi cần ưu tiên kiểm tra ngay trước 8h sáng.
2. Nhận định rủi ro: Có dấu hiệu tấn công rà quét port hoặc tràn bộ nhớ không?
"""
Kết quả mỗi sáng
Đúng 7h00 sáng, khi tôi đang uống ly cà phê đầu ngày, ứng dụng nhắn tin nhận được bản tóm tắt siêu súc tích:
🔔 Báo cáo rà soát hệ thống ngày 03/11:
- Hệ thống ổn định 99.8%.
- Cảnh báo cần xem: Dịch vụ đồng bộ máy đọc mã vạch tầng 3 có 58 lần ngắt kết nối do mạng Wi-Fi chập chờn lúc 3h15.
- Hạ tầng: Dung lượng ổ đĩa
E:\Backupcòn lại 12%, khuyến nghị dọn dẹp file dump cũ.
Thay vì mất 45 phút mò mẫm trong hàng trăm trang log, giờ đây tôi chỉ mất 30 giây để nắm trọn vẹn sức khỏe toàn bộ hệ thống!