Jul 112013
 

Sui server è utile monitorare e raccogliere dati circa l’utilizzo della banda di rete, in passato ho scritto un articolo su “” Monitorare la larghezza di banda della shell di Linux ” e ho anche presentato quattro strumenti utili che è possibile utilizzare per avere un monitoraggio in tempo reale della banda:

IPTState : un’interfaccia simile a Top collegata alla vostra tabella connection-tracking di netfilter.
Utilizzando iptstate si può guardare in modo interattivo il traffico che attraversa il proprio firewall netfilter/iptables , ordinato per vari criteri, è possibile limitare la visualizzazione con vari criteri. Ma non si ferma qui: a partire dalla versione 2.2.0 è possibile anche cancellare gli stati dalla tabella.

pktstat : visualizza un elenco in tempo reale delle connessioni attive viste su una interfaccia di rete specifica, e quanta banda viene utilizzata. Parzialmente decodifica i protocolli HTTP e FTP per mostrare il nome del file che viene trasferito. Anche i nomi delle applicazioni X11 sono mostrate.

NetHogs un piccolo strumento tipo ‘top di rete’. Invece che “spacchettare” il traffico verso il “basso” per protocollo o per sottorete, come la maggior parte degli strumenti fanno, mostra la banda utilizzata dai vari programmi. NetHogs non si basa su un modulo del kernel speciale da caricare. Se c’è ad un tratto molto traffico di rete, si può lanciare subito NetHogs e vedere immediatamente quale PID è la causa. Questo rende facile individuare i programmi che sono impazziti e stanno improvvisamente prendendo tutta la vostra banda di rete.

IPTraf un programma che raccoglie statistiche di rete per Linux ed è usufruibile da console. Raccoglie una serie di dati come i pacchetti delle connessioni TCP ed il conteggio dei byte, le statistiche sulle interfaccie e gli indicatori di attività, dati TCP/UDP sul traffico, e traffico per LAN.

Sono tutti buoni strumenti e suggerisco di leggere i miei vecchi articoli per avere una piccola introduzione su di essi, oggi voglio mostrarvi invece vnstat, questo piccolo programma ha qualcosa in più degli altri, può mostrare statistiche in tempo reale, ma la caratteristica dove brilla questo piccolo programma è la sua capacità di raccogliere dati su un lungo periodo di tempo.




vnstat è un monitor di traffico di rete basata su console per Linux e BSD che mantiene un log del traffico di rete per l’interfaccia selezionata(e). Utilizza le statistiche dell’interfaccia di rete fornite dal kernel come fonte di informazioni. Ciò significa che vnstat non sta effettivamente sniffando il traffico e assicura anche un basso impatto sull’uso delle risorse di sistema. In Linux, è richiesto almeno un kernel della serie 2.2, che vuol dire che tutti dovrebbero essere in grado di utilizzare questo piccolo programma.

Il programma è open source/GPL e può essere utilizzato sia come root che come utente non privilegiato.

installazione

Ho fatto i miei test su un server Debian, per questa distribuzione è possibile installare il pacchetto disponibile dal repository principale semplicemente con il comando (come root):

apt-get install vnstat

Un pacchetto per questo software dovrebbe essere presente in tutti i repository delle principali distribuzioni, quindi probabilmente è possibile installarlo con il vostro gestore di pacchetti (pacman, yaourt, emerge, yum).

Primo setup

Durante la prima esecuzione è necessario inizializzare ogni interfaccia che deve essere registrata su vnStat. Ad esempio per una interfaccia cablata con cavo di rete è necessario utilizzare il comando:

# vnstat -u -i eth0

o per una interfaccia wireless:

# vnstat -u -i wlan0

Quando si inizializza una interfaccia per la prima volta ci sarà un messaggio di errore che stamperà ‘unable to read database’. Se questo messaggio è seguito da un messaggio di informazioni che dice ‘a new database has been created’ l’interfaccia è stata aggiunta con successo.
Se questo non accade verificare che l’interfaccia specificata sia valida.

Per vedere tutte le interfacce del vostro sistema Linux, è possibile utilizzare il comando

 ip link show

