مفاهیم پایه

مانیتورینگ مصرف ترافیک سرور لینوکس با vnStat، iftop و nethogs

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۷ دقیقه

Gbps ≠ GBvnStatiftopnethogsمفاهیم پایهمانیتورینگ مصرف ترافیکسرور لینوکس با vnStat،iftop و nethogsمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

برای پایش ترافیک سرور لینوکس سه ابزار کافی است: vnStat که در پس‌زمینه مصرف ساعتی، روزانه و ماهانه را ثبت می‌کند، iftop که اتصال‌های فعال و سرعت هرکدام را لحظه‌ای نشان می‌دهد، و nethogs که مصرف شبکه را به تفکیک برنامه نمایش می‌دهد. با یک اسکریپت کوچک و کرون‌جاب می‌توانید هنگام عبور مصرف از سقف تعیین‌شده هشدار بگیرید.

چرا باید ترافیک سرور را پایش کنیم؟

ترافیک سرور مستقیماً به هزینه و پایداری مربوط است. در بسیاری از پلن‌ها، ترافیک خروجی بر اساس گیگابایت محاسبه می‌شود یا سهمیهٔ ماهانه دارد؛ بی‌خبری از مصرف یعنی صورتحساب غافلگیرکننده یا قطع سرویس در میانهٔ ماه. علاوه بر هزینه، تغییر ناگهانی الگوی ترافیک اغلب اولین نشانهٔ یک مشکل است: هک شدن سرور و ارسال اسپم، حملهٔ DDoS، یک ربات خزندهٔ پرمصرف یا باگی در برنامه که داده را بی‌وقفه ارسال می‌کند.

پنل ارائه‌دهندهٔ سرور معمولاً نمودار کلی ترافیک را نشان می‌دهد، اما ابزارهای داخل سرور جزئیات بیشتری می‌دهند: کدام ساعت، کدام اتصال و کدام برنامه. در این راهنما سه ابزار سبک و رایگان را معرفی می‌کنیم که هرکدام به پرسش متفاوتی پاسخ می‌دهند.

کدام ابزار برای کدام پرسش
vnStat
  • چقدر مصرف شده؟
  • آمار ساعتی، روزانه و ماهانه
  • تقریباً بدون بار روی سرور
  • مناسب اجرای دائمی و هشدار
در برابر
iftop و nethogs
  • الان به کجا و توسط کدام برنامه؟
  • نمایش لحظه‌ای اتصال‌ها و پروسه‌ها
  • کمی پردازنده مصرف می‌کنند
  • مناسب عیب‌یابی کوتاه‌مدت
شکل ۱ vnStat را همیشه روشن نگه دارید و iftop و nethogs را هنگام بررسی مشکل اجرا کنید.

پیش از شروع: نام کارت شبکه

همهٔ این ابزارها باید بدانند کدام کارت شبکه را پایش کنند. نام کارت شبکه در سرورهای مختلف متفاوت است؛ ممکن است eth0، ens3، ens18 یا نام دیگری باشد. با این دستور آن را پیدا کنید:

ip -br addr

کارتی که آی‌پی عمومی سرور روی آن است، همان کارتی است که باید پایش شود. کارت lo مربوط به ارتباط داخلی خود سرور است و به ترافیک اینترنت ربطی ندارد. در ادامه فرض می‌کنیم نام کارت eth0 است.

vnStat: آمار بلندمدت و سبک

vnStat سرویسی است که در پس‌زمینه اجرا می‌شود و شمارنده‌های کارت شبکه را که هستهٔ لینوکس از قبل نگه می‌دارد، در فواصل منظم در یک پایگاه دادهٔ کوچک ذخیره می‌کند. چون بسته‌ها را شنود نمی‌کند، مصرف پردازنده و رم آن تقریباً صفر است و می‌توان آن را روی همهٔ سرورها همیشه روشن نگه داشت.

نصب و راه‌اندازی

sudo apt install -y vnstat
sudo systemctl enable --now vnstat
vnstat --iflist

پس از نصب، چند دقیقه صبر کنید تا اولین داده‌ها ثبت شوند. vnStat فقط از لحظهٔ نصب به بعد را می‌شمارد و اطلاعات گذشته را ندارد؛ پس هرچه زودتر آن را روی سرور جدید نصب کنید.

دستورهای پرکاربرد

vnstat            # summary
vnstat -h         # hourly
vnstat -d         # daily
vnstat -m         # monthly
vnstat -l         # live rate
vnstat --oneline  # machine-readable

