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:
Dzienny:
$ vnstati -i ppp0 -o plik.png -d
Godzinowy:
$ vnstati -i ppp0 -o plik.png -h
Podsumowanie:
$ vnstati -i ppp0 -o plik.png -s
Podsumowanie z godzinami poziomo:
$ vnstati -i ppp0 -o plik.png -hs
Podsumowanie z godzinami pionowo:
$ vnstati -i ppp0 -o plik.png -vs
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:
--oneline
Podstawowe dane w łatwym do przetworzenia formacie.
--dumpdb
Pełne dane, ich przetworzenie może stanowić większe wyzwanie.
--xml
Pełne dane w formacie XML.
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]!