ฉันจะรับสถิติปริมาณงานอินเทอร์เฟซเครือข่ายปัจจุบันบน Linux / UNIX ได้อย่างไร [ปิด]


95

เครื่องมือเช่น MRTG ให้กราฟปริมาณงานเครือข่าย / แบนด์วิดท์สำหรับการใช้งานเครือข่ายปัจจุบันบนอินเทอร์เฟซเฉพาะเช่น eth0 ฉันจะส่งคืนข้อมูลนั้นที่บรรทัดคำสั่งบน Linux / UNIX ได้อย่างไร

โดยเฉพาะอย่างยิ่งสิ่งนี้จะไม่ต้องติดตั้งสิ่งอื่นใดนอกเหนือจากสิ่งที่มีอยู่ในระบบตามมาตรฐาน


ลองเปลี่ยนคำตอบของคุณตามรายละเอียด iftop
สีเทา

น่าเสียดายที่คำถามนี้ถูกปิดไปแล้วเพราะฉันต้องการเพิ่มbmonซึ่งเป็นประโยชน์ github.com/tgraf/bmon#screenshots
Daniel F

คำตอบ:


17

คุณสามารถแยกวิเคราะห์ผลลัพธ์ของ ifconfig


สิ่งนี้ถือว่าสามารถเข้าถึงรูทได้
Lionel

20
(ปกติ) คุณไม่จำเป็นต้องรูทเพื่อรันสิ่งนี้ ...
confiq

3
หนึ่งซับที่ไม่ดีที่ทำอย่างนี้ (และทำให้ฉัน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) โดยตรงทำงานได้ดีกว่ามาก
Nickolay

2
ไม่ควรเป็นคำตอบที่ยอมรับได้เนื่องจากมีข้อผิดพลาดและไม่สามารถใช้งานได้จริง มียูทิลิตี้ที่ทำงานได้ดีขึ้นมากเลื่อนลงเพื่อดู
เอริค

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.
Tom Marthenal

1
และบน Arch Linux ด้วยpacman -S iftop
Benjamin Kaiser

3
ถอนหายใจฉันเดาว่านี่หมายความว่าฉันกำลังเลิกเรียนรู้ที่จะแยกวิเคราะห์tcpdumpผลลัพธ์อีกครั้ง ขอบคุณiftopและที่wiresharkปล่อยให้ฉันขี้เกียจขนาดนี้
Parthian Shot

3
โปรดทราบว่าคำถามนั้นถามถึงสถิติต่ออินเทอร์เฟซ แต่iftopมีรายละเอียดมากกว่าและให้สถิติต่อการเชื่อมต่อ
Joachim Breitner

1
สำหรับผู้ที่ไม่มีสิทธิผู้ดูแลระบบทราบว่าiftopต้องติดตั้ง (คุณจะไม่ได้สามารถที่จะสร้างได้โดยไม่ต้องlibpcapติดตั้ง) rootและหน้าแรกของมันบอกว่ามันจะต้องทำงานภายใต้
Nickolay

109

มี sar? น่าจะใช่ถ้าคุณใช้ RHEL / CentOS

ไม่จำเป็นต้องใช้ private, dorky binaries, hacky scripts, 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

11
สำหรับ kB / s การส่งและรับ: sar -n DEV 1 3 | grep $ IFACE | หาง -n1 | awk '{print $ 5, $ 6}'
Lionel

2
@Lionel - รองเล็กน้อย: คุณหมายถึงรับและส่งตามลำดับนั้น :-)
lacinato

Sar เป็นเครื่องมือเก่าที่น่ารัก มันเป็นอีกไบนารีหรือสี่และ cronjobs สารพันสำหรับการรวบรวมแม้ว่า :)
XTL

1
วิ่ง Centos7 ไม่มี sar.
Josh Usre

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
ฉันต้องแทนที่ "8s" และ "8.8s" ด้วย "16s" และ "16.16s" เพื่อให้ตัวเลขนั้นพอดี
Nickolay

ถ้าฉันเข้าใจถูกต้องเพื่อให้ผลลัพธ์สุดท้ายถูกต้อง (เช่นในสถิติสด) มันต้องทำงานทุกวินาที/proc/net/devหรือคำนวณข้อมูลต่อ / วินาทีพื้นฐานอย่างอื่น?
Ilia Rostovtsev

32

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
นี่ควรเป็นคำตอบที่ยอมรับ
Eric

28

คุณสามารถแยก/ proc / net / dev


3
/ proc ไม่มีอยู่ในทุก UNIX
Mehrdad Afshari

31
จริงเพียงแค่สันนิษฐานเนื่องจากแท็ก Linux OP นั้นสนใจเฉพาะ Linux
codelogic

ไม่มีไฟล์ดังกล่าวในเคอร์เนล 3.17
Tomas Tomecek

4
ดูเหมือนจะเทียบเท่ากับการแยกวิเคราะห์/sys/class/net/$dev/statisticsในสคริปต์ของ ephemient
Nickolay

25
  • dstat - รวม vmstat, iostat, ifstat, netstat ข้อมูลและอื่น ๆ
  • iftop - ยูทิลิตี้แบนด์วิดท์เครือข่ายที่น่าทึ่งเพื่อวิเคราะห์สิ่งที่เกิดขึ้นกับ eth ของคุณ
  • netio - วัดปริมาณงานสุทธิของเครือข่ายผ่าน TCP / IP
  • inq- ยูทิลิตี้การแก้ไขปัญหา CLI ที่แสดงข้อมูลเกี่ยวกับการจัดเก็บข้อมูลโดยทั่วไปคือ Symmetrix โดยค่าเริ่มต้น INQ จะส่งคืนชื่ออุปกรณ์ Symmetrix ID, Symmetrix LUN และความจุ
  • send_arp - ส่งการออกอากาศ arp บนอุปกรณ์เครือข่ายที่ระบุ (ค่าเริ่มต้นเป็น eth0) รายงานการแมปที่อยู่ IP เก่าและใหม่กับที่อยู่ MAC
  • EtherApe- เป็นจอภาพเครือข่ายแบบกราฟิกสำหรับ Unix ที่จำลองตามอีเธอร์แมน มีลิงค์เลเยอร์โหมด IP และ TCP จะแสดงกิจกรรมเครือข่ายแบบกราฟิก
  • iptraf - จอภาพการรับส่งข้อมูล IP ที่แสดงข้อมูลเกี่ยวกับการรับส่งข้อมูล IP ที่ส่งผ่านเครือข่ายของคุณ

รายละเอียดเพิ่มเติม: http://felipeferreira.net/?p=1194


1
ขอบคุณสำหรับรายการง่ายๆและสิ่งเหล่านี้ส่วนใหญ่เป็นยูทิลิตี้เริ่มต้น โดยเฉพาะอย่างยิ่งฉันสามารถรับแบนด์วิดท์สูงสุดที่ดีมากจาก iftop โดยไม่ต้องติดตั้งอะไรเลย
Foliovision

16

ฉันมีสคริปต์ทุบตี Quick'n'dirty อีกอันสำหรับสิ่งนั้น:

#!/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
หากคุณต้องการจัดรูปแบบตัวเลขของคุณเป็น MB / s ให้สลับบรรทัด "echo" ด้วยสิ่งนี้: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; พิมพ์ "ได้รับ" rx "MB / s ส่ง" tx "MB / s"} "
Michael Böckling

1
@BuddyCasino ฉันแน่ใจว่าคุณสามารถทำได้โดยตรงในlet BWRX=($RX-$RXPREV)/1024(แม้ว่าฉันจะไม่มีอะไรให้ทดสอบในตอนนี้)
Matthieu

ดูเหมือนว่าคุณพูดถูกมันไม่ได้ผลด้วยเหตุผลบางอย่างเมื่อฉันพยายามทำแบบนั้นดังนั้นฉันจึงตัดสินให้ awk แต่ฉันเดาว่ามันเป็นแค่การพิมพ์ผิด
Michael Böckling

15

นอกจาก iftop และ iptraf แล้วให้ตรวจสอบ:

  • bwm-ng (Bandwidth Monitor Next Generation)

และ / หรือ

  • cbm (เครื่องวัดแบนด์วิธสี)

อ้างอิง: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


2
BWm-ng Rocks: ไม่จำเป็นต้องได้รับอนุญาตพิเศษใด ๆ ในการเรียกใช้
Rudy Matela

ฉันใช้มันมาหลายปีแล้วและในกรณีการใช้งานส่วนใหญ่ฉันพบว่าอินเทอร์เฟซของมันชัดเจนกว่าเช่น iftop มาก
Dr. Jan-Philip Gehrcke

6

หากคุณต้องการเพียงแค่ได้รับค่าคุณสามารถใช้เชลล์ออนไลเนอร์ง่ายๆดังนี้:

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 (น่าจะเป็นเมื่อกระบวนการที่ใช้แบนด์วิดท์อื่น ๆ เสร็จสิ้น):

#!/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แท็ก) และต้องการเคอร์เนลที่ไม่ใช่แบบโบราณ รหัสเชลล์เอง / bin / sh เข้ากันได้ (ดังนั้นไม่เพียง แต่ทุบตี แต่การใช้ dash และอื่น ๆ / bin / sh จะทำงานได้) และ / bin / sh เป็นสิ่งที่ติดตั้งอยู่เสมอ


5

ฉันชอบiptrafแต่คุณอาจต้องติดตั้งและดูเหมือนว่าจะไม่ได้รับการบำรุงรักษาอีกต่อไป


1
มี iptraf-ng ข้อเสนอแนะเกี่ยวกับความแตกต่างระหว่างพวกเขาหรือไม่?
Felix Yan

1
iptraf-ng เป็นทางแยกของโครงการเดิม ควรมีคุณสมบัติดั้งเดิมทั้งหมดที่มีมากขึ้น
Rudy Matela

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"

ขออภัยมันถูกและน่ารังเกียจมาก แต่ได้ผล!


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.