در خروجی، ستون rx ترافیک دریافتی (ورودی) و ستون tx ترافیک ارسالی (خروجی) سرور است. سطر estimated در گزارش ماهانه، مصرف تا پایان ماه را بر اساس روند فعلی پیش‌بینی می‌کند؛ عددی کاربردی برای برنامه‌ریزی هزینه. تفاوت ورودی و خروجی و این‌که ارائه‌دهندگان کدام را محاسبه می‌کنند، در مقالهٔ ترافیک ورودی و خروجی سرور آمده است.

تنظیم روز شروع ماه

اگر دورهٔ صورتحساب سرور شما از روز اول ماه میلادی شروع نمی‌شود، می‌توانید روز شروع را در فایل /etc/vnstat.conf با گزینهٔ MonthRotate تغییر دهید تا گزارش ماهانه با دورهٔ صورتحساب هم‌خوان باشد. پس از تغییر، سرویس را ری‌استارت کنید.

root@server: ~
$ vnstat -m eth0  /  monthly      month        rx      |     tx      |    total    2026-10      ... GiB   |   ... GiB   |   ... GiB  estimated      ... GiB   |   ... GiB   |   ... GiB$ sudo iftop -i eth0 -n -P203.0.113.5:443   =>  198.51.100.7:51544   ...Kb  ...Kb  ...Kb$ 
شکل ۲ سطر estimated مصرف تا پایان ماه را پیش‌بینی می‌کند؛ iftop اتصال‌های پرمصرف را نشان می‌دهد.

iftop: چه کسی الان ترافیک مصرف می‌کند؟

vnStat می‌گوید چقدر مصرف شده است، اما نمی‌گوید به کجا. وقتی ترافیک ناگهان بالا رفته است، iftop اتصال‌های فعال را با سرعت لحظه‌ای هرکدام نمایش می‌دهد:

sudo apt install -y iftop
sudo iftop -i eth0 -n -P

گزینهٔ -n نام دامنه‌ها را جست‌وجو نمی‌کند (سریع‌تر است) و -P شمارهٔ پورت‌ها را نشان می‌دهد. در صفحهٔ iftop، هر سطر یک اتصال بین سرور و یک آی‌پی دیگر است و سه ستون سمت راست میانگین سرعت در بازه‌های کوتاه، متوسط و طولانی‌تر را نشان می‌دهند. کلیدهای مفید داخل برنامه:

  • t تغییر حالت نمایش (فقط ارسال، فقط دریافت یا هر دو)؛
  • p نمایش یا پنهان کردن پورت‌ها؛
  • s و d پنهان کردن مبدأ یا مقصد برای تجمیع؛
  • q خروج.

اگر سایت پشت CDN است، بیشتر اتصال‌ها به آی‌پی‌های CDN است و این طبیعی است. اگر اتصال پرمصرفی به آی‌پی ناشناس روی پورت غیرعادی می‌بینید، بررسی بیشتری لازم است.

nethogs: کدام برنامه مصرف می‌کند؟

گاهی می‌دانیم ترافیک بالاست اما نمی‌دانیم کدام برنامه مسئول است: وب‌سرور، اسکریپت بکاپ، کانتینر داکر یا یک پروسهٔ ناشناس. nethogs مصرف را به تفکیک پروسه نشان می‌دهد:

sudo apt install -y nethogs
sudo nethogs eth0

ستون PROGRAM مسیر یا نام برنامه و ستون‌های SENT و RECEIVED سرعت ارسال و دریافت آن را نشان می‌دهند. با کلید m واحد نمایش را بین سرعت و مجموع حجم عوض کنید. برای کانتینرهای داکر، ممکن است فقط پروسهٔ docker-proxy یا نام برنامهٔ داخل کانتینر را ببینید؛ با docker stats مصرف شبکهٔ هر کانتینر را جداگانه بررسی کنید.

هشدار خودکار با یک اسکریپت ساده

پایش دستی کافی نیست؛ باید پیش از عبور از سقف باخبر شوید. اسکریپت زیر مصرف خروجی ماه جاری را از vnStat می‌خواند و اگر از حد تعیین‌شده بیشتر شد، پیام می‌دهد:

#!/bin/bash
LIMIT_GB=500
TX=$(vnstat -i eth0 --oneline b | cut -d';' -f10)
TX_GB=$((TX / 1024 / 1024 / 1024))
if [ "$TX_GB" -ge "$LIMIT_GB" ]; then
  echo "Monthly TX ${TX_GB}GB >= ${LIMIT_GB}GB on $(hostname)"
fi

فیلد دهم خروجی --oneline b مقدار ارسالی ماه جاری بر حسب بایت است. این اسکریپت را در /usr/local/bin/traffic-alert.sh ذخیره کنید، قابل اجرا کنید و با یک کرون‌جاب روزانه اجرا کنید. به‌جای echo می‌توانید پیام را به ربات تلگرام یا ایمیل خودتان بفرستید. ساخت کرون‌جاب را در راهنمای کرون‌جاب لینوکس توضیح داده‌ایم.

