Як я можу отримати поточну статистику пропускної здатності мережевого інтерфейсу на Linux / UNIX? [зачинено]


94

Такі інструменти, як MRTG, надають графіки пропускної здатності / пропускної здатності мережі для поточного використання мережі на конкретних інтерфейсах, таких як eth0. Як я можу повернути цю інформацію в командному рядку на Linux / UNIX?

Бажано, щоб це було без встановлення будь-чого іншого, крім того, що доступне в системі як стандарт.


Подумайте про зміну вашої відповіді з урахуванням деталей iftop.
Грей

Шкода, що це питання було закрито, тому що я хотів додати, bmonщо є корисним. github.com/tgraf/bmon#screenshots
Даніель Ф

Відповіді:


18

Ви можете проаналізувати результати ifconfig


Це передбачає доступ до кореневого доступу
Лайонел

20
(зазвичай) Вам не потрібно мати root, щоб запустити це ...
confiq

3
Поганий однокласний лайнер, який робить саме це (і змушує мене while true; do export `ifconfig p1p1 | grep packets | awk '{print $5, $3}' | xargs echo | sed -E -e "s/([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/rx=\1 rxp=\2 tx=\3 txp=\4/"` ; echo $rx $rxp $tx $txp `cat /tmp/netstat` | awk '{print $1-$5, $2-$6, $3-$7, $4-$8}';echo $rx $rxp $tx $txp > /tmp/netstat; sleep 5 ;done
тужити за

4
Синтаксичний аналіз виводу ifconfig схильний до помилок, наприклад, вищевказаний -bash: export: однолінійний призводить до перевитрат: 0 ': не є дійсним ідентифікатором' для мене на RHEL6. Розбір /sys/class/net/$dev/statistics(див. Скрипт perl у відповіді @ephemient) безпосередньо працює набагато краще.
Ніколай

1
не повинна бути прийнятою відповіддю, оскільки вона схильна до помилок і не є практичною. є комунальні послуги, які роблять роботу набагато краще. Прокрутіть униз, щоб дізнатись.
Ерік

156

iftop does for network usage what top(1) does for CPU usage- http://www.ex-parrot.com/~pdw/iftop/

Я не знаю, наскільки стандартним є iftop, але мені вдалося встановити його yum install iftopна Fedora.


13
iftopможе бути встановлений на чистій Ubuntu встановити легко , а також: apt-get install iftop.
Том Мартенал

1
та на Arch Linux зpacman -S iftop
Бенджамін Кайзер

3
зітхання Ну, мабуть, це означає, що я знову відкладаю навчання для синтаксичного аналізу tcpdumpвиводу. Дякую iftopі wiresharkза те, що дозволили мені бути такою ледачою.
Парфіанський постріл

1
Зверніть увагу, що питання задає статистику для кожного інтерфейсу, але iftopє більш детальним та дає статистику щодо з'єднання.
Йоахім Брайтнер,

1
Для тих, хто не має прав адміністратора, зверніть увагу, що iftopпотрібна установка (ви навіть не зможете створити її без libpcapвстановлення), а на домашній сторінці вказано, що її потрібно запускати root.
Микола

109

Отримав сар? Ймовірно, так, якщо ви використовуєте RHEL / CentOS.

Немає потреби в приватних файлах, відвертих двійкових файлах, хакерських сценаріях, libpcap тощо. Виграйте.

$ sar -n DEV 1 3
Linux 2.6.18-194.el5 (localhost.localdomain)    10/27/2010

02:40:56 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:57 PM      eth0  10700.00   1705.05 15860765.66 124250.51      0.00      0.00      0.00
02:40:57 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:57 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:58 PM      eth0   8051.00   1438.00 11849206.00 105356.00      0.00      0.00      0.00
02:40:58 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:58 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:59 PM      eth0   6093.00   1135.00 8970988.00  82942.00      0.00      0.00      0.00
02:40:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0   8273.24   1425.08 12214833.44 104115.72      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

11
Для кБ / с передачі та прийому: sar -n DEV 1 3 | grep $ IFACE | хвіст -n1 | awk '{print $ 5, $ 6}'
Лайонел

2
@ Лайонел - незначна ніта: ви мали на увазі Отримати та Передати в такому порядку. :-)
lacinato