Nota : Ho provato questo software anche su Ubuntu ed alla fine dell’installazione di vnstat ho avuto il messaggio:

 * Starting vnStat daemon vnstatd                                                                                                                                           
Zero database found, adding available interfaces...
"eth0" added, 100 Mbit bandwidth limit.
"wlan0" added, 100 Mbit bandwidth limit.
-> 2 interfaces added. Limits can be modified using the configuration file.

Quindi, se si vede qualcosa di simile si può saltare l’inizializzazione delle interfacce e la creazione di un metodo di aggiornamento.

Metodo di Aggiornamento

Dopo aver inizializzato le interfaccie impostare uno dei metodi di aggiornamento.
Attenzione: utilizzare solo uno dei metodi, non entrambi allo stesso tempo!

Cron
Il primo metodo utilizza Cron. Creare /etc/cron.d/vnstat con il seguente contenuto:

0-55/5 * * * * if [ -x /usr/bin/vnstat ] && [ `ls
 /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi

Questo presuppone che vnStat sia installato in /usr/ e presuppone anche che /etc/cron.d sia una directory per i cron di sistema (che è il valore predefinito per la maggior parte delle distribuzioni Linux).

Servizio
Il secondo modo è usare vnstatd un programma che raccoglie tutte le informazioni e che viene eseguito come demone, su Debian è possibile avviarlo con

#/etc/init.d/vnstat start

Se usate systemd allora utilizzate:

# systemctl start vnstat.service

Uso Base

L’uso base del programma è vnstat -i nomeinterfaccia, su un sistema in cui si è appena installato si dovrebbe vedere qualcosa di simile a:

root@server:# vnstat -i venet0
Database updated: Sat Jul 6 08:48:26 2013
 
venet0 since 07/06/13
 
rx: 16 KiB tx: 26 KiB total: 42 KiB
 
monthly
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
Jul '13 16 KiB | 26 KiB | 42 KiB | 0.00 kbit/s
------------------------+-------------+-------------+---------------
estimated -- | -- | -- |
 
daily
rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
today 16 KiB | 26 KiB | 42 KiB | 0.01 kbit/s
------------------------+-------------+-------------+---------------
estimated -- | -- | -- |

Non è così interessante, forse?
Beh, quando avrete vnstat in esecuzione per un certo tempo si avranno MOLTE più informazioni

$ vnstat -i eth1
Database updated: Sat Aug  1 22:50:01 2009
 
   eth1 since 11/20/08
 
          rx:  3.32 TiB      tx:  2.81 TiB     total:  6.13 TiB
 
   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Jul '09    609.40 GiB |  282.21 GiB |  891.61 GiB |    2.79 Mbit/s
       Aug '09     16.95 GiB |   10.46 GiB |   27.40 GiB |    2.80 Mbit/s
     ------------------------+-------------+-------------+---------------
     estimated    552.14 GiB |  340.70 GiB |  892.83 GiB |
 
   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
     yesterday     19.19 GiB |    8.63 GiB |   27.82 GiB |    2.70 Mbit/s
         today     16.95 GiB |   10.46 GiB |   27.40 GiB |    2.80 Mbit/s
     ------------------------+-------------+-------------+---------------
     estimated     17.81 GiB |   10.99 GiB |   28.80 GiB |

Come si può vedere si ha un piccolo report che mostra l’utilizzo totale della banda di rete in tempo reale (il primo blocco) di questo mese ed il precedente, e l’utilizzo totale della larghezza di banda di oggi e di ieri, questo è molto più interessante di sicuro.

Con l’opzione-h è possibile ottenere un rapporto orario nelle ultime 24h.

root@server:# vnstat -h -i eth1
eth1                                                                     21:25
  ^           r
  |           r
  |           r                                            r
  |        r  r                                            r
  |      t r  r                                            r            t
  |     rt r  r                                            r  r      t  t
  |     rt r  r                                            r  r      t  t
  |     rt r  r         t                      r           r  r      t  t
  |     rt r  rt        t                   r  r        r  rt rt  t rt rt  t
  |  rt rt rt rt rt r  rt r              r  r  r  r  rt rt rt rt rt rt rt  t
 -+--------------------------------------------------------------------------->
  |  22 23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21

 h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)
22    250,801    205,825    06    100,529     49,054    14    205,356    157,877
23    705,144    885,844    07     52,806     44,130    15    258,228    226,265
00    928,792    224,789    08     52,298     45,230    16  1,028,043    343,843
01  1,271,180    292,260    09     70,396     61,719    17    755,804    293,309
02    212,296    186,481    10    155,502     72,451    18    235,691    284,886
03    165,931     91,943    11    266,673     92,497    19    275,554    658,386
04    150,997    437,071    12    392,244    122,185    20    307,819    850,813
05    180,170     56,391    13    133,829    120,555    21    117,474    292,787



Oppure, se volete solo vedere le statistiche in tempo reale è possibile utilizzare l’opzione -l, statistiche saranno visualizzate dopo l’interruzione se il runtime è stato più di 10 secondi.

root@server:# vnstat -l -i eth0
Monitoring eth0...    (press CTRL-C to stop)

   rx:        0 kbit/s     1 p/s          tx:        4 kbit/s     2 p/s


 eth0  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                       21 KiB  |          36 KiB
--------------------------------------+------------------
          max              60 kbit/s  |       72 kbit/s
      average            3.36 kbit/s  |     5.76 kbit/s
          min               0 kbit/s  |        0 kbit/s
--------------------------------------+------------------
  packets                        262  |             272
--------------------------------------+------------------
          max                 94 p/s  |          94 p/s
      average                  5 p/s  |           5 p/s
          min                  0 p/s  |           0 p/s
--------------------------------------+------------------
  time                    50 seconds

Output Grafico

Nelle ultime versioni è presente una nuova opzione per generare immagini.

Si creano le immagini con il comando vnstati . Dal link:

Descrizione

Lo scopo di vnstati è quello di fornire un supporto grafico come output per le statistiche raccolte tramite vnstat. Il formato del file immagine è limitato al .png. Tutti gli output di base di vnStat sono supportati escluso il traffico in tempo reale. L’immagine può essere mandata sia da un file o su standard output.

Esempi

vnstati -s -i eth0 -o /tmp/vnstat.png

Stampa una sintesi del traffico in uscita per l’interfaccia eth0 su file /tmp/vnstat.png.

vnstati -vs -i eth0+eth1+eth2 -o /tmp/vnstat.png

Output traffic summary with hourly data under the normal summary for a merge of interfaces eth0, eth1 and eth2 to file /tmp/vnstat.png.

This is an example of the images this command will produce:

Stampa una sintesi del traffico in uscita con i dati orari sotto la sintesi normale con una unione delle interfacce eth0, eth1 e eth2 su file /tmp/vnstat.png.

Questo è un esempio delle immagini che questo comando produrrà:

vnstat

Or as alternative you can use a php frontend: vnstat PHP frontend, the script requires a working PHP setup with GD image libraries. Also vnStat must be properly installed and collecting data.

Oppure, in alternativa è possibile utilizzare PHP frontend per vnstat, allo script è necessario un PHP funzionante con il supporto alle librerie di immagini GD. Anche vnStat deve essere installato correttamente per la raccolta dei dati.

vnstatphp

Popular Posts:

Flattr this!

  3 Responses to “Controlla la banda di rete su Linux con vnstat”

  1. Thank you Riccardo Capecchi for writing articles on CLI applications. Modern GUIs really have made me appreciate the visual simplicity of CLI apps while being direct and to the point.

    I am using your articles to collect a list of CLI apps. I am writing/supporting a CLI app menu project because there is nothing to help newbies to know what CLI apps are out there. My project is currently at https://raw.github.com/rdchin/CLI-app-menu/stable/cli-app-menu.sh.

    Keep writing and thanks!

  2. I modified vnstat program to allow for adding initial value to the counter so that you can add the month’s usage prior to starting vnstatd in order to match with your ISP data counter. If anyone is interested let me know.

  3. Is there anyway to differentiate traffic based on destination IP address?
    For example, running vnstat on a server in your LAN. How would you differentiate WAN traffic when using eth0 for both purposes.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*