وقتی ترافیک ناگهان بالا رفت
  1. زمان شروع

    vnstat -h نشان می‌دهد افزایش از چه ساعتی آغاز شده است.

  2. مقصد اتصال‌ها

    iftop آی‌پی‌ها و پورت‌های پرمصرف را مشخص می‌کند.

  3. برنامهٔ مسئول

    nethogs یا docker stats پروسه یا کانتینر را پیدا می‌کند.

  4. لاگ وب‌سرور

    درخواست‌های پرتکرار و ربات‌های پرمصرف.

  5. اقدام

    محدودسازی، CDN یا بررسی امنیتی در صورت رفتار مشکوک.

شکل ۳ این پنج قدم معمولاً در چند دقیقه علت افزایش ترافیک را مشخص می‌کند.

ابزارهای گرافیکی و داشبورد

اگر نمودار را به جدول ترجیح می‌دهید، vnStat ابزاری به نام vnstati دارد که از آمار، تصویر PNG می‌سازد. برای پایش کامل‌تر سرور (CPU، رم، دیسک و شبکه در یک داشبورد)، ابزارهایی مثل Netdata یا Prometheus با Grafana مناسب‌اند. برای پایش در دسترس بودن سایت و دریافت هشدار قطعی هم Uptime Kuma گزینهٔ ساده‌ای است. پایش مصرف پردازنده و رم را هم در بررسی مصرف CPU و رم ببینید.

مقایسه با آمار پنل ارائه‌دهنده

ممکن است عدد vnStat با عددی که پنل ارائه‌دهنده نشان می‌دهد کمی متفاوت باشد. دلایل رایج: ارائه‌دهنده ترافیک را در سوئیچ یا لایهٔ مجازی‌سازی می‌شمارد که سربار برخی پروتکل‌ها را هم شامل می‌شود، دورهٔ محاسبه متفاوت است، یا واحدها فرق دارند (گیگابایت بر پایهٔ ۱۰۰۰ در برابر گیبی‌بایت بر پایهٔ ۱۰۲۴). vnStat به‌طور پیش‌فرض واحدهای پایهٔ ۱۰۲۴ (GiB) را نشان می‌دهد. مبنای صورتحساب همیشه عدد ارائه‌دهنده است؛ vnStat را برای روندها و هشدار زودهنگام به کار ببرید.

در سرور ابری ایران کلودیفای فقط ترافیک دانلود محاسبه می‌شود و هزینه هر چند دقیقه یک بار از کیف پول کسر می‌شود؛ جزئیات را در محاسبهٔ ترافیک سرور ایران ببینید.

وقتی ترافیک غیرعادی دیدید

  1. با vnstat -h ببینید افزایش از چه ساعتی شروع شده است.
  2. با iftop اتصال‌های پرمصرف و آی‌پی مقصد را پیدا کنید.
  3. با nethogs برنامهٔ مسئول را شناسایی کنید.
  4. لاگ وب‌سرور را برای درخواست‌های پرتکرار بررسی کنید.
  5. اگر برنامهٔ ناشناس یا رفتار مشکوک دیدید، نشانه‌های هک شدن سرور را دنبال کنید.

با این سه ابزار، تقریباً به هر پرسشی دربارهٔ ترافیک سرور پاسخ می‌دهید: چقدر، به کجا و توسط چه کسی.

سؤالات متداول

چرا vnStat هیچ داده‌ای نشان نمی‌دهد؟

vnStat فقط از زمان نصب به بعد داده جمع می‌کند و چند دقیقه طول می‌کشد تا اولین آمار ثبت شود. همچنین بررسی کنید سرویس با systemctl status vnstat فعال است و کارت شبکهٔ درست را پایش می‌کند.

آیا iftop و nethogs بار زیادی روی سرور می‌گذارند؟

این دو ابزار بسته‌ها را لحظه‌ای بررسی می‌کنند و کمی پردازنده مصرف می‌کنند؛ برای عیب‌یابی کوتاه‌مدت مناسب‌اند، نه برای اجرای دائمی. برای پایش همیشگی از vnStat استفاده کنید.

چرا عدد vnStat با پنل ارائه‌دهنده یکی نیست؟

روش شمارش، دورهٔ محاسبه و واحدها ممکن است متفاوت باشد؛ vnStat به‌طور پیش‌فرض از واحد پایهٔ ۱۰۲۴ استفاده می‌کند. مبنای صورتحساب عدد ارائه‌دهنده است.

ترافیک هر کانتینر داکر را چطور ببینم؟

دستور docker stats ستون NET I/O را برای هر کانتینر نشان می‌دهد که مجموع ورودی و خروجی شبکهٔ آن کانتینر از زمان اجراست.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.