Čo Nagios dokáže?
Nagios je názov rekurzívnym akronymom slovného spojenia N.A.G.I.O.S. – „Nagios Ain't Gonna Insist On Sainthood“, čo by sa do slovenčiny dalo voľne preložiť ako: „Nagios, nie je pripravený stať sa svätým“. Tento projekt mal pôvodne názov Netsaint, v roku 2002 bol ale premenovaný na Nagios. Nagios vie testovať najrôznejšie sieťové služby ako sú: ping, veľkosť diskových kvót, bežiace procesy, zaťaženie systému, system uptime, vyťaženosť procesorov, S.M.A.R.T test HDD atď… Program je vydávaný pod licenciou GNU GPL, čiže je voľne k dispozícii na osobné a aj komerčné použitie a je ho možné kopírovať, distribuovať, modifikovať. Samotné jadro Nagiosu nevie testovať žiadne služby. Na túto prácu slúžia tzv. zásuvné moduly (pluginy). Tieto pluginy sú maličké programy a skripty, ktoré vykonávajú testy jednotlivých služieb. Výstup (stdout) na terminál musí obsahovať do 80 znakov a návratový kód od hodnoty 0 do 3. Neskôr vysvetlím, čo znamenajú tieto čísla.
Teraz by som chcel vysvetliť, aké stavy vie Nagios z pluginov vyhodnotiť:
OK = 0 | Plugin je schopný otestovať službu a je vyhodnotený ako korektne pracujúca služba. |
Warning = 1 | Plugin je schopný otestovať službu, avšak je vyhodnotený ako „warning“, pretože dosiahol varovnú hodnotu zadefinovanú administrátorom. |
Critical = 2 | Plugin vyhodnotí stav „critical“, pokiaľ daná službu z nejakého dôvodu nebeží alebo dosiahol kritickú hodnotu zadefinovanú administrátorom. |
Unknown = 3 | Plugin vyhodnotí stav ako „unknown“, pokiaľ plugin nie je schopný otestovať službu, nie je schopný prečítať dáta z pasívneho testu alebo nastala neznáma chyba, všeobecná chyba. |
Aké meracie metódy Nagios používa?
Meracie metódy môžeme rozdeliť do dvoch skupín:
1. Pasívne 2. Aktívne
Pasívne monitorovanie:
Cieľom pasívneho monitorovania je iba počúvanie sieťového prenosu na sieti, pričom do siete nie sú posielané žiadne testovacie pakety. Výhoda tejto testovacej metódy je tá, že nezaťažuje dodatočne počítačovú sieť.
Aktívne monitorovanie:
Aktívne monitorovanie sa spolieha na schopnosť aplikácie testovacích paketov do siete, alebo posielania paketov na servery, čím vlastne meria a sleduje ich služby. Nevýhoda tohto testovania je tá, že testovanie má za následok aj možné zvýšenie zaťaženia siete a niekedy aj jej preťaženie.
Ako vie Nagios oznamovať vzniknuté problémy?
1. V prípade vzniknutého problému bude administrátor upozornený pomocou emailovej správy. 2. V prípade vážnejšieho problému bude administrátor upozornený pomocou SMS správy.
Inštalácia Nagiosu a NSCA
Nagios som inštaloval na operačnom systéme FreeBSD 8.1 Stable
s aktuálnymi portami. Na čo slúži NSCA program si vysvetlíme neskôr.
1. portinstall nagios nagios-plugins nsca
2. V súbore /etc/rc.conf
je nutné pridať nasledujúce riadky, ktoré mi zaručili automatické spúšťanie po štarte systému:
nagios_enable="YES" nsca_enable="YES"
3. Ako webserver som použil lighttpd-1.4.28_4
a do lighttpd.conf
som pridal následovné hodnoty:
# nastavenie document rootov priečinkov "/nagios/" a "/nagios/cgi-bin/" alias.url += ("/nagios/cgi-bin/" => "/usr/local/www/nagios/cgi-bin") alias.url += ("/nagios/" => "/usr/local/www/nagios") # zapnutie akceptovanie .cgi prípon súborov $HTTP["url"] =~ "/cgi-bin/" { cgi.assign = ( ".cgi" => "" ) } ## definovanie typu autentifikácie auth.backend = "htpasswd" ## umiestnenie súbora s meno a heslom (hash) auth.backend.htpasswd.userfile = "/usr/local/etc/nagios/htpasswd.users" # zapnutie autentifikácie pre priečinok "nagios" auth.require = ( "/nagios" => ( "method" => "basic", "realm" => "Nagios login", "require" => "valid-user" ) )
4. V konfiguračnom súbore modules.conf
odkomentujeme:
server.modules = ( "mod_auth", # podpora autentifikácie "mod_fastcgi" # podpora fastcgi )
5. Následne si vytvoríme password backend príkazom:
htpasswd -c /usr/local/etc/nagios/htpasswd.users [user]
6. V súbore cgi.cfg
musíte definovať práva na čítanie alebo kompletnú správu webovej časti Nagiosu pre daného užívateľa [user].
7. Nakoniec treba otestovať, či sa spustí webové rozhranie:
http:///nagios
Objekty (objects)
Nagios používa na definovanie testovaných služieb tzv. objekty. Sú to konfiguračné súbory definované v konfiguračnom súbore nagios.cfg
. Tieto objekty konfiguračných súborov sa umiestňujú zväčša do priečinka „objects“.
Definovanie hosťov | cfg_dir=/usr/local/etc/nagios/objects/hosts.cfg |
Definovanie monitorovaných služby | cfg_dir=/usr/local/etc/nagios/objects/services.cfg |
Definovanie kontaktov | cfg_file=/usr/local/etc/nagios/objects/contacts.cfg |
Definovanie časových intervalov notifikácií | cfg_file=/usr/local/etc/nagios/objects/timeperiods.cfg |
Definovanie príkazov | cfg_file=/usr/local/etc/nagios/objects/commands.cfg |
Definovanie kontaktných skupín | cfg_file=/usr/local/etc/nagios/objects/contactgroups.cfg |
Definovanie skupín pre hostiteľov | cfg_file=/usr/local/etc/nagios/objects/hostgroups.cfg |
Definovanie skupín pre služby | cfg_file=/usr/local/etc/nagios/objects/servicegroups.cfg |
Definovanie eskalácií | cfg_file=/usr/local/etc/nagios/objects/escalations.cfg |
Definovanie informácií o hosťoch | cfg_file=/usr/local/etc/nagios/objects/hosttesxtinfo.cfg |
Editácia konfiguračných súborov
Riadky, ktoré začínajú znakom „#“, sú považované za komentár a nebudú spracované.
Riadky, ktoré následujú po znaku „;“, sú považované za komentár a nebudú taktiež spracované.
Definovanie zariadení (Host Definition)
V tomto konfiguračnom súbore sa definujú monitorovacie zariadenia napr. pracovné stanice, servery, tlačiarne atď, ktoré majú IP adresu alebo hostname. Parameter check_command
popisuje, aký zadefinovaný príkaz, ktorého definícia je popísaná v konfiguračnom súbore commands.cfg
. Ďalším parametrom je max_check_attempts
, ktorý udáva maximálny počet opakovaní testu, pokiaľ nebude zariadenie vyhodnotené s chybovým hlásením. Ak by nastala takáto udalosť, tak parametrom retry_interval
sa určí hodnota v minútach za aký čas budú vykonávané ďalšie testy, inak sú testy vykonávané každé 4 minúty o čom hovorí parameter check_interval
. Ďalej následuje flap detekcia
čo znamená, že pokiaľ začnú kolísať stavy v krátkom časovom úseku, tak sa vypnú notifikácie, aby nás nezahltili notifikácie. Parameter notification_interval
znamená, čas v sekundách ako často budú odosielané notifikácie administrátorov definovaných v contacts.cfg
. Typ perióda notifikácií, je definovaná v timeperiods.cfg
. V tomto prípade je to „24×7“, čo znamená neustále odosielanie notifikácií.
.... define host{ name generic-host ; názov šablóny notifications_enabled 1 ; Notifikácie sú zapnuté event_handler_enabled 1 ; Zapisovanie udalostí do "even handlera" je zapnuté flap_detection_enabled 1 process_perf_data 1 ; Povolenie logovanie všetkých stavov (ok, critical, warning) do logov retain_status_information 1 ; Uchováva informácie o stave ak sa program reštartuje retain_nonstatus_information 1 ; Retain non-status information across program restarts register 0 ; } define host{ use generic-host ; použi "generic-host" šablónu name server ; názov template active_checks_enabled 1 ; aktívne testovanie je zapnuté passive_checks_enabled 0 ; pasívne testovanie je vypnuté max_check_attempts 3 ; počet opakovaných testovaní, ak sa test nevyhodnotí ako "ok" check_interval 4 notification_interval 120 ; interval notifikácií v sekundách notification_period 24x7 notification_options w,d,u,r ; pri ktorých stavoch sa má posielať notifikácia: w=warning, d=down, u=up, r=recovery register 0 host_name example.org ; hostname servera alias example.org ; alias address 82.zz.yy.xx ; IP adresa servera } ....
Parameter „notifcation_options“
Parameter | Význam |
w | varovný stav služby – WARNING |
c | varovný stav služby – CRITICAL |
r | varovný stav služby – RECOVERY |
u | varovný stav služby – UNREACHABLE |
n | oznámenia nebudú posielané |
Definovanie služieb (Service Definition)
V tejto časti sa definujú služby, ktoré chceme testovať pomocou „!“, za ktorým následuje argument1, argument2, argumenent[n]
… (check_mysql_query!argument1!argument2!argumenent[n]). Test je aktívny, pretože testujeme aktuálny systém kde beží Nagios a notification_period
je nastavený na workhours
, čo znamená, že v pracovné dni od 9:00 hodiny do 18:00 v podvečer.
.... define service{ use generic-service name active active_checks_enabled 1 passive_checks_enabled 0 is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 1 retry_check_interval 3 notification_interval 120 notification_period workhours notification_options w,u,c,r register 0 } define service{ use active host_name example.org service_description SSH contact_groups admins ; definícia "admins" je v hostgroups.cfg check_command check_mysql_query!'select * from mantis_user_table'!2!5!mantis!mantis!MantiS } ....
Syntax pluginu „check_mysql_query“ je následovný:
check_mysql_query -q SQL_query [-w warn] [-c crit] [-H host] [-P port] [-s socket] [-d database] [-u user] [-p password]
Preto som nastavil argumenty, ktoré vidíte hore takto:
$ARG1$ = 'select * from mantis_user_table' --> -q SQL_query $ARG2$ = 2 --> [-w warn] $ARG3$ = 5 --> [-c crit] $ARG4$ = mantis --> [-d database] $ARG5$ = mantis --> [-u database] $ARG6$ = MantiS --> [-p password]
Tieto argumenty treba definovať v commands.cfg
, aby sa pravidelne vykonávali. Ďalej poďme na samotné príkazy.
Definovanie príkazov (Command Definition)
Tu sa definuje syntax príkazov pomocou argumentov, ktoré sú definované v services.cfg
.
.... define command{ command_name check_mysql_query command_line $USER1$/check_mysql_query -q $ARG1$ -w $ARG2$ -c $ARG3$ -H localhost -d $ARG4$ -u $ARG5$ -p $ARG6$ } define command{ command_name check_ftp command_line $USER1$/check_ftp -H localhost -p $ARG1$ -S -w $ARG2$ -c $ARG3$ } ....
Definovanie kontaktov (Contact Definition)
V tomto súbore je definovaný kontakt na systémového administrátora, ktorý má na starosti dané služby v čase definovanom v parametri service_notification_period
a ako spôsob notifikácie je nastavené odosielanie emailov. O tom hovorí zasa parameter service_notification_commands
. E-maily budú odosielané, iba ak bude test služby vyhodnotený v parametri service_notification_options
a to: w=warning, u=unreachable, c=critical, r=recovery
.
.... define contact{ contact_name peto alias Meno Priezvisko service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,u,r service_notification_commands notify-by-email host_notification_commands host-notify-by-email email example@example.org } ....
Definovanie časových intervalov (Time Period Definition)
Táto definícia je dôležitá, pretože v nej definujeme administrátora, deň a čas kedy sa mu majú odosielať notifikácie o problémoch. V aktuálnom príklade sú notifikácie zapnuté 24 hodín denne. Tieto notifikácie sa budú odosielať osobám, ktoré boli zadefinované v contacts.cfg
.
.... define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 } define timeperiod{ timeperiod_name workhours alias only workhours monday 09:00-18:00 tuesday 09:00-18:00 wednesday 09:00-18:00 thursday 09:00-18:00 friday 09:00-18:00 } ....
Definovanie skupín kontaktov (Contact Group Definition)
V tejto definícii sa pridáva do parametra members
administrátori, ktorí patria do skupiny „admins“, pre použitie v contacs.cfg
.
.... define contactgroup{ contactgroup_name admins alias Administrators ; alias members jano,peto ; členovia v tejto skupine "admins", ktorí sa nachádzajú v contacs.cfg } ....
Definovanie skupín pre hostiteľov (Host Group Definition)
.... define hostgroup{ hostgroup_name remote ; pomenovanie skupiny hostiteľov, ktoré sa použijú v services.cfg alias Remote Host ; alias members example.org ; člen skupiny "example.org" definovaný v services.cfg } ....
Definovanie skupín pre služby (Service Group Definition)
Definovanie skupín pre služby slúži napr. na zotriedenie služby ping
všetkých serveroch v sieti.
.... define servicegroup{ servicegroup_name ping alias ping } ....
Definovanie eskalácií služieb (Service Escalation Definition)
Definovanie eskalácií služieb je veľmi dôležitá vec pokiaľ chcete, aby pri chybovej udalosti vám nechodili správy každých 120 minút (2 hod. default) definované v services.cfg
. Tu máte možnosť definovať pre jednotlivé služby alebo pre hosťov prvú a poslednú notifikáciu vo vami definovanom intervale. Napr. chcete, aby vám prišli najprv e-maily a až potom otravné sms-ky napr. až po piatom e-mailovom upozornení.
.... define serviceescalation{ host_name example.org service_description FTPs ; testovaná služba, názov musí sedieť s názvom služby zadefinovanej v súbore services.cfg first_notification 1 ; pošle hneď prvú notifikáciu last_notification 10 ; posielanie notifikácií skončí pri 10 notifikácii (pokiaľ zadáte "0" tak sa budú odosielať "donekonečna") notification_interval 60 ; interval týchto posielaní je 60 minút. (počíta sa interval_lenght zadefinovaný v nagios.cfg) contact_groups admins ; kontaktná skupina } ....
Poznámka: je povolené definovať iba jednu správu ako: first_notification=1
, last_notification=0
a notification_interval=0
. Exvivalent je: first_notification=1
, last_notification=1
a notification_interval=xy
.
Definovanie eskalácií hosťov (Host Escalation Definition)
Táto definícia slúži na to, ak chcete eskalovať jednotlivých hosťov. V tomto prípade je zadefinovaná služba FTPs
. Parameter contact_groups
ukazuje, že budú posielané sms-ky, ale až od 5 (first_notification)
do 8 (last_notification)
notifikácie v časovom intervale 60 sekúnd (notification_interval)
.
.... define hostescalation{ host_name example.org service_description FTPs ; testovaná služba, názov musí sedieť s názvom služby zadefinovanej v súbore services.cfg first_notification 5 ; pošle v poradí až piatu sms notifikáciu last_notification 8 ; posielanie notifikácií skončí pri 8 notifikácii (pokiaľ zadáte "0" tak sa budú odosielať "donekonečna") notification_interval 60 ; interval týchto posielaní je 60 minút. (počíta sa interval_lenght zadefinovaný v nagios.cfg) contact_groups admins-sms } ....
Definovanie rozšírených informácií o hosťoch (Extended Host Information Definition)
Rozšírené informácie o hosťoch slúžia na bližšiu identifikáciu jednotlivých hosťov.
.... define hostextinfo{ host_name example.org notes This is the primary Netware file server notes_url http://webserver.my_domain.org/hostinfo.pl?host=example.org icon_image novell40.png icon_image_alt IntranetWare 4.11 vrml_image novell40.png statusmap_image novell40.gd2 2d_coords 100,250 3d_coords 100.0,50.0,75.0 } ....
Pokiaľ si chcete otestovať, či je vaša Nagios konfigurácia správna, použite následovný príkaz:
nagios -v /usr/local/etc/nagios/nagios.cfg
Malo by vypísať niečo takéto: „Things look okay – No serious problems were detected during the pre-flight check“.
Ešte niečo o umiestneniach Nagios súborov v systéme.
/usr/local/etc/nagios | konfiguračné súbory |
/usr/local/libexec/nagios | Nagios plugins |
/var/spool/nagios | Nagios logy |
/usr/local/bin | Nagios spúšťací súbor |
Záver
Dnešný článok sa končí a nabudúce by som rád vysvetlil spôsoby, akým Nagios testuje vzdielené servery, ich služby a ako nastaviť práva webového frontendu. Ďalej by som chcel vysvetliť, ako si vytvoriť svoj vlastný plugin a testovať konkrétnu službu, ktorú práve chceme mať pod kontrolou.