MRTGなどのツールは、eth0などの特定のインターフェイスでの現在のネットワーク使用率のネットワークスループット/帯域幅グラフを提供します。Linux / UNIXのコマンドラインでその情報を返すにはどうすればよいですか?
好ましくは、これは、システムで標準で利用可能なもの以外のものをインストールすることなく行われるでしょう。
bmon
。これは、役立つ情報を追加したかったためです。github.com/tgraf/bmon#screenshots
MRTGなどのツールは、eth0などの特定のインターフェイスでの現在のネットワーク使用率のネットワークスループット/帯域幅グラフを提供します。Linux / UNIXのコマンドラインでその情報を返すにはどうすればよいですか?
好ましくは、これは、システムで標準で利用可能なもの以外のものをインストールすることなく行われるでしょう。
bmon
。これは、役立つ情報を追加したかったためです。github.com/tgraf/bmon#screenshots
回答:
あなたはの出力を解析することができます ifconfig
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
-bash: export:
overruns:0 'が発生します。RHEL6では私にとって有効な識別子ではありません。解析/sys/class/net/$dev/statistics
(@ephemient回答のperlスクリプトを参照)は、直接より効果的に機能します。
iftop does for network usage what top(1) does for CPU usage
- http://www.ex-parrot.com/~pdw/iftop/
iftopが「標準」かどうかはわかりませんが、yum install iftop
Fedora にインストールできました。
iftop
Ubuntuのクリーンインストールにも簡単にインストールできますapt-get install iftop
。
pacman -S iftop
tcpdump
再び出力を。私とこの怠惰を許してくれてありがとう、iftop
そしてwireshark
。
iftop
が、より詳細であり、接続ごとの統計情報を提供することに注意してください。
iftop
がない場合は、インストールが必要であり(インストールしないとビルドできませんlibpcap
)、そのホームページにはで実行する必要があると記載されていroot
ます。
sarを手に入れましたか?RHEL / CentOSを使用している場合は、おそらくはい。
priv、dorkyバイナリ、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
私はこの愚かなスクリプトをずっと前に書いた、それは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
1秒ごとに読み取りを行い、現在の数値と平均変化率を出力します。
$ ./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
毎秒実行するか、毎秒基本のデータを何らかの方法で計算する必要がありますか?
nloadは、帯域幅をリアルタイムで監視するための優れたツールであり、sudo apt-get install nloadを使用してUbuntuまたはDebianに簡単にインストールできます。
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
古い* nixのクラシックで強力なsarおよびnetstatユーティリティを忘れないでください!
/ proc / net / devを解析できます。
/sys/class/net/$dev/statistics
ephemientのスクリプトのように解析と同等のようです。
dstat
-vmstat、iostat、ifstat、netstat情報などを組み合わせる iftop
-あなたのethで実際に起こっていることを分析する素晴らしいネットワーク帯域幅ユーティリティ netio
-TCP / IPを介してネットワークの正味スループットを測定します inq
-ストレージ、通常はSymmetrixに関する情報を表示するCLIトラブルシューティングユーティリティ。デフォルトでは、INQはデバイス名、Symmetrix ID、Symmetrix LUN、および容量を返します。send_arp
-指定されたネットワークデバイス(デフォルトはeth0)にarpブロードキャストを送信し、MACアドレスへの古いIPアドレスと新しいIPアドレスのマッピングを報告します。EtherApe
-は、ethermanをモデルにしたUnix用のグラフィカルネットワークモニターです。リンクレイヤー、IPおよびTCPモードを備え、ネットワークアクティビティをグラフィカルに表示します。iptraf
-ネットワークを通過するIPトラフィックに関する情報を表示するIPトラフィックモニター。そのための別のクイック 'ダーティーbashスクリプトを入手しました。
#!/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
実際には1秒続くをいますが、これは事実ではありませんが、大まかな帯域幅の評価には十分です。
@ephemientに感謝し/sys/class/net/<interface>
ます!:)
let BWRX=($RX-$RXPREV)/1024
(私は今それをテストするものは何もありませんが)
iftopとiptrafに加えて、以下も確認してください。
bwm-ng
(帯域幅モニター次世代)および/または
cbm
(カラー帯域幅メーター)参照:http : //www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html
値を取得するだけの場合は、次のような単純なシェルワンライナーを使用できます。
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分間の平均送信速度が10kBPSを下回った場合(おそらく、他の帯域幅を消費するプロセスが終了した場合)にのみ、offlineimapプロセスを実行します。
#!/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は常にインストールされるものです。
私は好きですiptraf
が、おそらくあなたはそれをインストールしなければならず、それはもはやアクティブに維持されていないようです。
私はdstatがかなり良いと思います。ただし、インストールする必要があります。必要以上の情報を提供します。Netstatはパケットレートを提供しますが、帯域幅も提供しません。netstat -s
iperfを使用して、ネットワークパフォーマンス(可能な最大スループット)をベンチマークできます。詳細については、次のリンクを参照してください。
AMIでパースifconfigスクリプトを機能させることができなかったので、これを機能させて、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
json形式の(ifconfig -a)の出力が必要な場合は、これを使用できます(python)