3 giờ sáng thứ Ba, điện thoại tôi rung liên tục với 47 cảnh báo Prometheus liên tiếp. Toàn bộ pipeline xử lý đơn hàng đang sụp đổ vì một dòng log lặp đi lặp lại: HTTPError 429 Too Many Requests - Retry-After: 12.5s. Đó là đêm tôi nhận ra rằng hệ thống Hermes-agent - vốn chạy ổn định suốt 6 tháng để điều phối traffic tới GPT-5.5 - đã âm thầm vượt ngưỡng rate limit mà không hề hay biết. p99 latency nhảy từ 480ms lên 4.200ms trong vòng 90 phút, đủ để phá vỡ mọi SLA cam kết với khách hàng.
Bài viết này chia sẻ lại toàn bộ quy trình giám sát, log và phân tích mà tôi đã xây dựng sau đêm hôm đó - kèm benchmark chi phí thực tế giữa các model qua HolySheep.
1. Tại sao lỗi 429 lại "im lặng" đến vậy?
Khác với lỗi 401 (xác thực) hay 500 (máy chủ), mã 429 thường không làm sập request ngay lập tức. Upstream provider trả về header Retry-After và X-RateLimit-Remaining kèm body JSON. Nếu bạn không log đầy đủ các header này, lỗi sẽ bị "nuốt" bởi retry logic mặc định của thư viện HTTP, và hệ thống chỉ biểu hiện ra ngoài bằng độ trễ tăng dần - rất khó phát hiện nếu chỉ nhìn dashboard latency.
2. Kiến trúc Hermes-agent và 4 điểm cần giám sát
Hermes-agent là một lightweight orchestration layer tôi xây dựng để điều phối hàng nghìn request/giờ tới các model provider khác nhau. Bốn điểm giám sát quan trọng nhất:
- Token bucket state: Số token còn lại trong rolling window
- In-flight requests: Số request đang chờ response (cảnh báo sớm)
- Provider-specific quotas: Phân biệt giới hạn RPM và TPM riêng biệt
- Cold-start penalty: Request đầu tiên sau khoảng idle thường bị throttle
3. Code thiết lập monitoring cơ bản
Đoạn code dưới đây là phiên bản rút gọn của hermes_monitor.py tôi đang chạy production. Nó hook vào từng request OpenAI-compatible và log toàn bộ header rate limit ra file JSON Lines để truy vết sau này:
import httpx
import time
import json
import logging
from datetime import datetime
Ghi log có cấu trúc - JSON Lines để dễ query bằng DuckDB/jq
logging.basicConfig(
filename='hermes_traffic.jsonl',
level=logging.INFO,
format='%(message)s'
)
class HermesMonitor:
def __init__(self, api_key: str, base_url: str = "https://api.holysheep.ai/v1"):
self.api_key = api_key
self.base_url = base_url
self.client = httpx.Client(
base_url=base_url,
headers={"Authorization": f"Bearer {api_key}"},
timeout=httpx.Timeout(30.0, connect=5.0)
)
def chat(self, model: str, messages: list, **kwargs):
request_id = f"req_{int(time.time() * 1000)}"
start = time.perf_counter()
try:
response = self.client.post(
"/chat/completions",
json={"model": model, "messages": messages, **kwargs}
)
elapsed_ms = round((time.perf_counter() - start) * 1000, 2)
# Log toàn bộ header rate limit - phần quan trọng nhất của bài viết này
rate_limit_info = {
k: v for k, v in response.headers.items()
if k.lower().startswith("x-ratelimit") or k.lower() == "retry-after"
}
log_entry = {
"ts": datetime.utcnow().isoformat(),
"request_id": request_id,
"model": model,
"status": response.status_code,
"latency_ms": elapsed_ms,
"rate_limit": rate_limit_info,
"tokens_prompt": len(str(messages)),
}
logging.info(json.dumps(log_entry, ensure_ascii=False))
if response.status_code == 429: