Как я могу получить текущую статистику пропускной способности сетевого интерфейса в Linux/UNIX? [закрытый]



такие инструменты, как MRTG, обеспечивают графики пропускной способности / пропускной способности сети для текущего использования сети на определенных интерфейсах, таких как eth0. Как я могу вернуть эту информацию в командной строке в Linux / UNIX?



предпочтительно это было бы без установки ничего, кроме того, что доступно в системе в качестве стандарта.

665   15  

15 ответов:

вы можете разобрать вывод ifconfig

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

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

получил sar? Скорее всего, да, если вы используете RHEL / CentOS.

нет необходимости в priv, дурацких двоичных файлах, хакерских скриптах, 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

Я написал этот тупой скрипт давным-давно, он не зависит ни от чего, кроме 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 "3[H3[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 ---------^

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, также легко apt-get'table:

             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!

вы могли бы разобрать /proc / net / dev.

  • dstat - объединяет vmstat, iostat, ifstat, netstat информацию и многое другое
  • iftop - удивительная утилита пропускной способности сети для анализа того, что действительно происходит на вашем eth
  • netio - измеряет пропускную способность сети через TCP / IP
  • inq - утилита устранения неполадок CLI, которая отображает информацию о хранилище, как правило, Symmetrix. По умолчанию, перевоз возвращает имя устройства, идентификатор Symmetrix, Symmetrix лун, и вместимость.
  • send_arp - отправляет широковещательную передачу arp на указанное сетевое устройство (по умолчанию eth0), сообщая о старом и новом сопоставлении IP-адресов с MAC-адресом.
  • EtherApe - это графический сетевой монитор для Unix по образцу etherman. Благодаря режимам link layer, IP и TCP, он отображает сетевую активность графически.
  • iptraf - монитор IP-трафика, который показывает информацию о IP-трафике, проходящем через ваш сеть.

более детально: http://felipeferreira.net/?p=1194

кроме iftop и iptraf, также проверьте:

  • bwm-ng (Монитор Пропускной Способности Следующего Поколения)

и/или

  • cbm (Измеритель Ширины Полосы Частот Цвета)

ref: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html

я получил еще один сценарий quick'n'Dirty bash для этого:

#!/bin/bash
IF=
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>! :)

Мне нравится iptraf но вы, вероятно, должны установить его, и он, кажется, не поддерживается активно больше.

если вы хотите просто получить значение, вы можете использовать простую оболочку oneliner следующим образом:

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 к сетевому устройству, которое вы хотите контролировать.

конечно, вы не ограничены отображением среднего оцените (как упоминалось в других ответах, есть и другие инструменты, которые покажут вам гораздо более приятный результат), но это решение легко поддается сценарию для других вещей.

например, следующий сценарий оболочки (разбитый на несколько строк для удобства чтения) будет выполнять процесс offlineimap только тогда, когда 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, но и dash и другие реализации /bin/sh), а /bin/sh-это то, что действительно всегда установлено.

Я считаю, что dstat довольно хорош. Должен быть установлен. Дает вам больше информации, чем вам нужно. Netstat даст вам пакетные скорости, но не полосу пропускания также. netstat-s

вы можете использовать iperf для проверки производительности сети (максимально возможная пропускная способность). См. следующие ссылки для получения дополнительной информации:

http://en.wikipedia.org/wiki/Iperf

https://iperf.fr/

https://code.google.com/p/iperf/

Я не мог заставить скрипт parse ifconfig работать для меня на AMI, поэтому получил это для работы измерения полученного трафика в среднем за 10 секунд

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

извините, это так дешево и противно, но это сработало!

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

Если вы хотите выводить (ifconfig-a) в формате json, вы можете использовать этой (python)

Comments

    Ничего не найдено.