Hướng dẫn quản lý server trực quan với Cockpit trên Linux: Giám sát tài nguyên, Storage và Container

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

Khi nào SSH qua terminal bắt đầu trở nên bất tiện?

SSH vào terminal là phản xạ tự nhiên của dân sysadmin. Tuy nhiên, tình huống thực tế không phải lúc nào cũng lý tưởng. Hãy tưởng tượng bạn đang trực on-call ngoài giờ và nhận alert CPU nhảy 100% qua điện thoại. Mở laptop, bật VPN, rồi gõ từng lệnh top, iostat, lsblk hay lội log bằng journalctl tốn không ít thời gian.

Các bộ quản trị như cPanel hay Plesk lại quá cồng kềnh. Chúng chiếm hàng trăm MB RAM, can thiệp thô bạo vào file cấu hình gốc và không hợp với máy chủ hạ tầng. Cockpit giải quyết bài toán này theo cách hoàn toàn khác: giao diện web nhẹ, chuẩn POSIX và chỉ kích hoạt khi bạn thực sự truy cập.

Cockpit hoạt động dưới nền tảng như thế nào?

Cockpit là dự án mã nguồn mở do Red Hat tài trợ. Công cụ này được cài mặc định trên RHEL, Fedora, AlmaLinux, Rocky Linux và chạy mượt mà cả trên Ubuntu/Debian. Điểm độc đáo nằm ở 3 nguyên lý thiết kế:

  • Zero footprint khi không truy cập: Cockpit dựa vào cơ chế socket activation của systemd (cockpit.socket). Ở trạng thái chờ, tiến trình chỉ lắng nghe trên cổng 9090 và chiếm chưa tới vài KB bộ nhớ. Chỉ khi bạn mở trình duyệt đăng nhập, tiến trình xử lý mới bật lên, tốn khoảng 30MB đến 50MB RAM rồi tự giải phóng sau phiên làm việc.
  • Đồng bộ 1:1 với terminal: Cockpit không sinh ra cơ chế quản lý riêng. Mọi thao tác trên web đều gửi lệnh trực tiếp xuống D-Bus API, NetworkManager, LVM và systemd. Bạn đổi IP hay restart service trên web thì gõ lệnh dưới CLI cũng thấy ngay kết quả tương tự.
  • Dùng tài khoản PAM gốc: Không cần tạo thêm database user. Bạn đăng nhập bằng chính account Linux trên server, quyền hạn phụ thuộc hoàn toàn vào cấu hình sudoers sẵn có.

Thực hành: Cài đặt và sử dụng Cockpit trong thực tế

1. Cài đặt Cockpit và các module mở rộng

Bên cạnh gói lõi, bạn nên cài thêm module quản lý storage (cockpit-storaged) và quản lý container (cockpit-podman).

Đối với RHEL, AlmaLinux, Rocky Linux hoặc Fedora:

# Cài đặt Cockpit cùng các plugin cần thiết
sudo dnf install -y cockpit cockpit-storaged cockpit-podman

# Kích hoạt socket tự khởi động cùng OS
sudo systemctl enable --now cockpit.socket

# Mở port 9090 trên firewalld
sudo firewall-cmd --add-service=cockpit --permanent
sudo firewall-cmd --reload

Đối với Ubuntu hoặc Debian:

sudo apt update
sudo apt install -y cockpit cockpit-storaged cockpit-podman

# Kích hoạt socket
sudo systemctl enable --now cockpit.socket

# Mở port qua UFW nếu đang bật tường lửa
sudo ufw allow 9090/tcp

Cài xong, bạn mở trình duyệt và truy cập https://<IP-Server>:9090. Do dùng chứng chỉ tự ký (self-signed certificate), trình duyệt sẽ hiện cảnh báo bảo mật. Bạn chỉ cần chọn xác nhận bỏ qua để vào màn hình login.

2. Chuyển sang quyền Administrative Access

Mặc định sau khi login, tài khoản sudo chỉ ở chế độ Limited Access (chỉ xem thông số). Muốn can thiệp cấu hình, bạn nhìn lên góc trên bên phải màn hình, bấm nút Turn on administrative access rồi gõ lại mật khẩu tài khoản. Cơ chế này giúp bạn tránh lỡ tay sửa nhầm thông số khi chỉ muốn kiểm tra hệ thống.

3. Giám sát tài nguyên và phân tích nhật ký (Logs)