Sar - прекрасний старий інструмент. Це ще один двійковий чи чотири різноманітних cronjobs для збору, правда :)
XTL

1
Запуск Centos7, без сар.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... швидкий пошук у Google виявить багато інформації.
Майк S

44

Я давно написав цей німий сценарій, він не залежить ні від чого, крім Perl та Linux≥2,6:

#!/usr/bin/perl

use strict;
use warnings;

use POSIX qw(strftime);
use Time::HiRes qw(gettimeofday usleep);

my $dev = @ARGV ? shift : 'eth0';
my $dir = "/sys/class/net/$dev/statistics";
my %stats = do {
    opendir +(my $dh), $dir;
    local @_ = readdir $dh;
    closedir $dh;
    map +($_, []), grep !/^\.\.?$/, @_;
};

if (-t STDOUT) {
    while (1) {
        print "\033[H\033[J", run();
        my ($time, $us) = gettimeofday();
        my ($sec, $min, $hour) = localtime $time;
        {
            local $| = 1;
            printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s',
            $dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s)
        }
        usleep($us ? 1000000 - $us : 1000000);
    }
}
else {print run()}

sub run {
    map {
        chomp (my ($stat) = slurp("$dir/$_"));
        my $line = sprintf '%-31.31s:%16.16s', $_, $stat;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0]) / 1)
            if @{$stats{$_}} > 0;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4]) / 5)
            if @{$stats{$_}} > 4;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14]) / 15)
            if @{$stats{$_}} > 14;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59]) / 60)
            if @{$stats{$_}} > 59;
        unshift @{$stats{$_}}, $stat;
        pop @{$stats{$_}} if @{$stats{$_}} > 60;
        "$line\n";
    } sort keys %stats;
}

sub slurp {
    local @ARGV = @_;
    local @_ = <>;
    @_;
}

Він просто читає з /sys/class/net/$dev/statisticsкожної секунди і друкує поточні цифри та середню швидкість змін:

$ ./net_stats.pl eth0
rx_bytes                       :  74457040115259 4369093 4797875 4206554 364088
rx_packets                     :     91215713193   23120   23502   23234  17616
...
tx_bytes                       :  90798990376725 8117924 7047762 7472650 319330
tx_packets                     :     93139479736   23401   22953   23216  23171
...
eth0                           : 15:22:09.002216      1s      5s     15s     60s

                                ^ current reading  ^-------- averages ---------^

5
Це дивовижний маленький сценарій, дякую людино!
Gui13

1
Мені довелося замінити "8s" і "8.8s" на "16s" і "16.16s", щоб цифри відповідали.
Ніколай

Якщо я добре розумію, щоб зробити кінцевий результат точним (наприклад, в реальній статистиці), він повинен запускатись щосекунди /proc/net/devабо якимось чином обчислювати дані на базову за секунду?
Ілля Ростовцев

31

nload - чудовий інструмент для моніторингу пропускної здатності в режимі реального часу, який легко встановлюється в Ubuntu або Debian за допомогою sudo apt-get install nload.

Device eth0 [10.10.10.5] (1/2):
=====================================================================================
Incoming:


                               .         ...|    
                               #         ####|   
                           .. |#|  ...   #####.         ..          Curr: 2.07 MBit/s
                          ###.###  #### #######|.     . ##      |   Avg: 1.41 MBit/s
                         ########|#########################.   ###  Min: 1.12 kBit/s
             ........    ###################################  .###  Max: 4.49 MBit/s
           .##########. |###################################|#####  Ttl: 1.94 GByte
Outgoing:
            ##########  ###########    ###########################
            ##########  ###########    ###########################
            ##########. ###########   .###########################
            ########### ###########  #############################
            ########### ###########..#############################
           ############ ##########################################
           ############ ##########################################
           ############ ##########################################  Curr: 63.88 MBit/s
           ############ ##########################################  Avg: 32.04 MBit/s
           ############ ##########################################  Min: 0.00 Bit/s
           ############ ##########################################  Max: 93.23 MBit/s
         ############## ##########################################  Ttl: 2.49 GByte

