Giám sát băng thông Linux: Tìm đúng ‘thủ phạm’ ngốn mạng với Nethogs và Iftop

Network tutorial - IT technology blog
Network tutorial - IT technology blog

Xử lý sự cố băng thông lúc nửa đêm: Tại sao nethogs và iftop là cứu cánh?

2 giờ sáng, điện thoại mình rung liên hồi. Hệ thống Zabbix báo động đỏ: Băng thông ra (Outbound Traffic) của cụm Database vọt lên 1Gbps, chạm ngưỡng giới hạn card mạng. Kỳ lạ là lượng truy cập người dùng lúc này gần như bằng không.

Dùng top hay htop lúc này vô dụng. Chúng chỉ báo CPU/RAM ổn, trong khi card mạng thì đang “kêu cứu”. Các lệnh như vnstat hay nload chỉ cho biết tổng dung lượng, chứ không thể chỉ mặt đặt tên thằng nào đang gửi dữ liệu đi.

Với kinh nghiệm quản lý network cho văn phòng 50 người và một datacenter nhỏ, mình rút ra bài học: Bạn cần công cụ soi sâu vào từng Process ID (PID) hoặc kết nối IP. Đó là lúc nethogsiftop phát huy tác dụng.

Cài đặt nhanh trên các bản phân phối Linux

Hai công cụ này siêu nhẹ, tổng dung lượng chưa tới 2MB. Hãy cài sẵn chúng vào template server để dùng ngay khi có biến.

Dòng Ubuntu/Debian:

sudo apt update && sudo apt install nethogs iftop -y

Dòng CentOS/RHEL/AlmaLinux (Cần Repo EPEL):

sudo yum install epel-release -y
sudo yum install nethogs iftop -y

Nethogs – Truy tìm tiến trình đang “đốt” băng thông

Điểm khác biệt của nethogs là nó gom nhóm theo Process (Tiến trình) thay vì giao thức. Nó trả lời chính xác câu hỏi: “Script nào, User nào đang ngốn mạng?”.

Cách sử dụng thực tế

Chạy lệnh với quyền root:

sudo nethogs

Giao diện sẽ hiển thị các cột quan trọng:

  • PID: Mã định danh để bạn có thể kill ngay nếu cần.
  • USER: Giúp xác định tài khoản nào đang chạy tiến trình (rất dễ phát hiện user bị hack).
  • PROGRAM: Đường dẫn file thực thi (Ví dụ: /usr/sbin/nginx).
  • SENT/RECEIVED: Tốc độ upload/download thực tế theo KB/s.

Trong môi trường production, mình thường dùng thêm tham số để theo dõi interface cụ thể:

sudo nethogs eth0

Mẹo nhỏ: Nhấn phím ‘c’ khi đang chạy để chuyển sang chế độ Cumulative. Bạn sẽ thấy tổng dung lượng mỗi process đã tiêu thụ từ lúc mở tool, cực kỳ hữu ích để tìm các script chạy ngầm ngắt quãng.

Iftop – Phân tích lưu lượng theo IP và Port

Nếu nethogs tìm ra Cái gì đang chạy, thì iftop sẽ cho biết Nó đang gửi đi đâu. Iftop hiển thị chi tiết các kết nối giữa server của bạn và các IP bên ngoài.

sudo iftop -i eth0 -n -P

Trong đó, flag -n để tắt phân giải DNS (giúp hiển thị IP nhanh hơn) và -P để hiện Port.

Các phím tắt cần nhớ:

  • n: Bật/tắt phân giải tên miền. Nên tắt để tránh server bị treo do đợi truy vấn DNS.
  • p: Hiện Port. Giúp phân biệt traffic web (443) với các port lạ của mã độc.
  • L: Hiển thị thanh bar đo lưu lượng trực quan.

Quy trình phối hợp: Khi nào dùng công cụ nào?

Thực tế vận hành, mình luôn kết hợp cả hai theo kịch bản 3 bước:

  1. Bước 1: Mở nethogs. Thấy một process rsync đang chiếm 50MB/s.
  2. Bước 2: Mở iftop. Phát hiện IP đích là một server lạ ở nước ngoài thay vì server backup nội bộ.
  3. Bước 3: Dùng lsof -p [PID] để xem process đó đang đọc file nào và xử lý chặn IP hoặc kill process.

Tình huống thực tế tại văn phòng

Có lần mạng công ty chậm đột ngột, ping lên tới 500ms. Mình SSH vào Gateway, bật nethogs và thấy ngay một máy trạm đang đẩy 10MB/s lên Dropbox. Chỉ mất 20 giây để xác định đúng IP máy của nhân viên đó mà không cần lục lọi log firewall phức tạp.

Lưu ý về giám sát định kỳ

Nếu muốn lưu lại lịch sử để đối soát sau này, bạn có thể chạy nethogs ở chế độ tracing:

sudo nethogs -t > network_debug.log

Hãy cẩn thận vì file log này phình to rất nhanh. Chỉ nên bật khi bạn đang trong quá trình debug sự cố cụ thể.

Làm chủ nethogsiftop giống như có thêm kính hiển vi soi vào card mạng. Hy vọng những chia sẻ từ các đêm “trực chiến” này giúp hệ thống của bạn luôn mượt mà.

Share: