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


94

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

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


Подумайте о том, чтобы изменить свой ответ с учетом деталей iftop.
Грей

Жаль, что этот вопрос был закрыт, потому что я хотел добавить, bmonчто полезно. github.com/tgraf/bmon#screenshots
Дэниел Ф

Ответы:


18

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


Предполагается, что root-доступ доступен
Lionel

20
(обычно) Вам не нужно быть root, чтобы запустить это ...
confiq

3
Плохой однострочник bash, который делает именно это (и заставляет меня 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 и т. Д. Win.

$ 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
@Lionel - мелочь: вы имели в виду получение и передачу именно в таком порядке. :-)
lacinato 03

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

1
Запуск Centos7, без sar.
Джош Усре, 03

google.com/webhp?q=sar%20centos%207 ... быстрый поиск в Google предоставит много информации.
Mike 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
Мне пришлось заменить «8» и «8,8» на «16» и «16,16», чтобы числа подходили.
Николай

Если я правильно понимаю, чтобы окончательный результат был точным (например, в статистике в реальном времени), он должен запускаться каждую секунду /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.
Mehrdad Afshari

31
Правда, просто предполагалось из-за тега Linux, что OP интересовался только Linux.
codelogic

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

4
Похоже на синтаксический анализ, /sys/class/net/$dev/statisticsкак в сценарии ephemient.
Николай

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

Подробнее: http://felipeferreira.net/?p=1194


1
Спасибо за простой список и за то, что это в основном утилиты по умолчанию. В частности, я смог получить очень хорошую пиковую пропускную способность из iftop, ничего не устанавливая.
Foliovision,

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; print "Получено" rx "МБ / с, отправлено" tx "МБ / с"} '
Михаэль Бёклинг

1
@BuddyCasino Я уверен, что вы могли бы сделать это прямо в let BWRX=($RX-$RXPREV)/1024(хотя мне сейчас нечего тестировать)
Matthieu

Похоже, вы правы, когда я пытался сделать это, по какой-то причине это не сработало, поэтому я остановился на awk, но, думаю, это была просто опечатка.
Михаэль Бёклинг

15

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

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

и / или

  • cbm (Измеритель полосы пропускания цвета)

ссылка: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


2
bwm-ng rocks: для запуска не требуется никаких специальных разрешений.
Руди Матела

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

6

Если вы хотите просто получить значение, вы можете использовать простую оболочку 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параметр, и вы можете измерить переданные биты в секунду вместо полученных, используя 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 - это то, что действительно всегда устанавливается.


5

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


1
Есть iptraf-ng, есть предложения по различию между ними?
Феликс Ян

1
iptraf-ng - это форк оригинального проекта. В нем должны быть все оригинальные черты и еще больше.
Руди Матела

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.