Quick start: Dựng hệ thống giám sát trong 5 phút
Website sập lúc 2 giờ sáng là ác mộng của dân vận hành. Khách không mua được hàng. Sếp réo liên tục. Tệ nhất là bạn chỉ biết chuyện khi người dùng nhắn tin phàn nàn.
Thay vì trả 15-30 USD mỗi tháng cho Better Stack hay Pingdom, bạn hoàn toàn có thể tự dựng một trạm giám sát riêng. Uptime Kuma là công cụ mã nguồn mở gọn nhẹ, chỉ tiêu tốn chưa tới 150MB RAM và cần đúng 1 file cấu hình để chạy.
Tạo thư mục dự án và mở file cấu hình:
mkdir -p uptime-kuma && cd uptime-kuma
nano docker-compose.yml
Dán đoạn mã sau vào docker-compose.yml:
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./kuma-data:/app/data
Khởi chạy container ở chế độ chạy ngầm (detached mode):
docker compose up -d
Quá trình kéo image mất khoảng 30 đến 60 giây. Xong xuôi, bạn truy cập http://IP-server-cua-ban:3001. Trình duyệt sẽ yêu cầu tạo tài khoản Admin ngay lần đầu truy cập. Đặt xong mật khẩu là bạn đã vào thẳng dashboard.
Bản chất kỹ thuật: Từng thành phần vận hành ra sao?
Tại sao nên dùng Docker Compose thay vì chạy lệnh rời?
Nhiều người có thói quen gõ thẳng docker run trên terminal. Ban đầu cách này rất nhanh. Tuy nhiên, sau vài tháng máy chủ reboot, bạn sẽ quên sạch các cờ mount volume hay cấu hình port đã gán. Hậu quả là mất trắng lịch sử uptime.
Viết sẵn vào file Compose giúp bạn quản lý hạ tầng dưới dạng code (IaC):
- louislam/uptime-kuma:1: Tag major version 1. Container sẽ tự nhận bản vá bảo mật mà không lo gặp breaking change ngoài ý muốn.
- restart: always: Container tự bật lại nếu tiến trình crash hoặc server vừa reboot xong.
- ./kuma-data:/app/data: Thư mục lưu database SQLite và cấu hình probe. Dù xóa container hay nâng cấp image, dữ liệu cũ vẫn nằm an toàn trên ổ cứng host.
Thêm endpoint đầu tiên để giám sát
Tại dashboard, nhấn Add New Monitor ở góc trái màn hình:
- Monitor Type: Chọn
HTTP(s)cho website hoặc REST API. Nếu muốn kiểm tra độ trễ mạng hay rớt gói (packet loss), hãy chọnPing. - Friendly Name: Đặt tên nhận diện rõ ràng, ví dụ: API Gateway Production.
- URL: Điền endpoint cần test, ví dụ:
https://api.yourdomain.com/healthz. - Heartbeat Interval: Đặt mặc định 60 giây. Cứ mỗi phút, Uptime Kuma sẽ gửi một HTTP request. Mã 2xx được tính là sống, còn lỗi 5xx hoặc timeout quá 48 giây sẽ kích hoạt trạng thái sự cố.
- Retries: Đặt là
2hoặc3. Thiết lập này giúp tránh báo động giả khi mạng chập chờn trong 1-2 giây.
Cấu hình bot Telegram bắn alert tức thì
Telegram là kênh nhận alert tối ưu nhất: hoàn toàn miễn phí, độ trễ nhận tin dưới 1 giây và hỗ trợ phân quyền group rất tiện.
- Mở Telegram, chat với @BotFather, gõ
/newbotvà làm theo hướng dẫn. BotFather sẽ trả về một chuỗi HTTP API Token dài dạng123456789:ABCdefGhI.... - Chat với bot @userinfobot rồi bấm Start để lấy Chat ID cá nhân. Nếu muốn alert gửi vào group trực chiến, hãy mời bot vào nhóm rồi dùng group ID (thường có dấu trừ ở đầu, ví dụ
-1001234567890). - Trên Uptime Kuma, vào Settings > Notifications > Setup Notification.
- Chọn Telegram, điền Token và Chat ID vừa lấy.
- Bấm nút Test. Điện thoại rung và có thông báo ngay lập tức tức là kết nối thành công. Đừng quên bật tùy chọn Default enabled để tự áp dụng cho mọi monitor tạo sau này.
Tối ưu hệ thống: An toàn và thực tế hơn
1. Đóng port 3001, dùng Reverse Proxy và HTTPS
Để lộ thẳng port 3001 ra ngoài Internet là rủi ro bảo mật lớn. Bạn nên chặn cổng này và trỏ domain qua Nginx hoặc Cloudflare Tunnel để có chứng chỉ SSL miễn phí.
Trong file docker-compose.yml, sửa lại dòng port thành:
ports:
- "127.0.0.1:3001:3001"
Cấu hình này khóa cứng cổng ra ngoài, chỉ chấp nhận kết nối nội bộ từ reverse proxy trên cùng VPS.
2. Tạo Status Page công khai cho khách hàng
Uptime Kuma tích hợp sẵn tính năng Status Page. Bạn có thể gom nhóm các dịch vụ công khai, chèn logo thương hiệu và gắn domain riêng như status.yourdomain.com. Khi hệ thống gặp sự cố diện rộng, trang này giúp giảm tải đáng kể số lượng ticket khiếu nại gửi về đội kỹ thuật.
3. Bắt lỗi ngầm bằng Keyword Search
Nhiều lỗi database nghiêm trọng (như lỗi kết nối MySQL trên WordPress) vẫn trả về HTTP status code 200 kèm trang trắng hoặc thông báo lỗi text. Nếu chỉ check mã 200, hệ thống sẽ báo xanh sai thực tế.
Để khắc phục, hãy đổi Monitor Type sang HTTP(s) – Keyword. Điền một chuỗi text cố định luôn xuất hiện ở footer hoặc header (ví dụ: Copyright 2026). Uptime Kuma chỉ tính website hoạt động bình thường khi payload trả về có chứa đúng từ khóa đó.
Kinh nghiệm thực chiến khi vận hành
- Tuyệt đối không đặt Uptime Kuma chung server với website: Nếu VPS chết nguồn hay nghẽn băng thông, cả web lẫn trạm giám sát đều sập cùng lúc. Không có ai gửi tin báo động cho bạn. Hãy đầu tư một con VPS riêng biệt loại 1 vCPU – 1GB RAM (giá khoảng 3-5 USD/tháng) ở nhà cung cấp khác để chuyên chạy monitoring.
- Sao lưu thư mục data tự động: Dữ liệu lịch sử đo đạc nằm gọn tại
./kuma-data. Bạn nên viết một cronjob nén thư mục này mỗi đêm và đẩy bản backup lên S3 hoặc Google Drive bằng rclone. File backup thường chỉ nặng vài MB. - Cân nhắc tần suất probe: Không nên đặt interval xuống 5s-10s trừ khi thực sự cần thiết. Tần suất này dễ làm đầy log web server, tốn CPU và có thể bị các dịch vụ WAF như Cloudflare gắn cờ chặn IP do nghi ngờ cào dữ liệu hoặc tấn công DoS. Mức 60 giây là con số chuẩn cho 95% trường hợp sử dụng.