Ще одним чудовим інструментом є iftop , який також легко отримати:

             191Mb      381Mb                 572Mb       763Mb             954Mb     
└────────────┴──────────┴─────────────────────┴───────────┴──────────────────────
box4.local            => box-2.local                      91.0Mb  27.0Mb  15.1Mb
                      <=                                  1.59Mb   761kb   452kb
box4.local            => box.local                         560b   26.8kb  27.7kb
                      <=                                   880b   31.3kb  32.1kb
box4.local            => userify.com                         0b   11.4kb  8.01kb
                      <=                                  1.17kb  2.39kb  1.75kb
box4.local            => b.resolvers.Level3.net              0b     58b    168b
                      <=                                     0b     83b    288b
box4.local            => stackoverflow.com                   0b     42b     21b
                      <=                                     0b     42b     21b
box4.local            => 224.0.0.251                         0b      0b    179b
                      <=                                     0b      0b      0b
224.0.0.251           => box-2.local                         0b      0b      0b
                      <=                                     0b      0b     36b
224.0.0.251           => box.local                           0b      0b      0b
                      <=                                     0b      0b     35b


─────────────────────────────────────────────────────────────────────────────────
TX:           cum:   37.9MB   peak:   91.0Mb     rates:   91.0Mb  27.1Mb  15.2Mb
RX:                  1.19MB           1.89Mb              1.59Mb   795kb   486kb
TOTAL:               39.1MB           92.6Mb              92.6Mb  27.9Mb  15.6Mb

Не забувайте про класичні та потужні утиліти sar та netstat на старих * nix!


2
це повинна бути прийнята відповідь
Ерік,

28

Ви можете проаналізувати / proc / net / dev .


3
/ proc існує не в кожному UNIX.
Мехрдад Афшарі,

31
Правда, тільки що припустили через тег Linux, що OP цікавиться лише Linux.
codelogic

такого файлу на ядрі 3.17 немає
Томас Томечек

4
Здається, це еквівалентно синтаксичному аналізу, /sys/class/net/$dev/statisticsяк у сценарії ефемієнта.
Ніколай

25
  • dstat - Поєднує дані vmstat, iostat, ifstat, netstat та багато іншого
  • iftop - Дивовижна утиліта пропускної здатності мережі для аналізу того, що насправді відбувається у вашій еті
  • netio - Вимірює чисту пропускну здатність мережі через TCP / IP
  • inq- Утиліта для усунення несправностей CLI, яка відображає інформацію про сховище, як правило, Symmetrix. За замовчуванням INQ повертає ім'я пристрою, ідентифікатор Symmetrix, Symmetrix LUN та ємність.
  • send_arp - Розсилає передачу arp на вказаному мережевому пристрої (за замовчуванням eth0), повідомляючи про старе та нове відображення IP-адреси на MAC-адресу.
  • EtherApe- це графічний мережевий монітор для Unix за зразком etherman. Завдяки режиму зв'язку, режиму IP і TCP, він відображає мережеву активність графічно.
  • iptraf - Монітор IP-трафіку, який відображає інформацію про IP-трафік, що проходить через вашу мережу.

Детальніше: http://felipeferreira.net/?p=1194


1
Дякуємо за простий список та те, що це в основному утиліти за замовчуванням. Зокрема, я зміг отримати дуже приємну пікову пропускну здатність з iftop, не встановлюючи нічого.
Фоліовізія

16

Я отримав ще один швидкий скрипт для цього:

#!/bin/bash
IF=$1
if [ -z "$IF" ]; then
        IF=`ls -1 /sys/class/net/ | head -1`
fi
RXPREV=-1
TXPREV=-1
echo "Listening $IF..."
while [ 1 == 1 ] ; do
        RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
        TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
        if [ $RXPREV -ne -1 ] ; then
                let BWRX=$RX-$RXPREV
                let BWTX=$TX-$TXPREV
                echo "Received: $BWRX B/s    Sent: $BWTX B/s"
        fi
        RXPREV=$RX
        TXPREV=$TX
        sleep 1
done

Враховуючи це sleep 1 насправді триватиме рівно одну секунду, що не відповідає дійсності, але досить добре для грубої оцінки пропускної здатності.

Дякую @ephemient за /sys/class/net/<interface>! :)


3
Якщо ви хочете відформатувати свої номери як МБ / с, поміняйте рядок "echo" таким: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; друк "Отримано" rx "Мб / с, надіслано" tx "Мб / с"} '
Майкл Бьоклінг

1
@BuddyCasino Я впевнений, що ти міг зробити це безпосередньо в let BWRX=($RX-$RXPREV)/1024(хоча мені зараз немає чого перевірити)
Matthieu

Здається, ти маєш рацію, це чомусь не спрацювало, коли я спробував зробити це таким чином, тому я погодився на awk, але, мабуть, це була просто друкарська помилка.
Michael Böckling

15

Окрім iftop та iptraf, також перевірте:

  • bwm-ng (Монітор пропускної здатності наступного покоління)

та / або

  • cbm (Вимірювач смуги пропускання кольорів)

посилання: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


2
bwm-ng гірські породи: для запуску йому не потрібен спеціальний дозвіл.
Rudy Matela

Я використовую його вже роками, і в більшості випадків я вважаю його інтерфейс набагато зрозумілішим, ніж, наприклад, iftop.
Доктор Ян-Філіп Герке,

6

Якщо ви хочете просто отримати значення, ви можете використовувати простий вкладиш оболонки наступним чином:

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS

Він покаже вам середнє значення "отриманих байтів в секунду" протягом 10 секунд (ви можете змінити період, змінивши S=10параметр, і ви можете виміряти передану BPS замість отриманої BPS, використовуючи tx_bytesзамість rx_bytes). Не забудьте змінити eth0мережевий пристрій, який ви хочете контролювати.

Звичайно, ви не обмежуєтесь відображенням середньої швидкості (як згадувалося в інших відповідях, є й інші інструменти, які покажуть вам набагато приємніший результат), але це рішення легко написати для інших дій.

Наприклад, наступний сценарій оболонки (розділений на кілька рядків для читабельності) буде виконувати процес офлайн-карти лише тоді, коли 5-хвилинна середня швидкість передачі опуститься нижче 10 кбіт / с (імовірно, коли закінчується якийсь інший процес, що вимагає пропускної здатності):

#!/bin/sh
S=300; F=/sys/class/net/eth0/statistics/tx_bytes
BPS=999999
while [ $BPS -gt 10000 ]
do
  X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))";
  echo BPS is currently $BPS
done
offlineimap

Зверніть увагу, що /sys/class/...це специфікація Linux (це нормально, оскільки подавець вибрав linuxтег) і потребує неархаїчного ядра. Сам код оболонки сумісний з / bin / sh (тому працюватимуть не лише bash, але тире та інші реалізації / bin / sh), а / bin / sh - це те, що дійсно завжди встановлюється.


5

Мені подобається, iptrafале вам, мабуть, доведеться його встановити, і, здається, він більше не підтримується.


1
Існує iptraf-ng, чи є пропозиції щодо відмінностей між ними?
Фелікс Ян

1
iptraf-ng - це форк оригінального проекту. Він повинен мати усі оригінальні функції з більшою кількістю.
Rudy Matela

2

Я вважаю, що dstat досить непоганий. Потрібно встановити. Дає вам набагато більше інформації, ніж вам потрібно. Netstat надасть вам швидкість передачі пакетів, але також не пропускну здатність. netstat -s



0

Я не зміг змусити розібрати сценарій ifconfig для роботи на AMI, тому змусив це працювати вимірювання отриманого трафіку в середньому за 10 секунд

date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference / 10` bytes per sec"

Вибачте, це коли-небудь так дешево і неприємно, але це працювало!


0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

Якщо ви хочете вивести (ifconfig -a) у форматі json, ви можете використовувати це (python)


Жодна з цих статистичних даних про звіт не працює?
Дзамо Нортон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.