Cacti: ziskávání vlastních dat pomocí SSH

31. 7. 2009
Doba čtení: 4 minuty

Sdílet

V dnešním článku o Cacti se podíváme na monitorování libovolných dat v systému Linux. Cacti je dobře připravený systém pro získávání dat ze SNMP všech verzí. Snadno se tak vykresluje třeba vytížení CPU, síťové karty a dalších zařízení. Hodně SNMP šablon je připraveno přímo v instalaci nebo se dají stáhnout.

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:

Cacti load

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ě:

ict ve školství 24

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ě.

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.