Hlavní navigace

VnStat: statistiky nejen pro OpenWRT

Adam Štrauch

Vedení statistik by měla být jedna z funkcí každého správného routeru a u routerů, které připojují uživatele do nějakým způsobem omezené sítě, to platí dvojnásob. Někdy ale není potřeba nic komplikovaného a prostý údaj, kolik bylo kdy přeneseno, bohatě postačí. A tady nastupuje jednoduchý a spolehlivý program VnStat.

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.

Našli jste v článku chybu?
15. 7. 2011 10:47

Já článek hodnotím kladně, vnstat jsem neznal a docela jej v síti využiju. Vůbec by mi nevadilo více podobných článků. :)