W pewnych przypadkach (np. internet mobilny, w którym płaci się za transfer), dobrze jest mieć kontrolę nad ilością pobieranych i wysyłanych danych. Pomocne mogą być do tego programy do tworzenia statystyk wykorzystania łącza.

Wśród tychże wymienić można m.in. vnStat, darkstat lub ntop [1]. Osobiście najbardziej spodobał mi się pierwszy z nich — prosty w konfiguracji, zaprojektowany bez zbędnych komplikacji, łatwo go wykorzystać do zaprezentowania danych w wybrany przez siebie sposób, pokazuje dane niemal na bieżąco (najwyżej kilka minut opóźnienia).

Instalacja i konfiguracja

Przede wszystkim potrzebny będzie pakiet:

vnstat

Dodatkowo — jeśli interesują nas statystyki w formie grafik — można doinstalować pakiet:

vnstati

Podczas instalacji vnstat, w trakcie konfiguracji pakietu, narzędzie debconf zwróci błąd w związku z brakiem jakiejkolwiek bazy danych. Należy zatem ją utworzyć (jako root), podając nazwę interfejsu sieciowego, dla którego chcemy gromadzić statystyki:

# vnstat -u -i ppp0

W powyższym przykłądzie jest to interfejs ppp0. Równie dobrze może to być eth0, eth1, wlan0, etc. Można utworzyć kilka baz danych.

Po utworzeniu bazy danych, nalezy ponownie uruchomić demona programu:

# /etc/init.d/vnstat restart

Już po kilku minutach (na początku program może zwracać informację, że ma za mało danych) będzie można sprawdzić pierwszy raport.

Odczytywanie statystyk

Raporty konsolowe

Za pomocą programu vnstat można odczytać raporty dla różnych okresów, np. raporty miesięczne, dzienne, tygodniowe, godzinowe, etc.

I tak, aby odczytać raport miesięczny, należy wpisać w terminalu vnstat -m:

$ vnstat -m

 ppp0  /  monthly

       month        rx      |     tx      |    total    |   avg. rate
    ------------------------+-------------+-------------+---------------
      Dec '10    302.05 MiB |   26.92 MiB |  328.98 MiB |    1.69 kbit/s
    ------------------------+-------------+-------------+---------------
    estimated       507 MiB |      43 MiB |     550 MiB |

Dzienny — vnstat -d:

$ vnstat -d

 ppp0  /  daily

         day         rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
      12/17/10    123.13 MiB |   13.13 MiB |  136.26 MiB |   12.92 kbit/s
      12/18/10    170.68 MiB |   11.55 MiB |  182.23 MiB |   17.28 kbit/s
      12/19/10      8.25 MiB |    2.24 MiB |   10.48 MiB |    2.27 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        18 MiB |       4 MiB |      22 MiB |

Tygodniowy — vnstat -w:

$ vnstat -w

 ppp0  /  weekly

                      rx      |     tx      |    total    |   avg. rate
   ---------------------------+-------------+-------------+---------------
    last 7 days    302.05 MiB |   26.92 MiB |  328.98 MiB |    4.84 kbit/s
   current week    302.05 MiB |   26.92 MiB |  328.98 MiB |    4.84 kbit/s
   ---------------------------+-------------+-------------+---------------
      estimated       329 MiB |      28 MiB |     357 MiB |

Godzinowy — vnstat -h:

$ vnstat -h
 ppp0                                                                     10:36 
  ^                                r                                            
  |                          r  r  r  r                                         
  |                          r  r  r  r                             r           
  |                          r  r  r  r                             r           
  |                          r  r  r  r                             r           
  |                          r  r  r  r                             r           
  |                          r  r  r  r                          r  r  r        
  |  r                       r  r  r  r                          r  r  r        
  |  r                    r  rt rt r  rt                         r  r  r        
  |  r  r                 r  rt rt rt rt                         rt rt rt r     
 -+---------------------------------------------------------------------------> 
  |  11 12 13 14 15 16 17 18 19 20 21 22 23 00 01 02 03 04 05 06 07 08 09 10    

 h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB)      h  rx (KiB)   tx (KiB) 
11       1613        351    19       4451        909    03          0          0
12        652         80    20       4164        938    04          0          0
13          0          0    21       4519        750    05          0          0
14          0          0    22       4431       1162    06          0          0
15          0          0    23        424        167    07       1988        518
16          0          0    00          0          0    08       3705        833
17          0          0    01          0          0    09       1992        778
18       1320        251    02          0          0    10        761        164

Po wpisaniu samego vnstat, program poda ogólne podsumowanie statystyk (raport z ostatniego miesiąca oraz dzisiejszego i wczorajszego dnia):

$ vnstat
Database updated: Sun Dec 19 10:36:03 2010

   ppp0 since 12/17/10

          rx:  302.06 MiB      tx:  26.92 MiB      total:  328.98 MiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Dec '10    302.06 MiB |   26.92 MiB |  328.98 MiB |    1.69 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated       507 MiB |      43 MiB |     550 MiB |

   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
     yesterday    170.68 MiB |   11.55 MiB |  182.23 MiB |   17.28 kbit/s
         today      8.25 MiB |    2.24 MiB |   10.49 MiB |    2.25 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        18 MiB |       4 MiB |      22 MiB |

