Chuyển đến nội dung chính

Giám sát server Linux từ cơ bản đến nâng cao: htop, ncdu, prometheus và Uptime Kuma

Cẩm nang toàn diện về giám sát hiệu năng máy chủ Linux: Khai thác công cụ CLI thời gian thực (Htop, Btop, Ncdu), thiết lập hệ thống cảnh báo sự cố Uptime Kuma qua Telegram và thu thập chỉ số với Prometheus & Grafana.

Giám sát máy chủ Linux

Tầm quan trọng của giám sát hệ thống (Server Observability)

Một hệ thống máy chủ chỉ thực sự được coi là ổn định khi bạn luôn nắm bắt được:

  • Tải CPU (CPU Load): Có tiến trình nào đang chiếm dụng 100% CPU do vòng lặp vô tận không?
  • Dung lượng RAM & Swap: Ứng dụng có bị rò rỉ bộ nhớ (Memory Leak) sắp dẫn đến tình trạng máy chủ bị đơ không?
  • Dung lượng Ổ cứng (Disk I/O & Disk Space): Các file log hoặc cơ sở dữ liệu có đang làm đầy phân vùng root không?
  • Tình trạng Dịch vụ (Uptime/Downtime): Website có đang phản hồi khách hàng bình thường hay đang bị sập?

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn xây dựng hệ thống giám sát đa tầng: từ các công cụ dòng lệnh (CLI) tức thì cho đến hệ thống cảnh báo sự cố tự động gửi tin nhắn về điện thoại qua Telegram..


1. Tầng 1: Các công cụ giám sát dòng lệnh (CLI Tools)

Khi truy cập vào máy chủ qua SSH, đây là những công cụ đầu tiên bạn nên sử dụng để chuẩn đoán tình trạng sức khỏe:

A. Htop & Btop - Giám sát CPU, RAM và Tiến trình

htop là phiên bản nâng cấp đồ họa tương tác của lệnh top cổ điển:

bash
# Cài đặt htop
sudo apt install -y htop

# Chạy htop
htop

Nếu muốn giao diện hiện đại hơn với biểu đồ đồ họa sắc nét, hãy dùng btop:

bash
sudo apt install -y btop
btop
  • Phím tắt hữu ích trong htop:
    • F6: Sắp xếp tiến trình theo CPU% hoặc Memory%.
    • F9: Gửi tín hiệu Kill (SIGTERM hoặc SIGKILL) để tắt một tiến trình bị treo.
    • F3: Tìm kiếm tiến trình theo tên.

B. Ncdu - Tìm kiếm và dọn dẹp file dung lượng khủng làm đầy ổ đĩa

Khi ổ cứng VPS đạt mức cảnh báo 90-100%, ncdu (NCurses Disk Usage) là công cụ nhanh nhất giúp bạn quét toàn bộ hệ thống và phân tích cây thư mục xem thư mục nào đang chiếm nhiều GB nhất:

bash
# Cài đặt ncdu
sudo apt install -y ncdu

# Quét phân vùng root (bỏ qua các ổ đĩa mạng ảo)
sudo ncdu -x /

Sử dụng các phím mũi tên lên/xuống/vào/ra để điều hướng và phím d để xóa trực tiếp file rác.

C. Iotop - Kiểm tra tốc độ đọc/ghi ổ đĩa (Disk I/O Bottleneck)

Khi máy chủ phản hồi chậm dù CPU và RAM vẫn còn trống, nguyên nhân thường do ổ đĩa bị nghẽn I/O (Disk I/O Wait):

bash
sudo apt install -y iotop
sudo iotop -o

Cờ -o chỉ hiển thị các tiến trình đang thực sự phát sinh thao tác đọc/ghi đĩa.


2. Tầng 2: Cảnh báo Sự cố Thời gian thực với Uptime Kuma

Uptime Kuma là công cụ mã nguồn mở tự host (Self-hosted Monitoring) tuyệt đẹp, có tính năng tương tự như Pingdom hay UptimeRobot nhưng hoàn toàn miễn phí và riêng tư.

Nó có thể kiểm tra định kỳ HTTP(s), Ping, DNS, Docker container và gửi thông báo tức thời qua Telegram, Discord, Slack, Email, Webhook ngay khi website của bạn bị gián đoạn (Downtime).

Triển khai Uptime Kuma siêu nhanh với Docker:

bash
docker run -d \
  --restart=always \
  -p 127.0.0.1:3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:1

Sau khi chạy container, bạn có thể dùng Nginx Reverse Proxy trỏ domain status.example.com vào cổng 3001 và thiết lập:

  1. Tạo một con Bot Telegram qua @BotFather và lấy Bot Token.
  2. Tạo một Group Telegram và lấy Chat ID.
  3. Trong Uptime Kuma: Vào Settings > Notification > Setup Telegram.
  4. Thêm các mục kiểm tra (Monitors): https://my-website.com (Kiểm tra mỗi 60 giây).

Mỗi khi website bị sập hoặc gặp lỗi HTTP 500/502, Telegram trên điện thoại của bạn sẽ lập tức nhận được tin nhắn cảnh báo trong vòng 1 phút!


3. Tầng 3: Giám sát Hạ tầng Nâng cao với Prometheus & Grafana

Đối với các hệ thống lớn có nhiều máy chủ, bộ đôi Prometheus + Node Exporter + Grafana là tiêu chuẩn công nghiệp (Industry Standard):

  1. Node Exporter: Chạy trên từng máy chủ VPS để thu thập số liệu phần cứng (CPU, Memory, Network, Disk).
  2. Prometheus: Máy chủ thu thập (Scraper) định kỳ kéo số liệu từ Node Exporter và lưu trữ dưới dạng chuỗi thời gian (Time-series Database).
  3. Grafana: Bảng điều khiển (Dashboard) trực quan hóa các biểu đồ số liệu thời gian thực tuyệt đẹp.

Triển khai Node Exporter trên máy chủ:

bash
docker run -d \
  --name=node-exporter \
  --restart=unless-stopped \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host

Node Exporter sẽ phát các chỉ số phần cứng qua endpoint http://<IP_MÁY_CHỦ>:9100/metrics.


4. Script tự động cảnh báo Dung lượng ổ đĩa qua Telegram

Nếu bạn không muốn cài đặt các phần mềm phức tạp mà chỉ cần một cảnh báo đơn giản khi dung lượng ổ cứng vượt quá 85%:

Tạo script /opt/scripts/check_disk.sh:

bash
#!/bin/bash
# Ngưỡng cảnh báo (%)
THRESHOLD=85
BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"

CURRENT_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

if [ "$CURRENT_USAGE" -gt "$THRESHOLD" ]; then
    MESSAGE="⚠️ [CẢNH BÁO MÁY CHỦ] Dung lượng ổ cứng root đã đạt ${CURRENT_USAGE}% (Vượt ngưỡng ${THRESHOLD}%)! Hãy kiểm tra và dọn dẹp ngay."
    curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
        -d "chat_id=${CHAT_ID}" \
        -d "text=${MESSAGE}" > /dev/null
fi

Phân quyền và đặt lịch chạy mỗi 30 phút trong crontab:

cron
*/30 * * * * /opt/scripts/check_disk.sh > /dev/null 2>&1

Bảng so sánh các giải pháp Giám sát

Giải phápĐộ phức tạpMức tiêu thụ RAMTính năng chính
CLI (htop, ncdu, btop)Rất thấp< 10MBChuẩn đoán tức thời khi đang SSH
Uptime KumaThấp~ 100MBBáo sập web qua Telegram, tính Uptime %
Custom Bash ScriptRất thấp~ 2MBCảnh báo Disk Full, High CPU tức thời
Prometheus + GrafanaTrung bình - Cao~ 500MB - 1GBBiểu đồ chi tiết, phân tích xu hướng dài hạn

Tổng kết

Một chiến lược giám sát tốt giúp bạn phát hiện và ngăn chặn thảm họa trước khi người dùng kịp phàn nàn. Hãy bắt đầu ngay hôm nay bằng việc cài đặt htop, cấu hình Uptime Kuma nhận cảnh báo qua Telegram và đặt script cảnh báo dung lượng đĩa cho máy chủ của bạn!

💬

Thảo luận & Bình luận

Đăng nhập bằng tài khoản GitHub để đặt câu hỏi hoặc đóng góp ý kiến cho bài viết.