Bagaimana saya bisa mendapatkan statistik throughput antarmuka jaringan saat ini di Linux / UNIX? [Tutup]


94

Alat seperti MRTG menyediakan grafik throughput / bandwidth jaringan untuk penggunaan jaringan saat ini pada antarmuka tertentu, seperti eth0. Bagaimana saya dapat mengembalikan informasi tersebut pada baris perintah di Linux / UNIX?

Lebih disukai jika ini dilakukan tanpa menginstal apa pun selain yang tersedia pada sistem sebagai standar.


Pertimbangkan untuk mengganti jawaban Anda mengingat detail iftop.
Gray

Sayang sekali pertanyaan ini telah ditutup, karena saya ingin menambahkan bmonyang berguna. github.com/tgraf/bmon#screenshots
Daniel F

Jawaban:


18

Anda dapat mengurai keluaran ifconfig


Ini mengasumsikan akses root tersedia
Lionel

20
(biasanya) Anda tidak perlu menjadi root untuk menjalankan ini ...
confiq

3
Bash one-liner buruk yang melakukan hal ini (dan membuat saya merindukan perilaku netstat (1) BSD):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
Jashank Jeremy

4
Parsing keluaran ifconfig rawan kesalahan, misalnya hasil satu baris di atas dalam -bash: export: overruns: 0 ': not a valid identifier` untuk saya di RHEL6. Parsing /sys/class/net/$dev/statistics(lihat skrip perl di jawaban @ephemient) secara langsung bekerja lebih baik.
Nickolay

1
seharusnya tidak menjadi jawaban yang diterima karena rawan kesalahan dan tidak praktis. ada utilitas yang melakukan pekerjaan lebih baik, Gulir ke bawah untuk mencari tahu.
Eric

156

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

Saya tidak tahu bagaimana iftop "standar", tetapi saya dapat menginstalnya yum install iftopdi Fedora.


13
iftopdapat diinstal pada Ubuntu instalasi yang bersih mudah juga: apt-get install iftop.
Tom Marthenal

1
dan di Arch Linux denganpacman -S iftop
Benjamin Kaiser

3
menghela napas Nah, saya rasa ini berarti saya menunda belajar mengurai tcpdumpkeluaran lagi. Terima kasih iftopdan wireshark, karena mengizinkan saya menjadi malas ini.
Parthian Shot

1
Perhatikan bahwa pertanyaan menanyakan statistik per-antarmuka, tetapi iftoplebih rinci, dan memberikan statistik per koneksi.
Joachim Breitner

1
Bagi mereka yang tidak memiliki hak admin, perhatikan yang iftopmemerlukan instalasi (Anda bahkan tidak akan dapat membangunnya tanpa libpcapmenginstal) dan halaman beranda mengatakan itu harus dijalankan di bawah root.
Nickolay

109

Punya sar? Mungkin ya jika Anda menggunakan RHEL / CentOS.

Tidak perlu priv, binari norak, skrip hacky, libpcap, dll. Menang.

$ 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
Untuk kB / s Kirim dan Terima: sar -n DEV 1 3 | grep $ IFACE | ekor -n1 | awk '{print $ 5, $ 6}'
Lionel

2
@Lionel - minor nit: maksud Anda Terima dan Kirim, dalam urutan itu. :-)
lacinato

Sar adalah alat tua yang indah. Ini itu biner lain atau empat dan berbagai cronjobs untuk dikumpulkan, meskipun :)
XTL

1
Menjalankan Centos7, no sar.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... pencarian Google cepat akan menghasilkan banyak informasi.
Mike S

44

Saya menulis skrip bodoh ini sejak lama, itu hanya bergantung pada Perl dan 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 @_ = <>;
    @_;
}

Itu hanya membaca dari /sys/class/net/$dev/statisticssetiap detik, dan mencetak angka saat ini dan tingkat rata-rata perubahan:

$ ./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
Itu naskah kecil yang luar biasa, terima kasih kawan!
Gui13

1
Saya harus mengganti "8s" dan "8.8s" dengan "16s" dan "16.16s" agar nomornya pas.
Nickolay

Jika saya mengerti benar, untuk membuat hasil akhir akurat (misalnya dalam statistik langsung), itu harus berjalan setiap detik /proc/net/devatau menghitung data pada dasar per / detik entah bagaimana lagi?
Ilia Rostovtsev

31

nload adalah alat yang hebat untuk memantau bandwidth secara real time dan mudah dipasang di Ubuntu atau Debian dengan 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

Alat hebat lainnya adalah iftop , juga mudah 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

Jangan lupa tentang utilitas sar dan netstat yang klasik dan kuat di * nix yang lebih lama!


2
ini harus menjadi jawaban yang diterima
Eric


25
  • dstat - Menggabungkan informasi vmstat, iostat, ifstat, netstat, dan lainnya
  • iftop - Utilitas bandwidth jaringan yang luar biasa untuk menganalisis apa yang sebenarnya terjadi di eth Anda
  • netio - Mengukur throughput jaringan melalui TCP / IP
  • inq- Utilitas pemecahan masalah CLI yang menampilkan info tentang penyimpanan, biasanya Symmetrix. Secara default, INQ mengembalikan nama perangkat, Symmetrix ID, Symmetrix LUN, dan kapasitas.
  • send_arp - Mengirimkan siaran arp pada perangkat jaringan yang ditentukan (default ke eth0), melaporkan pemetaan alamat IP lama dan baru ke alamat MAC.
  • EtherApe- adalah monitor jaringan grafis untuk Unix yang dimodelkan setelah etherman. Menampilkan lapisan tautan, mode IP dan TCP, ini menampilkan aktivitas jaringan secara grafis.
  • iptraf - Monitor lalu lintas IP yang menunjukkan informasi tentang lalu lintas IP yang melewati jaringan Anda.

Detail selengkapnya: http://felipeferreira.net/?p=1194


1
Terima kasih untuk daftarnya yang sederhana dan ini sebagian besar adalah utilitas default. Secara khusus saya bisa mendapatkan bandwidth puncak yang sangat bagus dari iftop tanpa menginstal apa pun.
Foliovision

16

Saya mendapat skrip quick'n'dirty bash lainnya untuk itu:

#!/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

Ini mengingat bahwa sleep 1sebenarnya akan bertahan tepat satu detik, yang tidak benar, tetapi cukup baik untuk penilaian bandwidth kasar.

Terima kasih kepada @ephemient untuk /sys/class/net/<interface>! :)


3
Jika Anda ingin memformat nomor Anda sebagai MB / s, ganti baris "echo" dengan ini: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; cetak "Menerima" rx "MB / s, Mengirim" tx "MB / s"} '
Michael Böckling

1
@BuddyCasino Saya yakin Anda bisa melakukannya langsung di let BWRX=($RX-$RXPREV)/1024(meskipun saya tidak punya apa-apa untuk mengujinya sekarang)
Matthieu

Sepertinya Anda benar, itu tidak berhasil karena suatu alasan ketika saya mencoba melakukannya dengan cara itu, jadi saya memutuskan untuk awk, tapi saya kira itu hanya salah ketik.
Michael Böckling


6

Jika Anda hanya ingin mendapatkan nilainya, Anda dapat menggunakan shell oneliner sederhana seperti ini:

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS

Ini akan menunjukkan kepada Anda rata-rata "byte yang diterima per detik" untuk periode 10 detik (Anda dapat mengubah periode dengan mengubah S=10parameter, dan Anda dapat mengukur BPS yang dikirim alih-alih BPS yang diterima dengan menggunakan tx_bytesalih-alih rx_bytes). Jangan lupa untuk mengubah eth0ke perangkat jaringan yang ingin Anda pantau.

Tentu saja, Anda tidak dibatasi untuk menampilkan nilai rata-rata (seperti yang disebutkan dalam jawaban lain, ada alat lain yang akan menunjukkan hasil yang jauh lebih baik), tetapi solusi ini mudah ditulis untuk melakukan hal lain.

Misalnya, skrip shell berikut (dibagi menjadi beberapa baris agar terbaca) akan menjalankan proses offlineimap hanya jika kecepatan transmisi rata-rata 5 menit turun di bawah 10kBPS (mungkin, saat beberapa proses lain yang menghabiskan bandwidth selesai):

#!/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

Perhatikan bahwa /sys/class/...ini khusus untuk Linux (yang tidak masalah karena pengirim memang memilih linuxtag), dan membutuhkan kernel non-archaic. Kode shell itu sendiri kompatibel dengan / bin / sh (jadi tidak hanya bash, tetapi tanda hubung dan implementasi / bin / sh lainnya akan berfungsi) dan / bin / sh adalah sesuatu yang benar-benar selalu diinstal.


5

Saya suka iptraftetapi Anda mungkin harus menginstalnya dan sepertinya tidak lagi dipertahankan secara aktif.


1
Ada iptraf-ng, ada saran tentang perbedaan di antara mereka?
Felix Yan

1
iptraf-ng adalah cabang dari proyek asli. Itu harus memiliki semua fitur asli dengan lebih banyak.
Rudy Matela

2

Menurut saya dstat cukup bagus. Harus diinstal. Memberi Anda lebih banyak informasi daripada yang Anda butuhkan. Netstat akan memberi Anda tarif paket tetapi tidak juga bandwith. netstat -s



0

Saya tidak bisa membuat skrip parse ifconfig berfungsi untuk saya di AMI, jadi saya membuatnya berfungsi dengan mengukur lalu lintas yang diterima rata-rata lebih dari 10 detik

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"

Maaf, ini sangat murah dan menjijikkan tetapi berhasil!


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

Jika Anda ingin output (ifconfig -a) dalam format json Anda dapat menggunakan ini (python)


Tak satu pun dari statistik throughput laporan ini?
Dzamo Norton
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.