api/. Mọi ví dụ đều trực tiếp từ pkg/logger/logger.go và mã nguồn thực tế.go.uber.org/zap — thư viện structured logging hiệu suất cao nhất trong hệ sinh thái Go. Điểm đặc biệt là hệ thống logger có kênh (channel-based logging), cho phép mỗi module ghi log vào file riêng của mình../logs/system/{date}/log.log và stdout.GetLogger(channel) ghi vào ./logs/{channel}/{date}/log.log và stdout.sync.RWMutex với Double-Check Locking pattern để thread-safe.Asia/Ho_Chi_Minh:logs/
├── system/ ← Log mặc định toàn hệ thống
│ └── 2026-03-26/log.log
├── background_services/ ← HealthCheck và TaskMonitor
│ └── 2026-03-26/log.log
├── proxy/ ← Xoay vòng và kiểm tra proxy
│ └── 2026-03-26/log.log
├── proxy_rotation/ ← Chi tiết xoay vòng proxy
│ └── 2026-03-26/log.log
├── task/ ← Giao task và theo dõi trạng thái
│ └── 2026-03-26/log.log
├── task_monitor/ ← Giám sát stuck tasks
│ └── 2026-03-26/log.log
├── cron/ ← Cron job execution log
│ └── 2026-03-26/log.log
├── webhook/ ← Nhận và xử lý webhook từ worker
│ └── 2026-03-26/log.log
├── keyword/ ← Tìm kiếm từ khóa
│ └── 2026-03-26/log.log
├── keyword_pool_task/ ← Pool tác vụ từ khóa
│ └── 2026-03-26/log.log
├── keyword_result/ ← Kết quả từ khóa
│ └── 2026-03-26/log.log
├── project/ ← Project và task
│ └── 2026-03-26/log.log
├── project_detail/ ← Chi tiết project
│ └── 2026-03-26/log.log
├── report/ ← Báo cáo
│ └── 2026-03-26/log.log
├── report-sync-scheduler/ ← Đồng bộ báo cáo
│ └── 2026-03-26/log.log
├── report-task-sync/ ← Đồng bộ tác vụ báo cáo
│ └── 2026-03-26/log.log
├── report-webhook-callback/ ← Webhook callback báo cáo
│ └── 2026-03-26/log.log
├── report-webhook-service/ ← Service webhook báo cáo
│ └── 2026-03-26/log.log
├── server_hourly_report/ ← Báo cáo theo giờ server
│ └── 2026-03-26/log.log
├── user/ ← Đăng nhập và xác thực
│ └── 2026-03-26/log.log
├── mattermost/ ← Thông báo Mattermost
│ └── 2026-03-26/log.log
├── telegram/ ← Thông báo Telegram
│ └── 2026-03-26/log.log
├── database/ ← Kết nối database
│ └── 2026-03-26/log.log
├── health_check_cron/ ← Health check server
│ └── 2026-03-26/log.log
└── daily_metrics_cron/ ← Metrics hàng ngày
└── 2026-03-26/log.log{
"level": "error",
"time": "26/03/2026 09:30:45",
"caller": "service/task_service.go:187",
"func": "tool-traffic-api/internal/task/service.(*Service).SendTask",
"msg": "[LOG_LEVEL_ERROR] Failed to assign task to server",
"LOG_ERROR_MESSAGE": "connection refused",
"LOG_DATA:serverId": 5,
"LOG_DATA:taskCount": 30
}time — Thời điểm ghi log theo múi giờ VN (dd/MM/yyyy HH:mm:ss).caller — File và dòng code gây ra log entry.func — Full function signature.msg — Thông điệp với level marker prefix.LOG_ERROR_MESSAGE — Nội dung error.Error() nếu có.LOG_ERROR_CODE — Mã lỗi nếu implement interface Code() string.LOG_DATA:{key} — Data context đính kèm.ErrorWithFields và ErrorChannelWithFields dành cho lỗi phức tạp cần gắn nhiều thông tin context:/ — Trạng Thái Hệ Thống{
"name": "Traffic tool API",
"version": "2.5.0",
"environment": "production",
"browserSessionRunning": 45,
"task": {
"maxProcess": 100,
"totalProcessRunning": 67
},
"proxy": {
"maxProcess": 50,
"totalProcessRunning": 23
}
}/api/monitor — Ping Từ WorkerPOST /api/monitor để báo cáo trạng thái còn sống. Handler monitorHandler.Monitor ghi nhận timestamp ping cuối và cập nhật status = online cho server tương ứng.bootstrap/cron/health_check_cron.go ping chủ động đến từng worker server theo lịch. Nếu ping thất bại:logger.ErrorChannel("background_services", "Server health check failed") được gọi.status = offline trong MySQL.ENABLE_PUSH_MESSAGE_ERROR_TO_TELEGRAM = true.taskSrv.TaskMonitor chạy trong goroutine riêng, liên tục scan database để tìm các tác vụ bị kẹt:running nhưng server worker đã offline./webhook/proxy/get-proxy:ENABLE_PUSH_MESSAGE_ERROR_TO_TELEGRAM = true, các lỗi nghiêm trọng được đẩy ngay lên Telegram:| Sự Kiện | Kênh Telegram | Nội Dung |
|---|---|---|
| Server worker offline | TELEGRAM_CHAT_ERROR_ID | Tên server, IP, thời gian mất kết nối |
| Proxy pool kiệt | TELEGRAM_CHAT_ERROR_ID | Số IP còn lại, nhà cung cấp |
| Báo cáo định kỳ | TELEGRAM_CHAT_REPORT_ID | Tổng tác vụ, tỷ lệ thành công, top server |
| Lỗi hệ thống nghiêm trọng | TELEGRAM_CHAT_ERROR_ID | Stack trace, module, timestamp |
MATTERMOST_SCHEDULE) gửi báo cáo tổng hợp:mattermost:server_hourly_report ghi báo cáo hiệu suất theo giờ vào MongoDB. Mỗi bản ghi chứa các chỉ số:| Chỉ Số | Ý Nghĩa | Ngưỡng Cần Chú Ý |
|---|---|---|
success / process | Tỷ lệ thành công | Dưới 70% liên tục là dấu hiệu proxy pool bị chặn |
fail / process | Tỷ lệ thất bại | Tăng đột biến thường do Chrome crash hoặc CAPTCHA |
captcha / process | Tỷ lệ gặp captcha | Tăng cao cho thấy IP đang bị Google/CocCoc nghi ngờ |
waiting | Số task đang chờ | Tăng liên tục cho thấy server quá tải hoặc bị treo |
notfound | Số task không tìm thấy | Cao bất thường có thể do từ khóa không còn quảng cáo |
error | Số task lỗi kỹ thuật | Tăng đột biến thường do lỗi mạng hoặc proxy không phản hồi |
server_hourly_report:logger.ErrorChannel cho lỗi thực sự cần chú ý: lỗi database, lỗi network, lỗi business logic.logger.WarnChannel cho tình huống bất thường nhưng chưa gây hỏng: proxy chậm, task chờ lâu.logger.InfoChannel cho các sự kiện bình thường: task được giao, proxy được xoay, cron hoàn thành.logger.DebugChannel cho thông tin chi tiết chỉ cần trong development.fmt.Println hay log.Println trong production code — luôn dùng logger."Proxy rotation failed for task" tốt hơn "Error".