ctop: Giám sát Docker Container theo thời gian thực trong Terminal — Thay thế docker stats

Docker tutorial - IT technology blog
Docker tutorial - IT technology blog

Vấn đề với docker stats — và tại sao cần một thứ khác

Mở terminal lên, gõ docker stats, và bạn nhận được một màn hình số cuộn liên tục không dừng. Muốn tìm container cụ thể? Không có filter. Muốn xem log ngay lúc đó? Phải mở terminal khác. Muốn sort theo CPU? Không được.

Lần đầu mình dùng Docker Compose cho dự án thực tế, mình mắc khá nhiều lỗi cơ bản mà bây giờ nghĩ lại thấy buồn cười — một trong đó là cứ Ctrl+C rồi chạy lại docker stats mỗi lần cần xem số liệu của container nào đó. Sau này mới biết có ctop — tool giải quyết đúng vấn đề này.

ctop (container top) là giao diện TUI (Terminal UI) hiển thị metrics của tất cả container đang chạy theo thời gian thực, có thể tương tác, lọc, sort, và xem log — tất cả trong một màn hình terminal duy nhất.

Cài và chạy ctop trong 5 phút

Linux (binary trực tiếp)

Cách nhanh nhất — tải binary về và chạy luôn, không cần cài thêm gì:

# Tải binary mới nhất (kiểm tra version tại github.com/bcicen/ctop)
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 \
  -O /usr/local/bin/ctop

# Cấp quyền thực thi
sudo chmod +x /usr/local/bin/ctop

# Chạy thử
ctop

Nếu cần chạy mà không có quyền sudo (VPS shared, ví dụ), tải về thư mục local:

mkdir -p ~/.local/bin
wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 \
  -O ~/.local/bin/ctop
chmod +x ~/.local/bin/ctop
export PATH="$HOME/.local/bin:$PATH"  # thêm vào ~/.bashrc để dùng mãi

macOS

brew install ctop

Chạy qua Docker (không cần cài gì)

Cách này tiện khi dùng tạm trên server mà không muốn cài thêm binary:

docker run --rm -ti \
  -v /var/run/docker.sock:/var/run/docker.sock \
  quay.io/vektorlab/ctop:latest

Chạy ctop lần đầu

ctop — màn hình hiện ra ngay lập tức với danh sách tất cả container (cả đang chạy lẫn đã dừng). Mặc định ctop chỉ hiển thị container đang active, nhấn a để toggle xem tất cả.

Hiểu giao diện ctop

Các cột số liệu

Mỗi dòng là một container, với các cột:

  • NAME — tên container
  • CID — 12 ký tự đầu của container ID
  • CPU — phần trăm CPU đang dùng (real-time, cập nhật mỗi giây)
  • MEM — RAM đang dùng / giới hạn (nếu có set --memory)
  • NET RX/TX — lưu lượng mạng nhận vào / gửi ra từ khi container khởi động
  • IO R/W — đọc/ghi disk
  • PIDS — số process đang chạy bên trong container

Màu sắc của cột CPU thay đổi theo mức độ: xanh lá (thấp) → vàng → đỏ (cao). Nhìn một cái là biết ngay container nào đang ngốn tài nguyên.

Phím tắt cơ bản

Phím Tác dụng
↑ ↓ Di chuyển giữa các container
Enter Mở single-container view (xem chi tiết)
l Xem log của container đang chọn
e Mở shell vào container (exec -it bash)
s Dừng container
r Restart container
a Toggle hiện/ẩn container đã dừng
f Filter theo tên container
H Ẩn/hiện header
q Thoát

Tính năng nâng cao

Sort theo cột bất kỳ

Nhấn o để mở menu chọn cột sort. Hữu ích nhất là sort theo CPU hoặc MEM để biết ngay container nào đang “ăn” tài nguyên:

Sort options:
  [c] cpu    [m] mem    [n] net    [b] block io
  [p] pids   [N] name   [s] state

