AI Agent soi Log Server: Từ ‘ác mộng’ On-call đến cảnh báo Telegram ‘chuẩn bài’

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

Nỗi ám ảnh mang tên “bơi trong Log” mỗi sáng

Nếu đang quản lý vài con VPS hay hệ thống microservices, chắc anh em chẳng lạ gì cảnh sáng vừa mở mắt đã thấy hàng nghìn dòng log đổ về từ access.log hay journalctl. Trước đây, mình thường dùng combo Grep, Awk kết hợp với Zabbix. Cách này vẫn ổn, cho đến khi file log cán mốc 5GB mỗi ngày và các lỗi bắt đầu trở nên “biến ảo” hơn.

Các rule giám sát truyền thống thường rất máy móc. Nếu set cảnh báo khi thấy chữ “Error”, điện thoại sẽ rung liên tục vì những lỗi vặt không đáng kể. Ngược lại, những đợt scanning âm thầm không gây mã lỗi 500 nhưng lại làm treo Database sau đó thì script thường bỏ sót.

Sau 6 tháng đưa AI Agent vào vận hành, mình đã thay đổi cuộc chơi. Thay vì tự đọc, mình để AI đóng vai trò một người trực ca L1 (Support). Nó tự hiểu ngữ cảnh và chỉ hú mình trên Telegram khi thực sự có biến. Dưới đây là cách mình triển khai.

Chọn cách tiếp cận: Tại sao lại là Hybrid Agent?

Có 3 hướng chính để giám sát Log, nhưng không phải cách nào cũng hiệu quả về chi phí.

1. Rule-based (Regex/Grep)

  • Thực tế: Cực nhanh, tốn 0 đồng tài nguyên.
  • Điểm yếu: Chỉ bắt được những gì đã biết trước. Gặp lỗi logic mới là “đắp chiếu”.

2. Full-AI (Gửi mọi thứ lên LLM)

  • Thực tế: Thông minh nhưng cực kỳ tốn kém.
  • Điểm yếu: Nếu hệ thống đẩy ra 1 triệu dòng log, hóa đơn API Gemini hay GPT-4 sẽ khiến anh em “khóc thét”.

3. Hybrid Agent (Giải pháp tối ưu)

  • Cơ chế: Script Python sẽ lọc thô (pre-filter) các keyword nhạy cảm. Chỉ những cụm log nghi vấn hoặc traceback dài mới được gửi lên LLM để phân tích sâu.
  • Kết quả: Giảm 90% lượng token cần gửi mà vẫn bắt đúng bệnh.
Số liệu thực tế: Sau khi áp dụng cơ chế gợi ý lệnh xử lý (ví dụ: “Gõ lệnh X để check port”), mình đã giảm được MTTR (thời gian xử lý sự cố trung bình) từ 45 phút xuống còn chưa đầy 10 phút.

Triển khai từng bước

Bước 1: Bắt Log theo thời gian thực

Thay vì dùng lệnh tail -f thủ công, mình dùng thư viện watchdog trong Python để theo dõi sự thay đổi của file log một cách chủ động.

import time
import os

def tail_log(path):
    with open(path, "r") as f:
        f.seek(0, os.SEEK_END) 
        while True:
            line = f.readline()
            if not line:
                time.sleep(0.1)
                continue
            yield line

# Theo dõi log lỗi của Nginx
for line in tail_log("/var/log/nginx/error.log"):
    if any(k in line.lower() for k in ["error", "critical", "failed"]):
        # Chuyển sang cho AI xử lý
        report = analyze_with_ai(line)
        send_telegram(report)

Bước 2: Phân tích ngữ cảnh bằng Gemini API

Để AI không đoán mò, mình thường gửi kèm 5 dòng log trước đó làm context. Gemini 1.5 Flash là lựa chọn cực tốt vì tốc độ nhanh và có gói miễn phí khá hời.

import google.generativeai as genai

genai.configure(api_key="API_KEY_CUA_BAN")
model = genai.GenerativeModel('gemini-1.5-flash')

def analyze_with_ai(log_block):
    prompt = f"""
    Bạn là chuyên gia SRE cấp cao. Hãy soi đoạn log này:
    {log_block}
    
    Trả lời ngắn gọn:
    1. Độ nghiêm trọng (1-10).
    2. Lỗi này là gì? (Giải thích bình dân).
    3. Lệnh Linux cần chạy ngay để kiểm tra là gì?
    """
    response = model.generate_content(prompt)
    return response.text

Bước 3: Đẩy cảnh báo về Telegram

Cái hay của Telegram Bot là hỗ trợ Markdown, giúp các câu lệnh Linux hiện lên rõ ràng để mình copy-paste ngay trên điện thoại.

import requests

def send_telegram(message):
    payload = {
        "chat_id": "ID_CUA_BAN",
        "text": f"🔴 **HỆ THỐNG CÓ BIẾN**\n\n{message}",
        "parse_mode": "Markdown"
    }
    requests.post("https://api.telegram.org/bot{TOKEN}/sendMessage", json=payload)

Kinh nghiệm “xương máu” khi chạy thực tế

Đừng bao giờ để AI tự động chạy lệnh fix hệ thống. Ảo giác (Hallucination) là có thật; có lần AI đã gợi ý mình chạy một lệnh rm sai syntax suýt bay màu folder data. Hãy luôn giữ vai trò người kiểm duyệt cuối cùng.

Để tránh bị spam tin nhắn khi hệ thống gặp lỗi vòng lặp (loop), mình dùng cơ chế Debouncing. Cụ thể, mình hash nội dung lỗi và lưu vào cache. Nếu lỗi tương tự lặp lại trong 10 phút, Agent sẽ im lặng để mình tập trung fix máy chủ.

Đánh giá sau 6 tháng vận hành

  • Điểm cộng: Ngủ ngon hơn vì biết AI sẽ phân loại lỗi hộ mình. Nó phân biệt cực tốt giữa một cú gõ sai mật khẩu (Warning) và một đợt chiếm dụng tài nguyên CPU (Critical).
  • Điểm trừ: Tốn thời gian tinh chỉnh Prompt ban đầu để AI không trả lời quá dài dòng.

Tóm lại, xây dựng AI Agent soi log không khó, quan trọng là cách bạn lọc dữ liệu đầu vào. Anh em nên bắt đầu với các file log nhỏ trước khi áp dụng cho toàn bộ cụm Server. Nếu cần mẫu Prompt tối ưu cho Docker hay K8s, cứ để lại comment mình sẽ share nhé!

Share: