Server của bạn đang chạy ổn không? Database có phản hồi không? API endpoint có timeout không? Những câu hỏi này sẽ không có câu trả lời nếu bạn không có hệ thống giám sát — và thường thì bạn chỉ biết có vấn đề khi khách hàng phàn nàn trước.
Mình đã trải qua tình huống đó: một con VPS chạy ứng dụng bị down lúc 2 giờ sáng, đến sáng khách hàng gọi điện mới hay. Từ hôm đó mình quyết định cài monitoring trên tất cả server — và sau khi thử nhiều công cụ, Uptime Kuma là thứ mình giữ lại trên hơn 20 con VPS.
So sánh các lựa chọn giám sát server
Trước khi đi vào cài đặt, hãy nhìn qua các option phổ biến để hiểu rõ tại sao Uptime Kuma lại phù hợp cho phần lớn trường hợp cá nhân và doanh nghiệp nhỏ.
Zabbix / Nagios — Enterprise-grade nhưng nặng
Zabbix và Nagios là những công cụ monitoring kinh điển, cực kỳ mạnh: giám sát CPU, RAM, disk, network, alert đa kênh, báo cáo lịch sử chi tiết. Nhưng để cài đặt được Zabbix hoàn chỉnh, bạn cần ít nhất 30–60 phút config, hiểu về SNMP, Zabbix agent, template… Với developer hay sysadmin quản lý vài server cá nhân, đây là overkill rõ ràng.
- Ưu điểm: Giám sát sâu, nhiều metric, enterprise-ready.
- Nhược điểm: Cài đặt phức tạp, tốn RAM (Zabbix server cần ~512MB riêng), learning curve cao.
Prometheus + Grafana — Đẹp nhưng đòi hỏi kỹ năng
Stack Prometheus + Grafana là lựa chọn của dân DevOps chuyên nghiệp. Dashboard đẹp, alert linh hoạt, tích hợp Kubernetes tốt. Nhưng để cấu hình một alert rule trong Alertmanager, bạn cần viết YAML, hiểu PromQL, và debug tại sao metric không pull về được.
- Ưu điểm: Flexible, scalable, visualization đỉnh.
- Nhược điểm: Cần kiến thức DevOps chuyên sâu, không có sẵn status page public dễ dùng.
UptimeRobot / Better Uptime — SaaS tiện nhưng mất kiểm soát
Các dịch vụ SaaS như UptimeRobot (free), Better Uptime, Freshping rất tiện lợi — không cần cài đặt gì. Nhưng bạn phụ thuộc vào bên thứ ba, dữ liệu nằm trên server của họ, và free plan thường giới hạn số monitor hoặc tần suất check.
Uptime Kuma — Self-hosted, đơn giản, đủ dùng
Uptime Kuma là công cụ monitoring tự host, giao diện đẹp như UptimeRobot nhưng chạy hoàn toàn trên server của bạn. Cài bằng Docker trong 2 phút, hỗ trợ 20+ loại monitor (HTTP, TCP, DNS, Docker container…), alert qua Telegram/Slack/Discord/Email, và có Status Page public để share với khách hàng. Toàn bộ dữ liệu nằm trong một file SQLite — backup đơn giản, migrate dễ dàng.
Phân tích: Khi nào nên dùng Uptime Kuma?
Uptime Kuma không phải công cụ giám sát toàn diện nhất — nó không đo CPU load, không vẽ graph memory usage theo thời gian. Nhưng nếu mục tiêu của bạn là biết ngay khi service chết và có trang status để share với người dùng, thì Uptime Kuma làm rất tốt mà không cần đầu tư thêm hạ tầng.
Chọn Uptime Kuma khi: bạn cần cài nhanh, không muốn maintain nhiều, server nhỏ (1–2 vCPU), hoặc cần status page public cho khách hàng. Chọn Prometheus+Grafana khi: bạn cần metric chi tiết, có đội DevOps, hạ tầng lớn nhiều node.
Hướng dẫn cài đặt Uptime Kuma trên Ubuntu
Cách 1: Docker (Khuyên dùng)
Nếu server đã có Docker, đây là cách nhanh nhất và dễ maintain nhất. Toàn bộ Uptime Kuma nằm trong container, không ảnh hưởng system.
# Tạo thư mục lưu data
mkdir -p /opt/uptime-kuma/data
# Chạy container
docker run -d \
--name uptime-kuma \
--restart unless-stopped \
-p 3001:3001 \
-v /opt/uptime-kuma/data:/app/data \
louislam/uptime-kuma:1
Nếu dùng Docker Compose (mình hay dùng cách này hơn vì dễ quản lý về sau):
# /opt/uptime-kuma/docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
cd /opt/uptime-kuma
docker compose up -d
Cách 2: Cài trực tiếp bằng npm
Dùng khi server không có Docker hoặc muốn tránh thêm layer container:
# Cài Node.js 18+ nếu chưa có
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
# Clone và cài Uptime Kuma
git clone https://github.com/louislam/uptime-kuma.git /opt/uptime-kuma
cd /opt/uptime-kuma
npm run setup
# Chạy dưới dạng service bằng PM2
npm install pm2 -g
pm2 start server/server.js --name uptime-kuma
pm2 startup
pm2 save
Mình chọn Docker vì khi migrate server hoặc backup, chỉ cần copy thư mục /opt/uptime-kuma/data là xong. Update Uptime Kuma sau này cũng chỉ là docker pull rồi restart container.
Thêm monitor đầu tiên
Truy cập http://your-server-ip:3001, tạo tài khoản admin, rồi click Add New Monitor:
- Monitor Type: HTTP(s) cho website, TCP Port cho database/Redis
- Heartbeat Interval: 30–60 giây cho production, 5 phút cho service ít quan trọng
- Retries: 2–3 lần trước khi báo down (tránh false alarm do mạng chập chờn)
Mẹo hay: Dùng loại monitor Keyword thay vì HTTP thuần. Nó vừa check HTTP status code, vừa kiểm tra response body có chứa một chuỗi nhất định không — phát hiện được trường hợp server trả 200 OK nhưng thực ra đang hiển thị trang lỗi.
Cài đặt cảnh báo qua Telegram
Telegram là kênh alert mình dùng nhiều nhất: nhận ngay trên điện thoại, không bị spam filter như email, setup nhanh hơn nhiều so với SMTP.
Bước 1: Tạo Telegram Bot
- Mở Telegram, tìm @BotFather
- Gõ
/newbot, đặt tên và username cho bot - BotFather trả về Bot Token dạng
123456789:ABCdef...— lưu lại
Bước 2: Lấy Chat ID
# Nhắn tin cho bot trước, sau đó chạy lệnh này:
curl "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates"
# Tìm "chat":{"id": 123456789} trong response
# Chat ID group có dạng số âm: -100...
Bước 3: Cấu hình trong Uptime Kuma
- Vào Settings → Notifications → Add Notification
- Type: Telegram
- Điền Bot Token và Chat ID, click Test
- Save rồi gán notification vào các monitor cần alert
Uptime Kuma gửi alert cả khi service down lẫn khi recover — bạn biết ngay khi vấn đề được giải quyết mà không cần vào dashboard kiểm tra.
Tạo Status Page public
Vào Status Page → New Status Page, đặt slug URL (VD: status), thêm các monitor muốn hiển thị và tùy chỉnh giao diện. Khách hàng truy cập http://your-ip:3001/status/status để xem uptime real-time.
Muốn truy cập qua domain riêng như status.yourdomain.com, cần Nginx reverse proxy:
server {
listen 80;
server_name status.yourdomain.com;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
# Bắt buộc cho WebSocket real-time
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Hai dòng Upgrade và Connection bắt buộc phải có — Uptime Kuma dùng WebSocket để update real-time, thiếu hai dòng này dashboard sẽ không tự refresh.
Tips thực chiến sau khi dùng thực tế
Backup data hàng ngày: Toàn bộ config và lịch sử nằm trong file /opt/uptime-kuma/data/kuma.db. Một cron job đơn giản là đủ:
# Backup mỗi ngày lúc 2 giờ sáng
0 2 * * * cp /opt/uptime-kuma/data/kuma.db /backup/kuma-$(date +\%Y\%m\%d).db
Monitor Uptime Kuma từ bên ngoài: Uptime Kuma không tự monitor được chính nó. Dùng UptimeRobot free (1 monitor là đủ) để ping vào Uptime Kuma — nếu nó down, bạn vẫn nhận được alert.
Giám sát cả service nội bộ: Nhiều người chỉ monitor URL public, nhưng nên thêm cả TCP monitor cho database port, Redis port, API internal. Vì đôi khi reverse proxy vẫn trả 200 nhưng backend đã chết từ lâu.
Mình đã cài Ubuntu Server 22.04 trên hơn 20 con VPS và quy trình cài Uptime Kuma này là thứ mình luôn làm đầu tiên — ngay sau khi setup SSH key và firewall. Có monitoring từ đầu giúp bạn phát hiện vấn đề trước khi người dùng thấy, và khi có incident, bạn có dữ liệu uptime history cụ thể thay vì phải đoán mò.