Sau khi chọn, danh sách tự động sắp xếp và cập nhật liên tục theo giá trị real-time.

Single container view

Chọn container và nhấn Enter — ctop chuyển sang màn hình detail với đồ thị CPU và MEM theo thời gian (sparkline). Từ đây có thể nhấn l để xem log streaming trực tiếp mà không cần thoát ra.

Filter container theo tên

Nhấn f, gõ keyword — ctop filter ngay lập tức theo tên container. Ví dụ gõ nginx chỉ còn thấy các container có tên chứa “nginx”. Nhấn Esc để xóa filter.

Chạy với options từ CLI

# Chỉ hiện container đang chạy (bỏ qua stopped)
ctop -a

# Sort theo memory ngay từ đầu
ctop -s mem

# Kết nối Docker host khác qua TCP socket
ctop -H tcp://192.168.1.100:2375

# Export metrics ra file JSON (dùng cho script)
ctop -json 2>/dev/null | head -20

Kết nối Docker remote host

Đây là tính năng mình dùng nhiều khi quản lý nhiều VPS — chạy ctop trên máy local nhưng monitor Docker trên server:

# Cần enable Docker TCP socket trên server trước
# /etc/docker/daemon.json:
# { "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }

# Kết nối từ máy local
export DOCKER_HOST=tcp://your-server-ip:2375
ctop

Lưu ý bảo mật: TCP socket không encrypt — chỉ dùng trong mạng nội bộ hoặc qua SSH tunnel. Trong môi trường production, dùng SSH tunnel thay thế:

# Tạo SSH tunnel trước
ssh -L 2375:localhost:2375 user@your-server -N &

# Rồi mới kết nối
export DOCKER_HOST=tcp://localhost:2375
ctop

Tips thực tế

Phân biệt ctop vs docker stats vs Portainer

  • docker stats: Output đơn giản, không interactive, thích hợp pipe vào script hoặc log
  • ctop: Interactive TUI, tốt nhất cho debug và monitoring nhanh trong terminal
  • Portainer: Web UI đầy đủ tính năng, thích hợp quản lý lâu dài, team nhiều người. Blog đã có bài riêng nếu bạn cần setup Portainer.

Ba tool này không loại trừ nhau — mình dùng ctop khi đang SSH vào server và cần xem nhanh container nào đang có vấn đề, còn Portainer thì để quản lý định kỳ qua browser.

Dùng ctop để debug memory leak

Khi nghi ngờ một container bị memory leak, mở ctop, sort theo MEM (om), rồi để màn hình chạy 5-10 phút. Nếu thấy cột MEM của container đó tăng đều và không giảm — gần như chắc chắn có leak. Từ đó nhấn Enter để vào detail view xem đồ thị MEM theo thời gian rõ hơn.

Alias tiện dụng

# Thêm vào ~/.bashrc hoặc ~/.zshrc
alias dps='ctop'                    # thay thế docker ps thông thường
alias ctop-cpu='ctop -s cpu'        # mở thẳng sorted by CPU
alias ctop-mem='ctop -s mem'        # mở thẳng sorted by memory

Xem log nhanh không cần thoát ctop

Workflow mình hay dùng nhất: chạy ctop → thấy container nào CPU spike bất thường → nhấn Enter → nhấn l → xem log streaming ngay. Không cần mở terminal mới, không cần gõ tên container ID dài. Xong nhấn q quay lại danh sách.

Chạy ctop trong tmux session

Trên VPS production, mình thường để ctop chạy trong một tmux window riêng:

# Tạo session tmux tên "monitor"
tmux new-session -d -s monitor -n ctop
tmux send-keys -t monitor:ctop 'ctop' Enter

# Attach vào bất cứ lúc nào
tmux attach -t monitor

ctop là một trong những tool mà sau khi dùng một lần, bạn sẽ không muốn quay lại docker stats nữa. Cài 30 giây, tiết kiệm nhiều phút mỗi lần debug container.

Share: