SNMP nám ale neumožní monitorovat vše. Existuje mnoho zařízení se špatnou nebo žádnou podporou SNMP, které ale umožňují přihlášení do shellu. Mezi ně patří třeba některé WiFi prvky. A na tyto případy je vhodná další metoda získávání dat v Cacti, pomocí skriptu/příkazu. A jaký příkaz nebo skript se bude spouštět, už je na nás. Cacti má po instalaci několik ukázkových použitelných skriptů v perlu a shellu (je možné použít vlastně libovolný jazyk) v adresáři scripts
. Když k tomu přidáme ssh a výměnu klíčů, získáváme silný nástroj a nejsme závislí jen na SNMP.
Tímto způsobem monitoruji například počet uživatelů přihlášených v systému, množství spamů a hamů, teplotu získávanou z čidla na sériovém portu, úrovně signálů připojených wifi klientů, … Dále existují skripty, které parsují status page Apache, množství dotazů MySQL, …
Cacti se skripty funguje následovně – na cílovém serveru si připravíme shell (perl, awk, php, co kdo preferuje) skript, který bude vracet požadovanou hodnotu nebo hodnoty, formát si upřesníme později. Dále si zde založíme uživatele, pro něho si vygenerujeme ssh klíč bez passphrase a vyměníme si jej se strojem s Cacti. Díky tomu je proces získávání dat automatický a Cacti se bude moci přihlásit bez zadání hesla na monitorovaný stroj a spustit náš skript, který vypadá podobně:
$ ssh uzivatel@monitorovany.stroj.cz '~/muj_skript.sh'
Na vzdáleném stroji se vykoná skript muj_skript.sh
, který spustí nějaké příkazy, zpracuje jejich výstup a požadované hodnoty vypíše na standardní výstup. Ty pak na serveru Cacti dostáváme jako výstup příkazu ssh. A tento výstup už zpracuje Cacti.
Další možností je spouštět skript přímo na stroji s Cacti a tam si vše zpracovávat a výsledek poslat na standardní výstup. Odpadá nám potom nutnost mít na cílových serverech skripty, stačí jen vyměnit ssh klíče, ale zase můžeme trochu ztrácet přehlednost nebo při použití na různých serverech můžeme chtít jiné volání nebo drobnou změnu. Takže zde máme možnost volby.
Tolik teorie, teď praxe. Popíši, jak grafovat hodnotu load, budeme zobrazovat tři hodnoty v jednom grafu pro 1, 5 a 15 minut. Výsledek bude vypadat přibližně takto:
Začneme na stroji, který chceme monitorovat. Na něm musíme mít funkční sshd. Přidáme uživatele, pojmenuje ho třeba Cactiquery
. Není nutná žádná specialita, jen musí mít nějaký shell, aby bylo možné přihlásit se a spustit příkaz. Do jeho domovského adresáře uložíme skript load.sh:
#!/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin uptime | awk ' {gsub(",",""); printf("1min:%2.2f 5min:%2.2f 15min:%2.2f",$10, $11,$12)}'
Výstup vypadá následovně:
1min:1.81 5min:1.27 15min:1.15
Formát je jednoduchý, vždy je návěští a za dvojtečkou hodnota. Za mezerou je pak další hodnota. Celkem máme tři hodnoty, pro 1, 5 a 15 minutový load. Pokud bychom chtěli získávat jen jednu hodnotu, je formát ještě jednodušší, stačí zobrazit jen samotné číslo bez návěští. To je na tomto stroji vše.
Na monitorovacím serveru si pro uživatele Cacti vygenerujeme ssh klíče (předpokládáme openssh na obou strojích). Jak správně generovat klíče se dočtete v jiném článku. Zde jen v náznaku:
su cacti ssh-keygen -t dsa
Nevyplňujeme passphrase a potom soubor id_dsa.pub zkopírovat na cílový stroj do domovského adresáře uživatele cactiquery /home/cactiquery/.ssh/authorized_keys.
Ještě je nutné jednou přihlásit na monitorovaný stroj stejně, jako to bude dělat Cacti. Při prvním přihlášení je nutné potvrdit, že souhlasíme s připojením k tomuto hostu. Takže na stroji s Cacti spustíme:
su cacti cacti@mail ~ $ ssh cactiquery@server.firma.cz The authenticity of host 'server.firma.cz (11.22.33.26)' can't be established. DSA key fingerprint is 73:9a:24:be:ef:e4:77:aa:a8:94:9b:f2:49:fa:f6:73. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'server.firma.cz' (DSA) to the list of known hosts. Password:
Potom si můžeme ještě zkusit, že skript funguje správně:
ssh cactiquery@server.firma.cz './load.sh' 1min:0.00 5min:0.00 15min:0.00
Nyní už se vše bude odehrávat na straně Cacti. Nejprve musíme přidat stroj, který chceme monitorovat. V menu zvolte "New graphs"
a potom vpravo "Create new host"
. Druhou možností je v "Devices"
kliknout na "Add"
. Vyplníme popis, DNS jméno nebo IP adresu, jako Host template zatím zvolte none
, později si povíme, co se zde dá ještě dělat. A nakonec vybereme typ testování dostupnosti stroje. Možno je pomocí SNMP a pingu. U pingu můžeme zvolit ICMP, TCP nebo UDP ping. Na ICMP ping pozor na některých unixech. Poller (program testující dostupnost a získávající data) musí běžet s právy, které umožní ICMP ping. Poslední možností je dostupnost netestovat a rovnou se ptát na hodnoty. Jen malá odbočka – pokud zapnete testování dostupnosti, lze si posílat informaci o výpadcích zařízení e-mailem. Tím máme založený stroj, který chceme testovat.
Nyní máme připravený monitorovaný stroj, pokud testujeme i dostupnost, začnou nám chodit e-maily o jeho stavu (v případě, že máme v nastavení zadanou e-mailovou adresu a vytvořené spojení na SMTP server). V Cacti teď musíme vytvořit metody a šablony pro získávání dat a jejich prezentaci. A to si ukážeme příště.