Co to je VnStat
VnStat je malá konzolová utilitka, která čte z jádra operačního systému informace o přenesených datech na jednotlivých rozhraních. Ovládá se hlavně přes příkazovou řádku, ale v OpenWRT je možné s ní částečně pracovat i přes webové rozhraní. Hlavní silou VnStat je jeho jednoduchost, což se odráží jak na použití, tak na sběru dat. V systému jeho přítomnost prakticky nezaznamenáte, daemon, který sbírá data, je nenáročný na systémové prostředky, a pokud nechcete ani toho, můžete aktualizaci provádět občas přes cron. Úkolem VnStat je sbírat souhrnné informace o stavu rozhraní, takže nehledejte nějaké dělení na IP adresy a podobně, všechny údaje se vztahují na fyzickou vrstvu. Výstupem pak je třeba jednoduchá tabulka podobná této:
# vnstat -d
ath0 / daily
day rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
07/10/11 2.49 GiB | 1.42 GiB | 3.90 GiB | 379.11 kbit/s
07/11/11 3.78 GiB | 4.75 GiB | 8.53 GiB | 828.45 kbit/s
07/12/11 4.97 GiB | 888.41 MiB | 5.84 GiB | 567.13 kbit/s
07/13/11 1.33 GiB | 2.50 GiB | 3.83 GiB | 570.18 kbit/s
------------------------+-------------+-------------+---------------
estimated 2.04 GiB | 3.83 GiB | 5.87 GiB |
Podobně lze vypsat statistiku ke dnům, hodinám, týdnům, je možné si zobrazit desítku nejsilnějších dnů a dokonce i jednoduchý textový graf. Krom toho dokáže VnStat vygenerovat statistiku do obrázku, čehož využívá i webové rozhraní OpenWRT. Statistikám ani nějak zvlášť neubližují restarty systému, ale v případě OpenWRT na flash paměti se data samozřejmě s každým restartem ztrácejí.
Historie VnStat sahá až do roku 2002, kdy byla podle changelogu vydána verze 1.0. Sympatické je, že autor mu občas věnuje čas i po takové době. Není to tak dlouho, co byl VnStat jen jednou binárkou, která sbírala data spouštěním v cronu a zároveň zpřístupňovala informace v databázi uživateli. Daemon existuje dodnes bok po boku s „ruční“ aktualizací, ale trvalo dost dlouho, než se distribuce jako Ubuntu nebo Debian na něj rozhodly přejít.
Instalace
Do systému dostaneme VnStat jako každý jiný program, a to přes balíčkovací systém. Pro Debian/Ubuntu platí staré dobré apt-get:
# apt-get install vnstat
A pro OpenWRT obdobně jen s použitím opkg:
# opkg install vnstat
VnStat nepotřebuje žádná zvláštní nastavení, takže po instalaci patřičného balíku by měl fungovat. V případě OpenWRT je dobré zkontrolovat, jestli běží proces vnstatd.
# ps axu | grep vnstatd
1447 root 936 S /usr/sbin/vnstatd -d
A případně ještě zkontrolovat, jestli se bude init skript spouštět po rebootu systému.
# ls -l /etc/rc.d/*vnstat
lrwxrwxrwx 1 root root 16 Jun 5 00:25 /etc/rc.d/S99vnstat -> ../init.d/vnstat
Pokud náhodou ne, tak vytvoříme symlink a tím je instalace u konce.
# cd /etc/rc.d/
# ln -s ../init.d/vnstat S99vnstat
Pokud šlo vše dobře, měli bychom mít v systému utility vnstat pro náhled na statistiky, vnstati pro generování obrázků a vnstatd pro sběr dat. V Debianu/Ubuntu je utilitka vnstati ve zvláštním balíčku.
Může se stát, že chcete monitorovat i víc než jedno rozhraní, které si třeba v případě OpenWRT balíčkovací systém vybere. V takovém případě stačí vytvořit databáze k ostatním rozhraním a vnstatd už se o zbytek postará.
# vnstat -u -i ethX
Konfigurace
Zdrojem nastavení VnStat je konfigurační soubor /etc/vnstat.conf. Ten se objevil společně s daemonem pro sběr dat a rozhodně to je ve vývoji krok vpřed. Je možné v něm upravit výstup statistik pokud vám nevyhovuje nastavení podle lokalizace systému, ovlivnit barevnost výstupu vnstati, logování a hlavně kam se mají ukládat databáze s nasbíranými daty.
V konfiguračním souboru je kolem 46 voleb a ty nejdůležitější najdete v tomto krátkém příkladu.
# Pro vnstat
# Výchozí rozhraní, pokud jiné není zvoleno
Interface "eth0"
# Adresář s databázemi
DatabaseDir "/var/lib/vnstat"
# Jaké se má použít locale, - platí pro systémové
Locale "-"
# který den v měsíci by se měla rotovat měsíční statistika
MonthRotate 1
# Jaké jednotky použít, 0 pro IEC (KiB/MiB/GiB/TiB), 1 pro KB/MB/GB/TB
UnitMode 0
# Pro vnstatd
# Jak často se má mají číst nová data (v sekundách)
UpdateInterval 60
# Jak často ukládat data na disk (v minutách)
SaveInterval 30
# Jak často ukládat data, pokud jsou všechny rozhraní offline (v minutách)
OfflineSaveInterval 30
# Uložit data, pokud je status rozhraní změněn
SaveOnStatusChange 1
# Logování (0 = vypnuto, 1 = logfile, 2 = syslog)
UseLogging 2
# Logfile
LogFile "/var/log/vnstat.log"
# Soubor s PID
PidFile "/var/run/vnstat.pid"
Určitě jste si všimli, že VnStat umí dávat výsledek v různých jednotkách a umí se přizpůsobit i v případě, kdy váš poskytovatel počítá přenesená data od určitého dne v měsíci. Pro majitele routerů s flash pamětí se zase umí přizpůsobit tím, že ukládá data na disk v nastavitelném intervalu, což ocení hlavně flash paměti.
Získáváme data
Jak už bylo řečeno, pro čtení nasbíraných dat se používá utilitka vnstat, a co všechno umí zobrazit, najdeme v nápovědě.
-h, --hours statistika podle hodin
-d, --days statistika podle dnů
-m, --months statistika podle měsíců
-w, --weeks statistika podle týdnů
-t, --top10 posledních
-s, --short stručná statistika
-i, --iface které rozhraní se má zobrazit (jinak výchozí)
-tr, --traffic přenos dat za posledních 5 sekund
-l, --live aktuální přenos dat
Když si pak chcete zobrazit třeba měsíční statistiku na rozhraní eth0, zavoláte:
$ vnstat -i eth0 -m
eth0 / monthly
month rx | tx | total | avg. rate
------------------------+-------------+-------------+---------------
Apr '11 17.53 GiB | 144.70 GiB | 162.23 GiB | 525.04 kbit/s
May '11 15.09 GiB | 185.09 GiB | 200.18 GiB | 626.96 kbit/s
Jun '11 12.67 GiB | 98.70 GiB | 111.37 GiB | 360.43 kbit/s
Jul '11 4.52 GiB | 36.17 GiB | 40.70 GiB | 310.41 kbit/s
------------------------+-------------+-------------+---------------
estimated 11.01 GiB | 88.09 GiB | 99.11 GiB |
Pro web pak jsou třeba zajímavější grafické statistiky vytvořené přes vnstati.
$ vnstati -s -i eth0 -o test.png
Kromě souhrnu pak můžete použít podobné parametry jako u vnstat pro zobrazení hodinové, denní, měsíční statistiky a podobně.
$ vnstati -h -i eth0 -o test.png
$ vnstati -d -i eth0 -o test.png
Uchovávání dat na flash paměti
Řekli jsme si, že v případě OpenWRT se statistika s každým restartem zařízení ztratí. Je to způsobeno tím, že databáze jsou ve skutečnosti uloženy v RAM paměti, konkrétně v souborovém systému tmpfs. OpenWRT takto ukládá všechna data, která by se mohla častěji změnit, aby zabránilo zápisům do flash paměti, které se to nemusí vyloženě líbit. Pokud ale chceme statistiky uchovat, máme několik možností.
První možnost je uložit je na externí disk připojený přes USB. V takovém případě to vyžaduje router s USB a namountování disku do nějakého adresáře, kam nasměrujeme konfigurační direktivu DatabaseDir. Když už USB disk k routeru připojený máte, asi ho budete chtít použít k něčemu náročnějšímu než je ukládání statistik, proto bude asi vhodnější druhá univerzálnější možnost.
Tou je ukládání databáze přímo do flash paměti a nastavení vnstatd, aby zápis prováděl co možná nejméně. V takovém případě nasměrujeme DatabaseDir třeba do /vnstat a upravíme trochu konfiguraci.
SaveInterval 180
OfflineSaveInterval 720
SaveOnStatusChange 0
Tím zařídíme, že VnStat nebude paměť mordovat zas tak moc a data nám z větší části zůstanou. Při restartu se může stát, že o část statistik přijdeme v závislosti na intervalu uložení. To ale u podobného zařízení zas tolik bolet nebude.
Závěr
I když sledování dat patří v domácích podmínkách spíše minulosti, kdy vládly kruté FUPy, určitě si VnStat své fanoušky najde. Instalace i konfigurace je činností na pěti minut a jeho funkce nějak neomezuje další činnosti. Proti třeba komplexnějšímu Collectd jsou jeho požadavky směšné a navíc se jedná o all-in-one řešení, kde uživatel po instalaci najde jak daemona pro sbírání dat, tak utilitku, která mu ty data ukáže.