Hướng dẫn cấu hình Host sFlow trên Linux: Giám sát lưu lượng mạng và máy ảo KVM thời gian thực

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

Bối cảnh: Bắt trọn luồng dữ liệu mà không làm sập server

Hãy hình dung mạng nội bộ công ty như ngã tư đường vào giờ cao điểm. Khi ùn tắc xảy ra, nếu bạn cử người đứng ghi lại biển số, màu sơn và tốc độ của từng xe lướt qua, họ sẽ kiệt sức sau vài phút. Đáng ngại hơn, chính việc dừng xe kiểm tra còn khiến đường kẹt cứng thêm. Đây cũng là điều sẽ xảy ra nếu bạn lạm dụng tcpdump trên cổng mạng 10 Gbps đang tải nặng.

Thay vì soi từng xe, giải pháp thông minh hơn là chụp ngẫu nhiên một bức ảnh sau mỗi 400 lượt xe qua chốt. Đồng thời, cứ 20 giây bạn ghi lại mật độ giao thông một lần. Bạn vẫn nắm chắc 95–99% bức tranh toàn cảnh: xe bồn nào quá tải, luồng xe từ nhánh nào đổ về nhiều nhất. Hệ thống không tốn tài nguyên vô ích. Đó chính là triết lý vận hành của sFlow (Sampled Flow).

Trong hạ tầng văn phòng 50 nhân sự và cụm server KVM mình từng quản lý, sự cố mạng chậm xảy ra như cơm bữa. Có lần một máy ảo backup bất ngờ đẩy traffic lúc 2 giờ chiều, đè nghẽn đường truyền chính. Phản xạ quen thuộc lúc đó là SSH vào rồi bật tcpdump. Kết quả: một core CPU vọt lên 100%, file .pcap ngốn hết 40 GB ổ cứng sau 10 phút, trong khi nguyên nhân gốc vẫn chưa thể bóc tách ngay.

sFlow giải quyết triệt để bài toán này nhờ cơ chế tách biệt hoàn toàn:

  • Packet sampling: Trích xuất ngẫu nhiên header của 1 gói tin trong mỗi N gói chạy qua (thường là 1/400 hoặc 1/1000).
  • Counter polling: Định kỳ đọc thông số phần cứng (interface bytes, CPU load, RAM usage).

Toàn bộ số liệu được đóng gói thành các bản tin UDP siêu gọn rồi bắn về máy chủ tập trung (Collector). Tiến trình Host sFlow (hsflowd) viết bằng C thuần, hoạt động bền bỉ như một daemon trên Linux với mức ngốn CPU hiếm khi vượt quá 1%.

Cài đặt Host sFlow trên Linux

hsflowd chạy tốt trên hầu hết các distro quen thuộc, từ Ubuntu, Debian cho đến Rocky Linux hay AlmaLinux. Do không vướng dependency nặng, quá trình cài đặt chỉ mất chưa đầy 2 phút.

1. Cài đặt trên Ubuntu / Debian

Các bản Ubuntu gần đây đã đưa sẵn hsflowd vào repository chính thức:

sudo apt update
sudo apt install -y hsflowd

Trường hợp cần bản build mới nhất hoặc repo mặc định thiếu package, hãy tải trực tiếp file .deb từ GitHub repository của dự án:

# Ví dụ với bản 2.0.51 trên Ubuntu 22.04 LTS
wget https://github.com/sflow/host-sflow/releases/download/v2.0.51-1/hsflowd-ubuntu22_2.0.51-1_amd64.deb
sudo dpkg -i hsflowd-ubuntu22_2.0.51-1_amd64.deb

2. Cài đặt trên RHEL / Rocky Linux / AlmaLinux

Trên hệ sinh thái Enterprise Linux, gói phần mềm nằm trong kho EPEL:

sudo dnf install -y epel-release
sudo dnf install -y hsflowd

Cấu hình chi tiết Host sFlow

Toàn bộ thiết lập của Host sFlow nằm trọn trong file /etc/hsflowd.conf. Daemon này hỗ trợ tự tìm Collector bằng DNS-SD (DNS Service Discovery). Dù vậy, trong môi trường production, chỉ định IP tĩnh của Collector vẫn là lựa chọn an toàn và dễ kiểm soát nhất.

1. File cấu hình chuẩn cho máy chủ độc lập

Mở file cấu hình bằng quyền root:

sudo nano /etc/hsflowd.conf

Bạn chỉ cần quan tâm 3 tham số cốt lõi: địa chỉ Collector, tỷ lệ lấy mẫu và chu kỳ gửi số liệu:

sflow {
  # Địa chỉ IP của máy chủ Collector và port nhận (mặc định UDP 6343)
  collector {
    ip = 192.168.10.50
    udpport = 6343
  }

  # Lấy mẫu ngẫu nhiên 1 trong mỗi 400 gói tin
  sampling = 400

  # Cứ 20 giây đẩy thông số CPU, RAM, Disk, Interface counter một lần
  polling = 20
}

