Tento článek bude o generování grafů z rrd databází plněných daemonem collectd. Pokud collectd neznáte, určitě se podívejte na náš článek POSIXový sběratel collectd ve vašich službách. V něm se dozvíte všechno potřebné k tomu, abyste se mohli dostat do problému popsaném v následujících odstavcích.
Není pochyb o tom, že Collectd je vynikající nástroj. Je víceméně jediný svého druhu, dokáže zaznamenávat téměř real-time a zbytečně nezatěžuje stroj, protože má pluginy napsané v C. Vývojářům se podařilo sjednotit vývoj pluginů, ale co se týče frontendu, tam už to tak slavné není. Data z collectd si můžete zobrazit graficky pomocí několika projektů, které najdete v seznamu frontendů v projektové wiki. Bohužel žádný z nich není 100% a všichni trpí alespoň jedním z následujících problémů:
- Nepodporuje ani ty nejdůležitější pluginy
- Instalace není vždy úplně standardní
- Nevyvíjí se
- Uživatelsky nepřívětivý
Na první problém vůbec nemusíte narazit. Rozhodnete se sbírat data o zatížení procesoru, využití paměti, přidáte nějaké to volné místo na disku a prakticky se už rozhodujete jen podle obtížnosti nasazení a grafické stránky. Ale jak přijde snmp plugin nebo třeba jen sledování požadavků chodících na Apache či Nginx, tak zjistíte, že podpora chybí. Jako druhý problém vidím fakt, že co frontend, to unikát v kombinaci použitého jazyka a způsobu nasazení. Plugin do MoinMoin mě jako správce sítě neosloví a ani kombinace Perl+Pythoní web server není zrovna standardní a na první pohled může trochu vyděsit. Dalšími kandidáty jsou Ruby on Rails, čistý Perl, čisté PHP nebo implementace na straně klienta v jQuery. Když už si vyberte a vyhovuje vám i uživatelské rozhraní, tak zjistíte, že jde o projekt, o který se už roky nikdo nestará a není šance, že by v něm byl opraven bug či byla přidána podpora nových pluginů.
Vývojáři collectd si bohužel nevzali frontend pod svá křídla, vývoj se rozdělil a nyní je těžké najít nějaké plně funkční řešení. Uživatel má tedy dvě možnosti, buď si vybrat projekt, který sedí nejvíce a případně ho upravit, nebo si napsat něco sám. Já se nakonec po mnoha pokusech usadil u projektu collectd-web. Přesto že není úplně ideální a už to je pár měsíců, co do něj někdo odeslal patch, tak má potenciál.
Collectd-web
Collectd-web je napsaný z velké části v Perlu, z menší části v Pythonu a uživatelské rozhraní je v HTML+jQuery. Pro svůj běh používá pythoní webový server a velmi dobře funguje s nedávno recenzovanou utilitkou Supervisor. Kombinace Pythonu a Perlu byla zvolena pravděpodobně z toho důvodu, že součástí zdrojáků collectd je i perlový skript, který umí kreslit grafy včetně jednoduchého webového rozhraní. Tento skript je dost nepřehledně napsán, takže ho autor collectd-web rozdělil a přes CGI ho napojil na pythoní server. O komunikaci s uživatelem se pak stará HTML a jQuery. I když nejde o extra čisté řešení, tak funguje, a dovolím si tvrdit, že jde o to nejlepší možné, co lze z aktuálních nástrojů dostat. Pythoní web server ho dělá jednoduše vyzkoušitelným a když se trochu prokoušete adresářovou strukturou, zjistíte, že jde nasadit na jakémkoli webovém serveru, který podporuje CGI.
Podpora pluginů je u tohoto nástroje klíčová a collectd-web si poradí s těmito:
- apache
- cpu
- interfaces
- iptables
- cpu
- df
- disk
- dns
- entropy
- hddtemp
- irq
- lighttpd
- load
- memory
- mysql
- nfs
- ping
- processes
- swap
- tcp_connections
- cpufreq
- users
- snmp
A naštěstí není tak složité do souboru graphdefs.cgi dopsat další.
Zdrojový kód je otevřený a najdete ho na GitHubu. Na stejném místě najdete i repositáře dalších uživatelů, kteří si projekt upravili podle svého a některé patche by se mohly hodit i vám. Instalace a konfigurace je jednoduchá. V prvním kroku si stáhněte repositář z GitHubu:
$ git clone https://github.com/httpdss/collectd-web.github
Pak je potřeba vytvořit soubor /etc/collectd/collection.conf a do něj uložit cestu k datům z collectd. Například takto:
datadir: "/var/lib/collectd/rrd/"
Když je hotovo, zkuste spustit pythoní web server:
$ cd collectd-web
$ python runserver.py
Pokud chybí nějaká závislost, bude to pravděpodobně nějaká perlí knihovna a stačí ji doinstalovat. Když vše běží, mělo by se vám objevit uživatelské rozhraní se seznamem strojů a po kliknutí i seznam dostupných informací. Jak jsem napsal výše, rozhraní je kombinace HTML+jQuery a kliknutím se nenačítá nic jiného než nové grafy. Ty jsou generovány Perlem na straně serveru. Rozhraní není nic, co by vyhrálo soutěž krásy, ale funguje dobře a splňuje svůj účel. Jednotlivé grafy lze posouvat v čase a měnit zobrazený časový interval.
Shrnutí
Collectd-web je jeden z mnoha frontendů pro collectd. Není úplně dokonalý, ale vzhledem k situaci, která v této oblasti vládne je jedním z nejperspektivnějších, které můžete použít. Není složité do něj dopsat další definice grafů a rozhraní dokáže rozšířit každý kdo vládne trochu HTML a JavaScriptu. Samozřejmě je tu i druhá stránka, projekt není aktivně vyvíjený ani jeho autorem ani dalšími uživateli. Navíc chybí podpora pro mnoho pluginů, které jsou v collectd novinkou, ale i pro velké množství těch starších. Pokud hledáte způsob, jak zobrazit své grafy, je collectd-web tím nejlepším bodem, od kterého v současné době začít, ale bez úprav se možná neobejdete.