Ответ 1
Вы можете анализировать вывод ifconfig
Инструменты, такие как MRTG, предоставляют графики пропускной способности/пропускной способности сети для текущего использования сети на определенных интерфейсах, таких как eth0. Как я могу вернуть эту информацию в командной строке в Linux/UNIX?
Предпочтительно, это было бы без установки чего-либо, кроме того, что доступно в системе в качестве стандартного.
Вы можете анализировать вывод 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.
Получил сэр? Вероятно, да, если вы используете RHEL/CentOS.
Нет необходимости в приватных двоичных файлах, hacky-скриптах, 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
Я написал этот немой script давным-давно, это зависит только от Perl и Linux & ge; 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 ---------^
Вы можете разобрать /proc/net/dev.
dstat
- объединяет vmstat, iostat, ifstat, информацию netstat и многое другоеiftop
- Удивительная утилита пропускной способности сети для анализа того, что на самом деле происходит на вашем уровнеnetio
- измеряет пропускную способность сети через TCP/IPinq
- утилита для устранения неполадок CLI, отображающая информацию о хранилище, обычно Symmetrix. По умолчанию INQ возвращает имя устройства, Symmetrix ID, Symmetrix LUN и емкость.send_arp
- Отправляет трансляцию arp на указанное сетевое устройство (по умолчанию eth0), сообщая о старом и новом сопоставлении IP-адресов на MAC-адрес.EtherApe
- это графический сетевой монитор для Unix, смоделированный после etherman. Благодаря режиму уровня канала, IP и TCP он графически отображает сетевую активность.iptraf
- монитор трафика IP, который показывает информацию о трафике IP, проходящем через вашу сеть.Подробнее: http://felipeferreira.net/?p=1194
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'able:
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!
Помимо iftop и iptraf, также проверьте:
bwm-ng
(Мониторинг полосы пропускания следующего поколения)и/или
cbm
(Цветной измеритель полосы пропускания)ref: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html
Я получил еще один quick'n'dirty bash script для этого:
#!/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>
!:)
Мне нравится iptraf
, но вам, вероятно, придется его установить и, похоже, он больше не поддерживается.
Если вы хотите просто получить значение, вы можете использовать простой shell 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
на сетевое устройство, которое вы хотите контролировать.
Конечно, вы не ограничены отображением средней скорости (как упоминалось в других ответах, есть и другие инструменты, которые покажут вам гораздо более приятный результат), но это решение легко может быть написано сценарием для других целей.
Например, следующая оболочка script (разделенная на несколько строк для удобочитаемости) будет выполнять процесс 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, но и тире и другие /bin/sh реализаций), а /bin/sh - это то, что действительно установлено всегда.
Я считаю, что это неплохо. Должен быть установлен, хотя. Предоставляет вам больше информации, чем вам нужно. Netstat предоставит вам пакетные тарифы, но не будет также с полосой пропускания. netstat -s
Вы можете использовать iperf для оценки производительности сети (максимально возможная пропускная способность). Подробнее см. В следующих ссылках:
Я не смог получить синтаксический анализ ifconfig script для работы на 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"
Извините, это так дешево и противно, но это сработало!
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n
Если вы хотите вывод (ifconfig -a) в формате json, вы можете использовать this (python)