2. Cấu hình giám sát máy ảo KVM / Libvirt

Khả năng tự hook vào hypervisor là ưu điểm lớn nhất của hsflowd. Khi tích hợp với libvirt, agent sẽ tự động phát hiện các máy ảo đang chạy, đọc tên VM và theo dõi luôn traffic đi qua từng card mạng ảo (vnetX) mà không cần cài thêm agent bên trong guest OS.

Thêm block libvirt vào /etc/hsflowd.conf:

sflow {
  collector {
    ip = 192.168.10.50
    udpport = 6343
  }

  sampling = 400
  polling = 20

  # Tự động đồng bộ metadata và metric từ hypervisor libvirt
  libvirt {
  }

  # Mở comment nếu bạn dùng Open vSwitch thay cho Linux Bridge
  # ovs {
  # }
}

3. Kích hoạt dịch vụ qua systemd

Áp dụng cấu hình mới và kích hoạt dịch vụ tự chạy khi boot OS:

sudo systemctl daemon-reload
sudo systemctl enable --now hsflowd

# Kiểm tra tiến trình hoạt động
sudo systemctl status hsflowd

Dòng trạng thái báo Active: active (running) màu xanh đồng nghĩa agent đã bắt đầu thu thập số liệu.

Kiểm tra luồng dữ liệu & Dựng Collector thực tế

Sau khi agent hoạt động, bạn cần xác minh gói tin UDP có thực sự rời máy trạm hay không trước khi dựng dashboard theo dõi.

1. Bắt gói tin UDP đầu ra từ server

Chạy lệnh sau ngay trên máy vừa cài hsflowd:

sudo tcpdump -n -i any udp port 6343

Kết quả hiển thị dạng:

14:25:01.120450 IP 192.168.10.15.42150 > 192.168.10.50.6343: UDP, length 1412
14:25:02.135112 IP 192.168.10.15.42150 > 192.168.10.50.6343: UDP, length 1380

Gói tin đẩy ra đều đặn chứng minh sFlow agent đã hoạt động đúng thiết kế.

2. Dựng nhanh sFlow-RT Collector bằng Docker

Đứng tại máy chủ Collector (ở bài viết này là 192.168.10.50), công cụ phân tích thời gian thực tiện nhất là sFlow-RT. Bạn có thể dựng một instance thử nghiệm qua Docker trong 30 giây:

docker run -d --name sflow-collector \
  -p 6343:6343/udp \
  -p 8008:8008 \
  sflow/sflow-rt

Khởi chạy xong, truy cập trình duyệt tại địa chỉ http://192.168.10.50:8008/html/index.html. Web UI của sFlow-RT cung cấp ngay các thông số quan trọng:

  • Top Talkers: Những IP nội bộ tải nặng nhất hoặc các IP ngoại vi đang kéo băng thông bất thường.
  • Top Protocols & Ports: Tỷ lệ phân bổ giữa các dịch vụ (HTTP/S, SSH, DNS, MySQL…).
  • System Metrics: Biểu đồ thời gian thực về tải CPU, tiêu thụ RAM và băng thông chi tiết từng cổng mạng vật lý lẫn card ảo KVM.

3. Ba lưu ý xương máu khi triển khai production

Vận hành sFlow thực tế cần chú ý 3 điểm mấu chốt sau để tránh mất dữ liệu hoặc làm nghẽn hạ tầng:

  • Mở đúng cổng UDP: Cổng 6343 sử dụng giao thức UDP, không phải TCP. Nhiều hệ thống cấu hình xong không thấy số liệu chỉ vì kỹ sư quên mở rule UDP trên firewall host (sudo ufw allow 6343/udp) hoặc quên cấu hình Security Group trên cloud.
  • Chọn sampling rate theo băng thông: Với đường truyền 1 Gbps, sampling = 400 hoặc 500 đem lại độ chính xác cao mà không gây áp lực lên mạng. Nhưng nếu bạn quản lý cổng uplink 10 Gbps hoặc 40 Gbps, hãy nâng con số này lên 1000 hoặc 2500. Việc lấy mẫu quá dày trên đường truyền lớn sẽ gây tràn buffer bộ nhớ của Collector.
  • Tích hợp cảnh báo tự động: sFlow-RT cung cấp REST API chuẩn để xuất metric sang Prometheus. Đẩy tiếp dữ liệu lên Grafana sẽ giúp bạn thiết lập cảnh báo tức thì khi có hiện tượng quét cổng hàng loạt, tấn công từ chối dịch vụ (DDoS) hoặc khi một máy ảo KVM bất ngờ chiếm trọn băng thông cổng ra Internet.
Share: