Network bandwidth monitoring statistics

ตรวจสอบ Bandwidth บน VPS ด้วย vnStat และ iftop

มิถุนายน 2026 · อ่าน 6 นาที

การใช้งาน VPS โดยไม่ติดตาม bandwidth และ traffic อาจทำให้คุณพบกับค่าใช้จ่ายเกินโควต้าแบบไม่ทันตั้งตัว หรือไม่รู้ว่าโปรแกรมใดกินแบนด์วิดธ์มากที่สุด บทความนี้จะพาคุณติดตั้งและใช้งาน 3 เครื่องมือสำคัญ ได้แก่ vnStat, iftop และ nethogs เพื่อดู bandwidth usage รายวัน รายเดือน และ real-time traffic แยกตาม process

ทำไมต้องติดตาม Bandwidth บน VPS?

ผู้ให้บริการ VPS ส่วนใหญ่คิดค่า traffic ตาม bandwidth ที่ใช้จริงต่อเดือน (เช่น 1TB/เดือน) หากใช้เกินโควต้า อาจถูกคิดเงินเพิ่มหรือถูกจำกัดความเร็ว การติดตาม bandwidth จึงมีประโยชน์อย่างยิ่งใน 3 ด้าน

เครื่องมือที่จะติดตั้ง

บทความนี้ใช้ Ubuntu 22.04 / Debian 12 เป็นหลัก คำสั่งส่วนใหญ่ใช้ได้กับ CentOS/AlmaLinux เช่นกัน เพียงแค่เปลี่ยน 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 |
บรรทัด estimated คือการประมาณการใช้งานทั้งเดือน จากอัตราใช้งานปัจจุบัน ใช้วางแผนโควต้าได้ดีมาก

ดู 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

iftop ต้องใช้ root หรือ sudo เพราะต้องเปิด network interface ในโหมด promiscuous เพื่อดักจับ packet

ขั้นที่ 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

ขั้นที่ 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

สรุปการใช้งานแต่ละเครื่องมือ

Checklist สิ่งที่ควรทำหลังติดตั้ง

  1. ติดตั้ง vnStat และ enable daemon ด้วย systemctl enable --now vnstat
  2. ตรวจสอบชื่อ interface ที่ถูกต้องด้วย ip link show
  3. รอ 24 ชั่วโมงแล้วดูสถิติด้วย vnstat -d และ vnstat -m
  4. ทดสอบ iftop ด้วย sudo iftop -i eth0 -n เพื่อดู live connections
  5. ทดสอบ nethogs ด้วย sudo nethogs eth0 เพื่อดู per-process bandwidth
  6. ตั้ง cron job สำหรับ bandwidth alert email
  7. บันทึกโควต้า 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
Tip: vnStat เริ่มเก็บข้อมูลตั้งแต่ install — ต้องรอ 24 ชั่วโมงจึงจะมีสถิติรายวัน และรอถึงสิ้นเดือนถึงจะมีสถิติรายเดือนที่ครบถ้วน ใช้ 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