Z kolei po wpisaniu vnstat -s otrzymamy raport ogólny w skróconej formie:

$ vnstat -s

                      rx      /      tx      /     total    /   estimated
 ppp0:
       Dec '10    302.06 MiB  /   26.92 MiB  /  328.98 MiB  /  550.00 MiB
     yesterday    170.68 MiB  /   11.55 MiB  /  182.23 MiB
         today      8.25 MiB  /    2.24 MiB  /   10.49 MiB  /      22 MiB

Jeśli chcemy wybrać jeden z kilku interfejsów, należy podać go jako argument flagi -i, np.:

vnstat -d -i ppp0

Więcej informacji można znaleźć po podaniu flagi --help bądź w podręczniku vnstat(1).

Dostępne są również raporty tworzone na bieżąco (nie trzeba do tego tworzyć bazy):

vnstat -l -i eth0

Podczas zbierania statystyk, vnStat pokazywał będzie użycie łącza w danej chwili:

Monitoring eth0...    (press CTRL-C to stop)

   rx:      588 kbit/s    50 p/s          tx:       12 kbit/s    22 p/s

Po przerwaniu za pomocą Ctrl+C, zaprezentuje statystyki dla badanego okresu:

 eth0  /  traffic statistics

                           rx         |       tx
--------------------------------------+------------------
  bytes                     1.68 MiB  |          40 KiB
--------------------------------------+------------------
          max            1.22 Mbit/s  |       28 kbit/s
      average          725.89 kbit/s  |    16.84 kbit/s
          min             532 kbit/s  |       12 kbit/s
--------------------------------------+------------------
  packets                       1183  |             597
--------------------------------------+------------------
          max                104 p/s  |          49 p/s
      average                 62 p/s  |          31 p/s
          min                 46 p/s  |          20 p/s
--------------------------------------+------------------
  time                    19 seconds

Raporty w formie grafik

Po zainstalowaniu pakietu vnstati można z danych zbieranych przez vnStat tworzyć graficzne wykresy. Robimy to podając za pomocą polecenia vnstati, podając jako argumenty plik wynikowy, interfejs sieciowy (jeśli nie podano, program użyje interfejsu eth0) oraz rodzaj raportu — np. dzienny, miesięczny, godzinowy, podsumowanie.

I tak, aby stworzyć raport miesięczny, należy wpisać w konsoli:

$ vnstati -i ppp0 -o plik.png -m

Powstanie podobna grafika:

wykres miesięczny vnStat

Dzienny:

$ vnstati -i ppp0 -o plik.png -d

wykres dzienny vnStat

Godzinowy:

$ vnstati -i ppp0 -o plik.png -h

wykres godzinowy vnStat

Podsumowanie:

$ vnstati -i ppp0 -o plik.png -s

wykres vnStat — podsumowanie

Podsumowanie z godzinami poziomo:

$ vnstati -i ppp0 -o plik.png -hs

wykres vnStat — podsumowanie + godziny poziomo

Podsumowanie z godzinami pionowo:

$ vnstati -i ppp0 -o plik.png -vs

wykres vnStat — podsumowanie + godziny pionowo

Więcej informacji i opcji po podaniu flagi --help oraz w podręczniku vnstati(1).

Dane do własnego opracowania

Dodatkowo vnStat może wyrzucić dane w formie przystępnej do dalszego przetwarzania, np. aby wyświetlić dane w innym programie (np. conky) lub zaprezentować w wygodny dla siebie sposób.

Dostępne są w tym celu trzy flagi:

Przetwarzanie w praktyce

Poniżej zamieszczam prosty skrypt, który wyciąga najważniejsze — przynajmniej dla mnie — dane (tj. transfer w obecnym dniu oraz miesiącu) i prezentuje je w przystępnej formie:

#!/bin/sh
INTERFACES=${@:-ppp0}
for IFACE in $INTERFACES; do
    vnstat -i "$IFACE" --oneline | awk -v MONTH=$(date +%B) -F';' '{print "Transfery na interfejsie: "$2"\n\n - dzisiaj: "$6" ("$4" ↓ / "$5" ↑)\n - "MONTH": "$11" ("$9" ↓ / "$10" ↑)\n"}' 
done

Przykładowe użycie:

$ transfer
Transfery na interfejsie: ppp0

 - dzisiaj: 14.03 MiB (10.84 MiB ↓ / 3.19 MiB ↑)
 - grudzień: 332.53 MiB (304.65 MiB ↓ / 27.88 MiB ↑)

Jako argument można podać interfejs(-y), dla których dane mają zostać przedstawione statystyki. Jeśli nie zostanie podany żaden interfejs, skrypt wyświetli raport dla ppp0.

Znany jest jeden kosmetyczny błąd — jeśli dla dzisiejszego dnia nie ma żadnych statystyk, skrypt jako „dzisiejsze” dane wyświetli ostatnie dostępne.


Masz ciekawy sposób na zaprezentowanie danych z vnStat? Podziel się na forum [2]!


Przypisy:

  1. http://packages.debian.org/vnstat
  2. http://forum.dug.net.pl