Как я могу получить текущую статистику пропускной способности сетевого интерфейса в Linux/UNIX? [закрытый]
такие инструменты, как MRTG, обеспечивают графики пропускной способности / пропускной способности сети для текущего использования сети на определенных интерфейсах, таких как eth0. Как я могу вернуть эту информацию в командной строке в Linux / UNIX?
предпочтительно это было бы без установки ничего, кроме того, что доступно в системе в качестве стандарта.
15 ответов:
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- удивительная утилита пропускной способности сети для анализа того, что действительно происходит на вашем ethnetio- измеряет пропускную способность сети через TCP / IPinq- утилита устранения неполадок 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 для проверки производительности сети (максимально возможная пропускная способность). См. следующие ссылки для получения дополнительной информации:
Я не мог заставить скрипт 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