Giám sát n8n bằng Uptime Kuma và log Docker trên VPS

Bạn đã tự host n8n trên VPS được vài tuần, workflow chạy ổn. Rồi một hôm, bot Telegram không gửi tin nhắn, webhook không kích hoạt, nhưng bạn không hề hay biết vì không có cảnh báo nào. Chạy docker ps lên thì container vẫn up, nhưng thực tế workflow đã chết từ lâu vì lỗi kết nối API. Bài viết này hướng dẫn bạn setup hai lớp giám sát cho n8n trên VPS: Uptime Kuma kiểm tra tính khả dụng từ bên ngoài (ping webhook, health endpoint) và log Docker giúp đọc lỗi nội bộ khi có sự cố, gửi cảnh báo qua Telegram ngay khi phát hiện bất thường.
- Uptime Kuma, self-host, kiểm tra HTTP, TCP, ping, cấu hình cảnh báo Telegram.
- Docker logs, xem log thô của container n8n để chẩn đoán workflow lỗi.
- Cảnh báo Telegram, gắn trực tiếp vào Uptime Kuma để nhận tin ngay khi downtime.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS, đã cài Docker và Docker Compose (tham khảo bài cách cài Docker trên VPS Ubuntu).
- n8n đang chạy bằng Docker Compose, có cổng 5678 hoặc reverse proxy Nginx cho subdomain của n8n (xem cấu hình Nginx reverse proxy và SSL cho n8n).
- Một bot Telegram và token để nhận cảnh báo. Tạo bot qua @BotFather, lấy token và chat ID.
- Quyền sudo cho user non-root.
Vì sao cần giám sát n8n riêng, không chỉ dựa vào docker ps
Nhiều người chỉ chạy docker ps để xem container có up không. Nhưng container up không có nghĩa workflow chạy. n8n có thể bị treo vì OOM (hết RAM), lỗi kết nối cơ sở dữ liệu PostgreSQL, hoặc worker trong queue mode bị ngắt kết nối Redis. Khi bạn thuê VPS n8n riêng, việc thiết lập giám sát ở hai lớp là tối quan trọng: lớp ứng dụng (Uptime Kuma kiểm tra endpoint) và lớp hệ thống (log Docker để đọc lỗi).
Bước 1, Cài đặt Uptime Kuma bằng Docker Compose
Uptime Kuma là công cụ giám sát mã nguồn mở, nhẹ, chạy trong container. Cài nó song song với n8n trên cùng VPS, hai container khác nhau.
Tạo thư mục cho Uptime Kuma:
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
Tạo file docker-compose.yml với nội dung sau:
version: '3'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
Chạy container:
docker compose up -d
Kiểm tra container đã chạy:
docker ps | grep uptime-kuma
Output mong đợi: container uptime-kuma ở trạng thái Up. Truy cập http://<IP_VPS>:3001 để tạo tài khoản admin và đăng nhập lần đầu. Lưu ý: mở port 3001 trên firewall UFW trước khi truy cập:
sudo ufw allow 3001/tcp
Bước 2, Cấu hình reverse proxy cho Uptime Kuma (khuyến nghị)
Để tránh lộ IP direct và dễ quản lý SSL, dùng Nginx reverse proxy cho Uptime Kuma với subdomain status.domain.com. Cấu hình tương tự như n8n. Tạo file /etc/nginx/sites-available/uptime-kuma:
server {
listen 80;
server_name status.domain.com;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Sau đó chạy Certbot để có SSL (nếu đã dùng trong bài Nginx cho n8n thì tương tự):
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d status.domain.com
Giờ bạn có thể truy cập Uptime Kuma qua HTTPS subdomain riêng.
Bước 3, Thêm monitor cho n8n trong Uptime Kuma
Đăng nhập Uptime Kuma, vào tab "Settings" → "Add New Monitor".
| Trường | Giá trị |
|---|---|
| Monitor Type | HTTP(s) |
| Friendly Name | n8n Webhook |
| URL | https://n8n.domain.com/healthz (hoặc http://localhost:5678/healthz nếu chưa có domain) |
| Interval | 60 giây (hoặc 30 nếu bạn muốn realtime hơn) |
| Retry | 3 lần (tránh cảnh báo false positive khi network tạm lag) |
Thêm một monitor thứ hai để kiểm tra webhook cụ thể (nếu workflow quan trọng). Ví dụ tạo URL giả nhưng webhook n8n trả về HTTP 200. Chọn HTTP(s), URL là https://n8n.domain.com/webhook/your-workflow-webhook-id. Nếu cần, thiết lập xác thực Basic Auth trong mục "Advanced".
Sau khi thêm, Uptime Kuma sẽ ping mỗi 60 giây. Nếu n8n down (container restart, lỗi 502, timeout), Kuma chuyển sang màu đỏ sau số lần retry mặc định.
Bước 4, Cấu hình cảnh báo Telegram cho Uptime Kuma
Vào "Settings" → "Notification" → "Add Notification". Chọn "Telegram", nhập Bot Token và Chat ID (số ID của nhóm chat hoặc user). Test thử: Kuma sẽ gửi tin nhắn "Test Notification".
Thiết lập trigger: vào từng monitor → "Edit" → "Notification" → chọn notification profile vừa tạo. Mỗi khi monitor chuyển từ Up sang Down, bạn nhận tin nhắn Telegram ngay. Đây là lớp cảnh báo nhanh nhất, không cần script tùy chỉnh, Kuma xử lý sẵn.
Bước 5, Giám sát log Docker của n8n để chẩn đoán lỗi
Khi Uptime Kuma báo đỏ, bạn cần biết nguyên nhân. Log container n8n là nơi đầu tiên tra cứu. Container n8n của bạn (đặt tên là n8n nếu dùng docker-compose) ghi log ra stdout/stderr.
Xem 50 dòng log gần nhất:
docker logs n8n --tail 50
Theo dõi log realtime:
docker logs n8n -f
Lọc lỗi cụ thể bằng grep (ví dụ lỗi kết nối PostgreSQL, lỗi workflow):
docker logs n8n 2>&1 | grep -i error
Một số lỗi thường gặp trong log n8n:
ECONNREFUSED, n8n không kết nối được PostgreSQL hoặc Redis (worker mode). Kiểm tra container database có chạy không, network có đúng không.JWT expired / token invalid, credential bị hết hạn (token API, key), cần refresh lại trong n8n UI.ENOMEM / OOM, VPS hết RAM. Container n8n bị kill. Kiểm tradocker inspect n8nxem có bị restart không. Tăng giới hạn RAM trong docker compose:mem_limit: 1g.Workflow crashed, lỗi node cụ thể. Copy error stack trace để debug.
Bước 6, Tích hợp log Docker với cảnh báo tự động (nâng cao)
Bạn có thể dùng script bash + systemd timer để quét log mỗi 5 phút và gửi cảnh báo nếu phát hiện lỗi nặng. Tạo script /usr/local/bin/check-n8n-log.sh:
#!/bin/bash
LOG_LINES=$(docker logs n8n --tail 30 2>&1 | grep -E 'ERROR|CRITICAL|FATAL|ECONNREFUSED' | head -5)
if [ -n "$LOG_LINES" ]; then
curl -s -X POST https://api.telegram.org/bot/sendMessage \
-d chat_id= \
-d text="n8n ERROR detected: $LOG_LINES"
fi
Cấp quyền chạy:
chmod +x /usr/local/bin/check-n8n-log.sh
Dùng systemd timer chạy script mỗi 5 phút (xem hướng dẫn lập lịch tác vụ nâng cao với cron và systemd timer). Cách này cho phép bạn phát hiện lỗi ngay cả khi Uptime Kuma chưa kịp cảnh báo (vì n8n vẫn up nhưng workflow lỗi).
Xử lý lỗi thường gặp
Lỗi 1, Uptime Kuma báo down nhưng container vẫn up
Nguyên nhân: n8n bị treo một phần (partial hang), không phản hồi HTTP nhưng process vẫn sống. Kiểm tra docker logs n8n --tail 10, thấy "health endpoint timeout". Cách khắc phục: restart container docker restart n8n. Nếu lặp lại, tăng timeout trong monitor Kuma lên 15 giây hoặc giảm RAM usage của n8n (bài chọn RAM cho n8n theo số workflow chạy song song).
Lỗi 2, Log n8n đầy, chiếm dung lượng đĩa
Nguyên nhân: Docker log tích lũy không giới hạn. Kiểm tra: ls -lah /var/lib/docker/containers/$(docker ps -q --filter name=n8n)/*-json.log. Sửa docker compose thêm dòng trong service n8n:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Sau đó redeploy container: docker compose down && docker compose up -d. Log phiến sẽ tự động rotate, không lo đầy ổ NVMe của thuê VPS Linux.
Lỗi 3, Uptime Kuma không gửi được cảnh báo Telegram
Nguyên nhân: VPS của bạn ở Việt Nam không cho phép kết nối đến api.telegram.org do chính sách mạng. Cách xử lý: dùng webhook HTTP thay cho Telegram (ví dụ gửi qua email, Slack, hoặc dùng VPS SMTP của thueVPS gửi email cảnh báo). Trong Kuma, chọn "Email" và nhập thông tin SMTP của mail server bạn có quyền dùng.
Câu hỏi thường gặp
Có thể dùng Uptime Kuma giám sát nhiều container n8n trên cùng VPS không?
Có. Mỗi container n8n (main, worker) bạn thêm một monitor riêng trong Uptime Kuma. Nếu dùng nhiều worker, bạn có thể expose port health check của mỗi container qua cổng khác nhau và tạo monitor tương ứng.
Cần cấu hình gì ở n8n để health check hoạt động?
n8n mặc định có endpoint /healthz trả về HTTP 200 nếu ứng dụng sống. Không cần cấu hình thêm. Có thể dùng webhook cụ thể để kiểm tra logic workflow, nhưng khi đó phải đảm bảo webhook luôn trả về response (dùng node "Respond to Webhook").
Tôi có thể dùng công cụ khác thay Uptime Kuma không?
Có. Prometheus + Grafana (cài cùng VPS) cho dashboard chi tiết hơn, nhưng tốn tài nguyên. Uptime Kuma là nhẹ nhất, phù hợp VPS RAM thấp (VPS n8n cỡ 2-4 GB RAM có thể chạy cả hai). Công cụ khác: Healthchecks.io (SaaS) hoặc Better Uptime, nhưng không self-host được.
Làm sao biết log nào là lỗi cần xử lý ngay?
Trong log n8n, các dòng có [ERROR] hoặc [FATAL] là quan trọng. [WARNING] là không nguy hiểm ngay. Tập trung vào: ECONNREFUSED, ETIMEOUT, OUT_OF_MEMORY, workflow execution failed. Dùng grep lọc docker logs n8n 2>&1 | grep -E 'ERROR|FATAL|ECONNREFUSED'.
Uptime Kuma có hỗ trợ giám sát certificate SSL không?
Có. Khi thêm monitor dạng HTTP(s), trong phần "Advanced" có tùy chọn "Enable SSL certificate validation". Nếu SSL hết hạn, Kuma sẽ báo down. Bạn cũng có thể thêm monitor riêng loại "SSL Certificate" để kiểm tra riêng, với cảnh báo trước 30 ngày hết hạn.
Bài viết liên quan
- Dùng status page tự host với Uptime Kuma trên VPS
- Cài đặt n8n trên VPS Ubuntu 24.04 bằng Docker Compose
- Giám sát job automation log cảnh báo Telegram và số liệu
- Giám sát VPS với Prometheus và Grafana tự host


