ตรวจสอบ Bandwidth บน VPS ด้วย vnStat และ iftop
การใช้งาน VPS โดยไม่ติดตาม bandwidth และ traffic อาจทำให้คุณพบกับค่าใช้จ่ายเกินโควต้าแบบไม่ทันตั้งตัว หรือไม่รู้ว่าโปรแกรมใดกินแบนด์วิดธ์มากที่สุด บทความนี้จะพาคุณติดตั้งและใช้งาน 3 เครื่องมือสำคัญ ได้แก่ vnStat, iftop และ nethogs เพื่อดู bandwidth usage รายวัน รายเดือน และ real-time traffic แยกตาม process
ทำไมต้องติดตาม Bandwidth บน VPS?
ผู้ให้บริการ VPS ส่วนใหญ่คิดค่า traffic ตาม bandwidth ที่ใช้จริงต่อเดือน (เช่น 1TB/เดือน) หากใช้เกินโควต้า อาจถูกคิดเงินเพิ่มหรือถูกจำกัดความเร็ว การติดตาม bandwidth จึงมีประโยชน์อย่างยิ่งใน 3 ด้าน
- ควบคุมค่าใช้จ่าย — รู้ล่วงหน้าว่าจะใช้เกินแพ็กเกจหรือไม่
- ตรวจสอบความผิดปกติ — traffic พุ่งสูงผิดปกติอาจบ่งบอกว่าถูก DDoS หรือมีมัลแวร์
- วิเคราะห์ประสิทธิภาพ — รู้ว่า service ใดใช้ network มากที่สุดเพื่อ optimize ได้ถูกจุด
เครื่องมือที่จะติดตั้ง
- vnStat — บันทึกสถิติ bandwidth รายชั่วโมง รายวัน รายเดือน และรายปี (lightweight ทำงานเป็น daemon)
- iftop — แสดง real-time network traffic แบบ top-like interface แยกตาม connection
- nethogs — แสดง real-time bandwidth แยกตาม process/โปรแกรม
apt เป็น dnfขั้นที่ 1: ติดตั้ง vnStat
vnStat เป็นเครื่องมือบันทึก bandwidth แบบ passive ที่อ่านข้อมูลจาก kernel network counters โดยตรง จึงใช้ทรัพยากรน้อยมากและทำงานได้ตลอด 24 ชั่วโมง
ติดตั้งบน Ubuntu/Debian
sudo apt update
sudo apt install vnstat -y
ติดตั้งบน CentOS/AlmaLinux
sudo dnf install epel-release -y
sudo dnf install vnstat -y
เริ่มใช้งาน vnStat
หลังติดตั้ง ให้ตรวจสอบชื่อ network interface ก่อน
ip link show
จะเห็น interface ชื่อเช่น eth0, ens3, enp1s0 เป็นต้น จากนั้นเปิดใช้งาน vnStat daemon
sudo systemctl enable vnstat
sudo systemctl start vnstat
sudo systemctl status vnstat
vnStat จะเริ่มเก็บข้อมูล อาจต้องรอ 5–10 นาทีก่อนจะมีสถิติให้ดู ลอง query ด้วยคำสั่ง
# ดูสถิติ interface ทั้งหมด
vnstat
# ดูสถิติแบบรายชั่วโมง (24 ชั่วโมงล่าสุด)
vnstat -h
# ดูสถิติรายวัน
vnstat -d
# ดูสถิติรายเดือน
vnstat -m
# ดูสถิติรายปี
vnstat -y
# ระบุ interface (เช่น eth0)
vnstat -i eth0 -m
ตัวอย่าง output ของ vnStat รายเดือน
eth0 / monthly
month rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
2026-04 12.45 GiB | 38.21 GiB | 50.66 GiB | 159.36 kbit/s
2026-05 18.73 GiB | 51.04 GiB | 69.77 GiB | 219.52 kbit/s
2026-06 4.12 GiB | 11.87 GiB | 15.99 GiB | 204.71 kbit/s
------------------------+-------------+-------------+---------------
estimated 20.6 GiB | 59.4 GiB | 80 GiB |
ดู Traffic แบบ Live ด้วย vnStat
# live traffic monitor อัพเดตทุก 2 วินาที
vnstat -l -i eth0
# live แบบ short format
vnstat -l
ขั้นที่ 2: ติดตั้งและใช้งาน iftop
iftop แสดง real-time network traffic โดยแยกตาม source/destination IP และ port ทำให้รู้ว่าใครเชื่อมต่อมายัง VPS และใช้ bandwidth เท่าใด
ติดตั้ง iftop
# Ubuntu/Debian
sudo apt install iftop -y
# CentOS/AlmaLinux
sudo dnf install iftop -y
ใช้งาน iftop
# รันบน interface หลัก (ต้องใช้ sudo)
sudo iftop -i eth0
# แสดง port number แทน service name
sudo iftop -i eth0 -P
# แสดงเป็น IP address แทน hostname (เร็วกว่า ไม่ต้อง DNS lookup)
sudo iftop -i eth0 -n
# กรองเฉพาะ traffic จาก/ไป port 80 และ 443
sudo iftop -i eth0 -f "port 80 or port 443"
Shortcut Keys ภายใน iftop
- p — toggle แสดง/ซ่อน port number
- n — toggle DNS lookup (ปิดเพื่อความเร็ว)
- s — toggle แสดง source host
- d — toggle แสดง destination host
- t — เปลี่ยนรูปแบบ display (2-line / 1-line / bar)
- q — ออกจากโปรแกรม
ขั้นที่ 3: ติดตั้งและใช้งาน nethogs
nethogs แตกต่างจาก iftop ตรงที่แสดง bandwidth usage แยกตาม process ทำให้รู้ได้ทันทีว่าโปรแกรมใด (nginx, mysql, sshd, ฯลฯ) เป็นตัวกินแบนด์วิดธ์สูงสุด
ติดตั้ง nethogs
# Ubuntu/Debian
sudo apt install nethogs -y
# CentOS/AlmaLinux
sudo dnf install nethogs -y
ใช้งาน nethogs
# รัน nethogs บน interface หลัก
sudo nethogs eth0
# รันบนทุก interface
sudo nethogs
# อัพเดตทุก 1 วินาที (default คือ 1)
sudo nethogs -d 1 eth0
# แสดงหน่วยเป็น KB/s แทน KB/s ปกติ
sudo nethogs -v 3 eth0
ตัวอย่าง output ของ nethogs
NetHogs version 0.8.7
PID USER PROGRAM DEV SENT RECEIVED
1823 www-data /usr/sbin/nginx eth0 45.234 182.109 KB/sec
2041 mysql /usr/sbin/mysqld eth0 2.341 8.023 KB/sec
892 root sshd: admin@pts/0 eth0 0.123 0.456 KB/sec
? root unknown TCP 0.000 0.000 KB/sec
TOTAL 47.698 190.588 KB/sec
Shortcut Keys ภายใน nethogs
- m — เปลี่ยนหน่วย (KB/s → KB → B → MB)
- r — เรียงตาม received traffic
- s — เรียงตาม sent traffic
- q — ออกจากโปรแกรม
ขั้นที่ 4: ตั้ง Alert เมื่อ Bandwidth ใกล้เต็มโควต้า
สร้าง script เพื่อส่ง alert เมื่อใช้ bandwidth เกินกว่าที่กำหนด เช่น เกิน 80% ของโควต้า 1TB/เดือน
#!/bin/bash
# /usr/local/bin/bw-check.sh
LIMIT_GB=800 # alert เมื่อใช้เกิน 800 GB (80% ของ 1TB)
INTERFACE="eth0"
EMAIL="[email protected]"
# ดึงค่า total traffic เดือนนี้จาก vnStat (หน่วย MiB)
CURRENT_MIB=$(vnstat -i $INTERFACE --oneline | awk -F';' '{print $11}' | sed 's/ MiB//')
CURRENT_GB=$(echo "scale=2; $CURRENT_MIB / 1024" | bc)
if (( $(echo "$CURRENT_GB > $LIMIT_GB" | bc -l) )); then
echo "WARNING: Bandwidth used ${CURRENT_GB} GB, limit ${LIMIT_GB} GB" | \
mail -s "[VPS Alert] Bandwidth Warning" $EMAIL
fi
# ให้สิทธิ์รันได้
sudo chmod +x /usr/local/bin/bw-check.sh
# เพิ่มใน crontab ให้รันทุกวัน เวลา 8:00 น.
(crontab -l 2>/dev/null; echo "0 8 * * * /usr/local/bin/bw-check.sh") | crontab -
mailutils ติดตั้งไว้ก่อน (sudo apt install mailutils -y) และตั้งค่า MTA หรือ SMTP relay เพื่อส่ง email ออกขั้นที่ 5: ดู Traffic สรุปด้วย vnStat แบบ Export
vnStat รองรับการ export ข้อมูลเป็น JSON เพื่อนำไปแสดงในระบบ monitoring อื่นได้
# export ข้อมูลทั้งหมดเป็น JSON
vnstat --json
# export เฉพาะ interface
vnstat -i eth0 --json
# export ข้อมูลรายเดือน
vnstat -i eth0 --json m
# ดู top 10 วันที่มี traffic สูงสุด
vnstat --top10
สรุปและ Checklist การใช้งาน
เครื่องมือทั้ง 3 ตัวครอบคลุมการ monitor bandwidth ได้ครบทุกมิติ ตั้งแต่ภาพรวมระยะยาวไปจนถึง real-time per-process
- vnStat — ดูสถิติรายวัน/เดือน/ปี และวางแผนโควต้า ทำงานเป็น background daemon
- iftop — ดู real-time traffic แยกตาม IP/port เหมาะสำหรับตรวจหาการเชื่อมต่อผิดปกติ
- nethogs — ดู real-time bandwidth แยกตาม process เหมาะสำหรับหาว่าโปรแกรมใดกินแบนด์วิดธ์
Checklist สิ่งที่ควรทำหลังติดตั้ง
- ติดตั้ง vnStat และ enable daemon ด้วย
systemctl enable --now vnstat - ตรวจสอบชื่อ interface ที่ถูกต้องด้วย
ip link show - รอ 24 ชั่วโมงแล้วดูสถิติด้วย
vnstat -dและvnstat -m - ทดสอบ iftop ด้วย
sudo iftop -i eth0 -nเพื่อดู live connections - ทดสอบ nethogs ด้วย
sudo nethogs eth0เพื่อดู per-process bandwidth - ตั้ง cron job สำหรับ bandwidth alert email
- บันทึกโควต้า bandwidth ของแพ็กเกจ VPS ที่ใช้ไว้เปรียบเทียบกับ estimated ใน vnStat
การติดตาม bandwidth อย่างสม่ำเสมอช่วยให้บริหาร VPS ได้อย่างมีประสิทธิภาพ ประหยัดค่าใช้จ่าย และตรวจจับปัญหาด้าน security ได้ทันท่วงที ลองนำเครื่องมือเหล่านี้ไปติดตั้งบน VPS ของคุณได้เลยวันนี้
ตรวจสอบว่าเครื่องมือทำงานถูกต้อง
# ตรวจสอบ vnStat daemon
systemctl status vnstat
# ดูสถิติเดือนนี้
vnstat -m
# ดู live traffic แบบ real-time
vnstat -l -i eth0
# ตรวจสอบ process ที่กินแบนด์วิดธ์มากที่สุด
sudo nethogs eth0
# ดู connection ปัจจุบันแบบ real-time
sudo iftop -i eth0 -n
vnstat -h ดูสถิติรายชั่วโมงระหว่างนั้น
แก้ปัญหาที่พบบ่อย
Error: "vnstat: No data available" หรือ database ว่างเปล่า
vnStat daemon ยังไม่รัน หรือติดตั้งแล้วแต่ยังไม่ได้ enable:
# ตรวจสอบและ start daemon
systemctl status vnstat
systemctl enable --now vnstat
# ตรวจสอบ interface ที่ monitor
vnstat --iflist
# ใช้ชื่อ interface ที่แสดงตรงนี้
# รอ 5-10 นาทีแล้วลองดูอีกครั้ง
vnstat -h
Error: iftop แสดงข้อมูลผิดพลาดหรือ interface ไม่ถูก
ต้องระบุ interface ที่ถูกต้อง ตรวจด้วย ip link show ก่อน:
# ดู interface ทั้งหมด
ip link show
# บน VPS บางเจ้า interface ไม่ใช่ eth0
sudo iftop -i ens3 # หรือ enp1s0, ens18 ตามที่เห็น
sudo nethogs ens3
Error: nethogs แสดง "unknown TCP" สำหรับ traffic จำนวนมาก
"unknown TCP" คือ traffic ที่ nethogs ไม่สามารถ map กับ process ใดได้ มักเกิดจาก TIME_WAIT connections หรือ kernel-level traffic:
# ดู established connections แทน
ss -tnp | head -20
# ใช้ iftop ดู IP ที่มี traffic สูง
sudo iftop -i eth0 -n -P
Error: bandwidth alert script ไม่ส่ง email
ต้องมี MTA หรือ SMTP relay ตั้งค่าไว้ก่อน หรือใช้ curl ส่ง webhook แทน:
# ทดสอบ mailutils
echo "test" | mail -s "test" [email protected]
# ถ้าไม่ได้ ใช้ curl ส่ง Telegram notification แทน
# แก้ script ให้ใช้:
curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" \
-d "chat_id=CHAT_ID&text=Bandwidth used ${CURRENT_GB}GB"
Error: vnStat แสดงตัวเลขผิดกับที่ provider บอก
vnStat นับ traffic ที่ network interface บน OS ซึ่งอาจต่างจากที่ provider วัดเพราะ overhead ของ network layer ต่างกัน ให้ถือว่า vnStat เป็น approximation และรักษา buffer ไว้ 10-15% จากโควต้าจริง:
# ดูสถิติ cumulative
vnstat --json | python3 -c "import sys,json; d=json.load(sys.stdin); [print(m['date']['month'],m['rx']['bytes']//1073741824,'GB RX') for m in d['interfaces'][0]['traffic']['months']]"
คำถามที่พบบ่อย
vnStat vs netdata vs Prometheus เลือกตัวไหน?
vnStat เบาที่สุด เหมาะสำหรับดูสถิติ bandwidth รายวัน/เดือนแบบ simple ไม่มี web UI แต่ใช้ resource แทบไม่มีเลย netdata มี web dashboard real-time แต่กิน RAM ~100-200MB เหมาะถ้าต้องการ visual monitoring Prometheus+Grafana เหมาะ production ที่ต้องการ alerting และ long-term metrics แต่ซับซ้อนกว่า
รู้ได้อย่างไรว่า traffic ที่สูงผิดปกติมาจาก DDoS หรือ traffic ปกติ?
ใช้ iftop ดู IP ที่ส่ง traffic มาก ถ้าเห็น IP เดียวหรือ subnet เดียวส่งมาจำนวนมาก น่าจะเป็น DDoS หรือ scanning ส่วน traffic ปกติจะกระจาย IP หลากหลาย ใช้ grep "BLOCK" /var/log/ufw.log | awk '{print $12}' | sort | uniq -c | sort -rn | head -20 เพื่อดู IP ที่ถูก block บ่อยที่สุด
จะเซ็ต alert แบบ real-time เมื่อ bandwidth พุ่งได้ไหม?
vnStat ไม่รองรับ real-time alert โดยตรง แต่สามารถใช้ script poll ทุก 5 นาทีผ่าน cron: อ่านค่าจาก vnstat -l --oneline แล้วส่ง alert ถ้าเกิน threshold ถ้าต้องการ real-time จริงๆ ให้ใช้ netdata ที่มี alerting engine built-in