Menu Overview / Metrics hiển thị biểu đồ CPU, RAM, Disk I/O và Network theo thời gian thực. Thấy CPU tăng đột biến lên 95%? Bạn chỉ cần bấm vào biểu đồ là danh sách các process ngốn CPU nhất lập tức hiện ra.

Tab Logs gom toàn bộ dữ liệu từ systemd-journald về một chỗ. Bạn có thể lọc tức thì theo mức độ lỗi (Error, Critical, Warning) hoặc lọc riêng theo từng service như nginx.service hay mariadb.service.

Kinh nghiệm thực tế: một tiến trình worker Node.js từng liên tục crash do lỗi phân quyền thư mục /var/log/app/. Nếu chạy lệnh journalctl không kèm filter, log trôi rất nhanh và dễ sót. Với Cockpit, thanh cảnh báo đỏ rực lọc riêng service đó đã chỉ thẳng vào dòng lỗi permission trong chưa đầy 30 giây.

4. Quản lý ổ đĩa LVM: Tránh gõ nhầm lệnh mất dữ liệu

Thao tác phân vùng thủ công bằng fdisk, parted hay lvextend luôn tiềm ẩn rủi ro gõ nhầm ổ đĩa từ /dev/sdb sang /dev/sda. Hậu quả là toàn bộ hệ điều hành có thể biến mất.

Trong tab Storage, Cockpit trực quan hóa toàn bộ cấu trúc đĩa:

  • Đọc chỉ số S.M.A.R.T để phát hiện sớm ổ cứng sắp hỏng (bad sector, nhiệt độ cao).
  • Mở rộng Volume Group hoặc tăng dung lượng Logical Volume (ví dụ nới thêm 50GB cho /dev/mapper/vg0-data) bằng thanh trượt trực quan kèm preview dung lượng.
  • Format phân vùng sang ext4/xfs và gắn mount point tự động, hệ thống tự điền entry chuẩn vào /etc/fstab.
  • Mount ổ đĩa chia sẻ qua giao thức NFS chỉ với vài thông tin IP và thư mục đích.

5. Quản lý Container với cockpit-podman

Nếu server chạy container, module cockpit-podman là giải pháp thay thế gọn gàng cho Portainer (vốn thường ngốn 100MB RAM và cần Docker daemon chạy nền):

  • Tìm và tải image trực tiếp từ Docker Hub, Quay.io hoặc internal registry.
  • Tạo container với đầy đủ port mapping, volume mount và biến môi trường qua form giao diện.
  • Theo dõi log container trực tiếp và mở terminal console vào thẳng container ngay trên tab trình duyệt.
  • Tự tạo file unit systemd cho container, đảm bảo container tự bật lại khi server reboot.

6. Thiết lập bảo mật: Đừng để hở cổng 9090 ra Internet

Để cổng quản trị web lộ thiên là mục tiêu ưa thích của các cuộc tấn công quét cổng và brute-force. Hãy áp dụng hai bước bảo vệ sau:

Đổi port mặc định: Chuyển cổng 9090 sang một cổng ngẫu nhiên (ví dụ 44990) bằng file cấu hình systemd:

sudo mkdir -p /etc/systemd/system/cockpit.socket.d/
sudo bash -c 'cat <<EOF > /etc/systemd/system/cockpit.socket.d/listen.conf
[Socket]
ListenStream=
ListenStream=44990
EOF'

sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket

Đặt sau Nginx Reverse Proxy: Cho Cockpit chạy sau Nginx có chứng chỉ SSL Let’s Encrypt và chỉ whitelist dải IP nội bộ hoặc IP cố định của bạn. Cần khai báo domain trong /etc/cockpit/cockpit.conf để WebSocket không bị ngắt:

sudo bash -c 'cat <<EOF > /etc/cockpit/cockpit.conf
[WebService]
Origins = https://cockpit.yourdomain.com
ProtocolHeader = X-Forwarded-Proto
EOF'

Lời kết

Cockpit không thay thế dòng lệnh Linux. Công cụ này đóng vai trò trợ lý quan sát đắc lực, giúp bạn kiểm tra sức khỏe server trong vài giây, nới dung lượng đĩa an toàn và xử lý sự cố nhanh chóng. Hãy thử cài Cockpit trên một VPS cá nhân hoặc máy chủ staging để kiểm chứng độ tiện lợi trong công việc hàng ngày.

Share: