Chuyện mạng chậm và những đêm thức trắng ‘mò kim đáy bể’
Vừa rồi team mình gặp một ca khá khoai. Dashboard báo latency nhảy vọt từ 20ms lên tận 500ms, người dùng bắt đầu kêu ca ứng dụng phản hồi chậm. Mình bay vào check server thì CPU, RAM vẫn ‘xanh mướt’, Disk I/O không có gì bất thường. Lúc này, nghi phạm số 1 chỉ có thể là đường truyền mạng.
Cảm giác bất lực nhất của dân DevOps là thấy mạng nghẽn nhưng không ‘chỉ mặt đặt tên’ được đứa nào đang chiếm dụng băng thông. Bạn có thể dùng iftop hay nload để xem tổng quan. Tuy nhiên, nếu muốn biết chính xác IP nào đang kết nối đến đâu, dùng giao thức gì (Netflix, Youtube, hay đang bị tấn công DDoS) thì mấy tool dòng lệnh đơn giản đó bắt đầu đuối sức.
Tại sao debug mạng thủ công thường đi vào ngõ cụt?
Anh em mình hay có thói quen gõ netstat hoặc ss để xem các kết nối đang active khi gặp sự cố. Cách làm này tồn tại 3 nhược điểm chí mạng:
- Mất dấu vết lịch sử: Bạn chỉ thấy cái đang xảy ra ngay lúc gõ lệnh. Nếu traffic spike (tăng vọt) chỉ diễn ra trong 10 giây rồi tắt, bạn chắc chắn sẽ bỏ lỡ.
- Rối loạn thông tin: Nhìn hàng ngàn dòng text nhảy liên tục trên terminal rất dễ hoa mắt. Bạn gần như không thể nhận ra quy luật hay các IP lạ đang trà trộn.
- Khó phân loại ứng dụng:
tcpdumptrả về dữ liệu thô (raw data). Bạn phải mất rất nhiều công phân tích mới biết đó là lưu lượng web bình thường hay một script scan port đang chạy ngầm.
Vấn đề nằm ở chỗ chúng ta thiếu một cái nhìn trực quan và có tính thống kê theo thời gian thực.
Nên chọn tool nào để ‘soi’ traffic hiệu quả?
Trước khi tìm thấy ‘chìa khóa’ ntopng, mình đã kinh qua đủ loại tool. Combo Prometheus + Grafana cực mạnh nhưng setup rất tốn thời gian, không phù hợp để cứu hỏa nhanh. SNMP thì cấu hình trên Linux đôi khi khá lằng nhằng, dữ liệu trả về thường chỉ là con số thô về bytes in/out, không đi sâu vào Layer 7 được.
Sau nhiều lần ‘vấp ngã’, mình rút ra ntopng là lựa chọn cân bằng nhất. Nó dễ cài, giao diện Web UI trực quan và phân tích được cả hành vi người dùng thay vì chỉ hiển thị băng thông đơn thuần.
Cài đặt ntopng trên Ubuntu/Debian
Mình thường cài từ repository chính thức của ntop để lấy bản mới nhất. Anh em chạy các lệnh sau nhé:
# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
# Cài đặt các package hỗ trợ
sudo apt install wget gnupg software-properties-common -y
# Thêm repo ntop (Ví dụ cho Ubuntu 22.04 - Jammy)
wget https://packages.ntop.org/apt/22.04/all/apt-ntop.deb
sudo dpkg -i apt-ntop.deb
# Cập nhật và cài đặt
sudo apt update
sudo apt install ntopng nprobe n2disk -y
Cấu hình để chạy ngay trong 1 phút
Sau khi cài xong, bạn cần chỉ định cho ntopng biết nó nên ‘lắng nghe’ ở card mạng nào. Mở file cấu hình bằng lệnh:
sudo nano /etc/ntopng/ntopng.conf
Thêm hoặc sửa các dòng sau:
-i=eth0
-w=3000
--community
Lưu ý: -i=eth0 là tên card mạng (dùng ip addr để check). -w=3000 là port truy cập giao diện web. Sau đó khởi động lại dịch vụ:
sudo systemctl restart ntopng
sudo systemctl enable ntopng
Trải nghiệm thực tế: Soi ‘tận xương tủy’ lưu lượng mạng
Bây giờ, bạn mở trình duyệt và gõ http://IP-Server:3000. User/Pass mặc định là admin/admin. Hệ thống sẽ bắt bạn đổi pass ngay lần đầu đăng nhập, hãy đặt pass mạnh một chút để bảo mật.
Mẹo nhỏ cho anh em: Khi giám sát dải IP lớn, việc xác định nhanh subnet của từng bộ phận là cực kỳ quan trọng. Để tính subnet nhanh và điền vào phần lọc của ntopng, mình hay dùng toolcraft.app/vi/tools/developer/ip-subnet-calculator. Nhập CIDR vào là có ngay network range và số host, giúp mapping dữ liệu trên ntopng với thực tế hạ tầng rất nhanh.
Những tính năng mình ‘ghiền’ nhất khi xử lý sự cố:
- Flows: Nơi ‘bóc phốt’ mọi kết nối. Bạn sẽ thấy rõ IP nguồn, IP đích và cột “Application” hiển thị SSL/TLS, HTTP hay BitTorrent. Nếu server database mà lại hiện traffic Netflix thì biết phải xử lý ai rồi đấy.
- Hosts: Tab này xếp hạng những máy đang ngốn mạng nhất (Top Talkers). Cực kỳ hữu ích để tìm ra máy nào đang bị dính malware và gửi spam liên tục.
- Alerts: ntopng sẽ hiện cảnh báo đỏ lòm ngay trang chủ nếu phát hiện IP lạ đang scan port hệ thống của bạn.
- Bản đồ GeoIP: Nếu hệ thống chỉ phục vụ khách Việt Nam mà thấy traffic từ nước ngoài đổ về ầm ầm thì chắc chắn là đang bị ‘thăm hỏi’.
Vài lưu ý về hiệu năng và bảo mật
ntopng bắt gói tin ở chế độ promiscuous mode nên sẽ tốn CPU nếu lưu lượng mạng lên tới hàng Gbps. Với server cấu hình thấp, bạn nên giới hạn thời gian lưu trữ lịch sử để tránh tràn RAM hoặc đầy đĩa cứng.
Về bảo mật, nếu chạy sau Firewall, hãy nhớ chỉ mở port 3000 cho IP máy tính của bạn. Tuyệt đối đừng mở port này cho toàn bộ internet (0.0.0.0/0) vì nó lộ rất nhiều thông tin nhạy cảm về sơ đồ mạng nội bộ.
Hy vọng tool này sẽ giúp anh em bớt những đêm thức trắng mò mẫm mỗi khi mạng lag. Có ntopng, bạn sẽ có đủ bằng chứng thép để làm việc với nhà cung cấp mạng hoặc ‘nhắc nhở’ mấy ông thần đang kéo torrent trong giờ làm.

