Dohľadové systémy 2 - Nagios I

14.07.2008 23:14 | betmen

Po minulo týždňovom úvode prišiel na rad Nagios. Dnes sa dostaneme k jeho spusteniu v úplne základnej konfigurácii.


V rámci malej rekapitulácie zopakujem, že ide o systém na monitorovanie siete, systémov a služieb. Je vydávaný pod licenciou GNU GPL 2 [1].

Tiež som spomenul, že v oficiálnych balíkoch pre CentOS 5.2 sa nenachádza a sľúbil som popísať ako ho získať. V podstate sú na výber 2 repozitáre tretej strany alebo možnosť použiť nagios.spec, ktorý sa nachádza v zdrojovom balíku Nagiosu. Určite tých repozitárov existuje viac ako 2, ale práve tieto dva pokladám ja a veľká časť sveta za dôveryhodné. Známejším a veľa utrápených duší zachraňujúcim je repozitár od človeka, ktorý sa volá Dag Wieers. V jeho repozitári je množstvo balíkov pre RHEL ako aj Fedoru, preto je to jedna z dobrých volieb, keď je treba niečo nájsť. Žiaľ, v jeho repozitári je iba Nagios 2.12.

Druhý repozitár sa volá EPEL (spomenutý aj v diskusii pod predošlou časťou seriálu) a spravuje ho Fedora project. Jeho úlohou je poskytovať pre RHEL (a tým aj pre klony ako CentOS a iné) balíky pôvodne vydávané pre Fedoru. Po jeho nainštalovaní ale zistíme to isté, čo v prípade Dagovho repozitára. Preto sa vrátime k tretej spomenutej možnosti – vytvorenie balíka z nagios.spec.

Na uvarenie polievky potrebujeme rpm-build a kompilátor, preto:

[root@virtuator src]# yum install rpm-build gcc

Malá fintička, .spec bude potrebovať nasledovné balíky, takže aby zbytočne nehádzal rpmbuild chyby, nainštalujeme ich už teraz:
yum install gd-devel zlib-devel libpng-devel libjpeg-devel

Stiahneme balík nagiosu:

wget http://switch.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.3.tar.gz
tar zxf nagios-3.0.3.tar.gz
cp nagios-3.0.3/nagios.spec ./

Len pre administratívnu správnosť editneme tretí riadok kde 1.fc4.test vymeníme za 1.el5 alebo kľudne aj svätojánsku mušku, nie je to dôležité.
mv nagios-3.0.3.tar.gz ./redhat/SOURCES/
rpmbuild -ba nagios.spec


Wrote: /usr/src/redhat/SRPMS/nagios-3.0.3-1.el5.src.rpm
Wrote: /usr/src/redhat/RPMS/i386/nagios-3.0.3-1.el5.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/nagios-www-3.0.3-1.el5.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/nagios-devel-3.0.3-1.el5.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.94855
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd nagios-3.0.3
+ rm -rf /var/tmp/nagios-buildroot
+ exit 0

Použil som -ba lebo aj .rpm aj .srpm prikladám k tomuto textu. Spec súbor je pripravený vytvoriť hlavný nagios balík, balík pre web a devel balík. Devel si všímať nebudeme.

rpm -i ./redhat/RPMS/i386/nagios-3.0.3-1.el5.i386.rpm
rpm -i ./redhat/RPMS/i386/nagios-www-3.0.3-1.el5.i386.rpm

Balík nainštaluje init súbor do /etc/init.d/nagios, konfigurácie do /etc/nagios, /usr/lib/nagios, vloží niekoľko súborov do /usr/sbin a dokumentáciu do /usr/share/doc. Www balík si pridá nagios.conf do /etc/httpd/conf.d a cgi skripty do /usr/lib/nagios.

Rovnako vyrobíme nagios-plugins, aktuálna je verzia 1.4.12 ale ak ste leniví, kľudne napr. z EPEL repozitára použite 1.4.11. Postup pre vytvorenie balíka nejdem duplikovať.

Nagios-plugins si vypýtajú Net::SNMP modul z Perlu, ktorý normálne CentOS opäť neobsahuje. Nainštalujem ho preto z EPEL repozitára (ak chcete, tak si nainštalujte aj cez perl cpan):

yum install perl-Net-SNMP

Potom už len posledný krok:
rpm -i /usr/src/redhat/RPMS/i386/nagios-plugins-1.4.12-1.i386.rpm

Tu sa viac-menej končí CentOS špecifický proces, prechádzame teda ku konfigurácii:

cd /etc/nagios&&ls
cgi.cfg  commands.cfg contacts.cfg  nagios.cfg  resource.cfg  timeperiods.cfg

Začnem so súborom contacts.cfg, ktorý obsahuje kontaktné skupiny a jednotlivé kontakty. Skupiny sú užitočné preto, lebo môžete mať napríklad webmastrov a databázových správcov, kde každá skupina dostáva upozornenia iba o svojich priekakoch ale niektorý webmaster musí vedieť aj o výpadkoch databáz a povedzme že ich má oprávnenie opravovať. Preto ho rozhádžeme do viacerých skupín a nemusíme ho všade ručne pridávať.

Vytvorím nový contacts.cfg obsahujúci nasledovné údaje:

define contact {
contact_name jankohrasko
alias Janko Hrasko
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f
host_notification_options d,u,r,s
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email janko@hrasko
}
define contact {
contact_name panvesmiru
alias Pan Vesmiru
service_notification_period workhours
host_notification_period workhours
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 pan@vesmiru
}
############################
define contactgroup {
contactgroup_name network-admins
alias Sietovi Adminkovia
members panvesmiru
}
define contactgroup {
contactgroup_name operators
alias Operatori
members jankohrasko, panvesmiru
}

contact_name – označenie kontaktu
alias – alias ktorý je viac ľudsky prívetivý
service_notification_period – udáva čas, kedy má danému kontaktu posielať notifikácie, v prvom prípade je to 24x7, takže notifikácie posiela vždy. V druhom prípade je uvedené workhours. Aj skratka 24x7 aj workhours sú definované v súbore timeperiods.cfg nachádzajúcom sa v tom istom adresári. Workhours si môžete upraviť napríklad od 8:30 do 17:00 čo je u nás bežnejšie ako prednastavená hodnota 9:00 – 17:00. Rovnako si tam môžete nadefinovať výluky počas sviatkov a podobne.
host_notification_period – detto, čo aj pri službách.
service_notification_options – písmená vytvárajú skratky podmienok, za akých sa má posielať notifikácia; w-warning (služba má dlhé odozvy ale ešte je dostupná), u – neznámy status (často znamená chybný plugin resp jeho nesprávne používanie atď), c – critical, r – recovery. Okrem nich sú ešte f – flapping, ide o to že služba nejde,ide,nejde,ide,nejde,ide a n – neposiela žiadne notifikácie.
host_notification_options – d – host down, u – host unreachable, r, f a n sú zhodné ako pri službách, host ešte obsahuje s – notifikáciu na plánovaný začiatok a koniec nedostupnosťi
service_notification_commands – čo má vykonať pre upozornenie kontaktu o zmene stavu. Štandardne posiela len email, je možné nadefinovať viacero spôsobov naraz (napríklad cez sms bránu – dosť nešťastné ak vypadne network a brána je nedostupná) alebo cez pripojený mobil (definovanie commandov popíšem neskôr).
host_notification_commands – v podstate detto čo pri službách
email – email, na ktorý bude zasielať notifikácie

Potom ešte niekoľko options, ktoré si môžete nájsť v oficiálnej dokumentácii ale ja ich tu nepoužijem.

Ďalším súborom je už spomenutý timeperiods.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 Normal Work Hours
monday 08:30-17:00
tuesday 08:30-17:00
wednesday 08:30-17:00
thursday 08:30-17:00
friday 08:30-17:00
}
define timeperiod{
timeperiod_name none
alias No Time Is A Good Time
}
define timeperiod{
name us-holidays
        timeperiod_name        us-holidays
        alias                  U.S. Holidays
        january 1              00:00-00:00    ; New Years
        monday -1 may          00:00-00:00    ; Memorial Day (last Monday in May)
        july 4                  00:00-00:00    ; Independence Day
        monday 1 september      00:00-00:00    ; Labor Day (first Monday in September)
        thursday -1 november    00:00-00:00    ; Thanksgiving (last Thursday in November)
        december 25            00:00-00:00    ; Christmas
        }
define timeperiod{
        timeperiod_name 24x7_sans_holidays
        alias          24x7 Sans Holidays
use us-holidays ; Get holiday exceptions from other timeperiod
        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
        }

Skopíroval som sem štandardný súbor pribalený k nagiosu, akurát som v ňom upravil workhours. Ak vám srdce piští po lokalizácii, môžete si kľudne nadefinovať vlastné sviatky. Ja to nerobievam lebo doteraz vždy som mal notifikácie spustené buď v 24 hodinovej prevádzke (dlhé mesiace po skončení pohotovosti ma strhávala každá doručená sms správa) alebo normálny týždeň, keď aj ak bol sviatok sa očakávalo že zodpovedná osoba má vedieť o probléme.

Ďalej commands.cfg, ktorý sem nenakopírujem kvôli rozsahu celý ale uvediem iba niekoľko príkladov. Vytvorime ho z command.cfg nasledovne:

convertcfg command.cfg commands > commands.cfg

Len 2 príklady nech zbytočne nezahlcujem článok:
define command{
        command_name    notify-by-email
        command_line    /bin/printf "$OUTPUT$" | /bin/mail -s '$SERVICESTATE$ alert for $HOSTALIAS$/$SERVICEDESC$' $CONTACTEMAIL$
        }
define command{
        command_name    check_tcp
        command_line    /usr/lib/nagios/plugins/check_tcp -H $HOSTADDRESS$ -p $ARG1$
        }

Prvý command – notify-by-email už máme v contacts.cfg, zašle jednoduchý email o dostupnosti/nedostupnosti služby prípadne o inom stave (spomenuté pod súborom contacts.cfg). Podobnou analógiou môžeme vyrobiť aj command

define command {
command_name notify-by-sms
command_line /bin/printf "$OUTPUT$"|/usr/bin/gnokii –sendsms $CONTACTADDRESS1$
}

Potom ešte do contacts.cfg pridáme pod email riadok:
address1 +4219xxxxxxxxx
a rozšírime riadok:
service_notification_commands notify-by-email, notify-by-sms

V dokumentácii sa dočítame, že takto môžeme nadefinovať 6 kontaktov.

Vyšantiť sa môžeme k plnej spokojnosti a použiteľnosti (hlavne pri sms notifikáciách by som si dal pozor na závislosti hostov ale o tom až neskôr).

Druhý riadok už definuje príkaz používaný pri monitorovaní služieb, vidíme že používa plugin z nagiosu, premenné HOSTADDRESS a ARG1 dostáva od definície služby, ku ktorej sa dostaneme o niekoľko mihnutí očami.

Ďalej si vytvoríme súbor hostgroups.cfg, do neho natrepeme niečo takéto:

define hostgroup {
        hostgroup_name                  routers
        alias                          Routre
        members                        router1
}

Zatiaľ bude stačiť jedna skupina.

Teraz si vytvoríme adresár, do ktorého budeme dávať konfigurácie hostov a služieb. Nagiosu je jedno či je to natrepané v jednom súbore alebo v légii súborov. Kvôli prehľadnosti som si zvykol rozdeľovať konfigurácie podľa umiestnenia – serverovnaX.cfg, budovaX.cfg a podobne.

Súbor hosts/local.cfg obsahuje:

define host {
        host_name                      router1
        alias                          router cislo 1
        address                        10.0.10.1
#      parents                        ffff
        hostgroups                      routers
        check_command                  check-host-alive
        max_check_attempts              3
        check_period                    24x7
        check_interval                  5
        retry_interval                  1
#        contacts                        jankohrasko
        contact_groups                  operators,
        notification_interval          20
        notification_period            24x7
        notification_options            d,u,r
}

host_name – názov zariadenia, ktoré budeme monitorovať
alias – priateľskejšie vyzerajúce meno
address – ip adresa zariadenia
parents – v tomto prípade nemá význam, keďže je router hneď vedľa nagiosu, má to ale veľký význam keď máme niekde v internete druhý router a za ním povedzme 30 serverov. Keby sme nemali parenta, tak pri výpadku routra nám príde 31 notifikácií o nedostupných hostoch, vďaka parents príde jedna
hostgroups – do ktorej skupiny patrí
check_command – závisí od commands.cfg, v tomto prípade zavoláme plugin check_ping ktorý bude stroj pingovať
max_check_attempts – koľko krát sa má pokúsiť dosiahnuť na host, kým ho vyhlási za nedostupný (jeden ping sa môže stratiť, nemusí to znamenať nedostupnosť zariadenia)
check_period – opäť timeperiods.cfg, niektoré stroje sa môžu vypínať – napríklad v malých firmičkách nejaké intranetové serveríky a preto môžu byť v určitých časoch nedostupné bez toho aby to indikovalo zlyhanie
check_interval – každých 5 minút
retry_interval – koľko času má ubehnúť kým sa po zlom statuse má pokúsiť o zistenie obnovy systému
contacts – môže byť čiarkou oddelený zoznam kontaktov, ktoré budú informované o zmenách stavu, napríklad ak nevyhovuje contact_groups
contact_groups – skupina kontaktov, ktorá bude notifikovaná pri zmenách stavu systému
notification_interval – povedzme že služba sa neobnoví, tak systém bude o tom informovať každých 20 minút
notification_period – to bolo už tiež ako veľa vecí vysvetlené pri contacts.cfg
notification_options – detto

To je úplný základ. Na routri beží ssh na porte 22, preto nastavíme aj kontrolu služby na porte 22 (opäť súbor local.cfg):

define service {
        host_name                      router1
        service_description            check-ssh
        check_command                  check_tcp!22
        max_check_attempts              3
        check_interval                  5
        retry_interval                  1
        check_period                    24x7
        notification_interval          20
        notification_period            24x7
        contact_groups                  operators
        notification_options            w,c,r
}

host_name – aby sme vedeli ku ktorému hostu služba patrí
service_description – aby sme vedeli čo sa kontroluje
check_command – zavoláme podľa commands.cfg check_tcp plugin ktorý sa pokúsi spojiť s portom 22
zvyšné parametre už boli vysvetlené skôr, preto sa nebudem opakovať.

A teraz najhlavnejší súbor nagios.cfg (popíšem len riadky, ktoré som proti default súboru editoval, detailnejšie si súbor nechám do budúceho pokračovania):

cfg_file=/etc/nagios/commands.cfg
cfg_file=/etc/nagios/contacts.cfg
cfg_file=/etc/nagios/timeperiods.cfg
#cfg_file=/etc/nagios/objects/templates.cfg
#cfg_file=/etc/nagios/objects/localhost.cfg

pridáme hostgroups:
cfg_file=/etc/nagios/hostgroups.cfg

templates.cfg a localhost.cfg sú zatiaľ nanič, keďže sme ich nedefinovali. Editli sme akurát správne cesty ku zvyšku.

pridáme si ručne vytvorený adresár hosts:

cfg_dir=/etc/nagios/hosts

editneme result_path alebo si len vytvoríme adresár, ktorý je v pôvodnej konfigurácii, to nech si každý vyberie:
check_result_path=/var/log/nagios/spool/checkresults

v zmysle konfigurácie vytvoríme /var/log/nagios/rw a zmeníme cez chown ownera na nagios:nagios

otestujeme konfiguráciu:

nagios -v /etc/nagios/nagios.cfg




Total Warnings: 0
Total Errors:  0
Things look okay - No serious problems were detected during the pre-flight check

Dostali sme dobrú správu a môžeme spustiť nagios:
service nagios start
service nagios status
nagios (pid 24488) is running...
chkconfig --level 2345 nagios on

Čo teraz? Teraz sa prihlásime na web, aby sme videli čo nagios robí. Inštalovaný RPM balík pridal do httpd (ako som spomínal na začiatku) script-alias, takže po zadaní http://ipadresa/nagios na nás vyletí prihlasovací formulár. Pre prvotnú prezentáciu nám to stačí, preto sa pozrieme na to, ako sa prihlásiť.

Webrozhranie nagiosu používa mod_htaccess, ktorý je štandardnou súčasťou Apache webservera. Konfigurácia v /etc/httpd/conf.d/nagios.conf odkazuje na password file /etc/nagios/htpasswd.users, preto si ten súbor vytvoríme. V cgi.cnf máme štandardného užívateľa nagiosadmin, vytvoríme teda jeho (dnes sa ešte cgi.cnf nebudeme venovať, chceme len vidieť, že inštalácia nám funguje) obsah:

htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
New password:
Re-type new password:
Adding password for user nagiosadmin
service httpd start

V priloženom obrázku je default screen nagios web rozhrania:

A tu je detailné info prvého nakonfigurovaného zariadenia:

Neprišiel som na lepší spôsob ako rozpísať nagios tak, aby to nebolo povrchné a zmestilo sa do jedného článku. Preto som zvolil toto delenie na popis a rozbehnutie jednoduchej konfigurácie, v budúcnosti popíšem už konkrétnejšie príklady a vytvorím monitorovanú infraštruktúru, rôzne ďalšie možnosti ktoré Nagios dáva. Verím, že vás to neodradí. Ak sú v texte nejasnosti, napíšte mi ich prosím do diskusie, buď ich v nej doriešim alebo ak máte záujem o niečo konkrétne, môžem to zapracovať do pokračovania o Nagiose.

Sľúbené balíky pre CentOS:
nagios-3.0.3-1.el5.i386.rpm
nagios-3.0.3-1.el5.src.rpm
nagios-devel-3.0.3-1.el5.i386.rpm
nagios-plugins-1.4.12-1.i386.rpm
nagios-plugins-1.4.12-1.src.rpm
nagios-www-3.0.3-1.el5.i386.rpm

    • Re: Dohľadové systémy 2 - Nagios I 14.07.2008 | 23:46
      schrapnel   Návštevník

      Hmmmm vyzera to zaujimavo, nemas nahodou info, ci sa da nagios rozbehat vo vnutri vservera? (debian)
      - prepac necital som clanok uplne pozorne, je moc vysoka hodina na mna. Daju sa naskriptit akcie, ktore vykona nagios v pripade vypadku? Nie len notifikacia adminovi, ale aj napr. skript pre restart sluzby a pod?

      • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 00:06
        Avatar betmen   Používateľ

        vo vserveri som ho neskusal ale podla mna by mal bezat bezstarostne.
        samostatne sa rozhodovat a robit ine akcie nevie, vie si len vyziadat/pasivne prijimat vystupy pluginov. mozno by sa dal vyrobit plugin ktory by sa spustal kazdych X minut a keby nasiel v evente pruser, skusal by ho napravit ale neviem ci je to realne vykonatelne a ci by to malo vyznam.
        ______________
        nález plný strát

        ______________ kam by som chodil...na dvor
        • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 11:57
          tomkop   Návštevník

          zaujimave, budem rad ak sa v Nagiose bude pokracovat ... a prebere sa hlbsie

        • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 12:53
          pedro   Návštevník

          Urcite se daji psat eventhandlers, kterymi jde reagovat na ruzne zmeny stavu monitorovanych sluzeb/stroju.
          http://nagios.sourceforge.net/docs/2_0/eventhandlers.html

          • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 13:14
            Avatar betmen   Používateľ

            mas pravdu, moja chyba
            ______________
            nález plný strát

            ______________ kam by som chodil...na dvor
    • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 00:45
      Avatar blackhole_tommyhot   Používateľ

      "Www balík si pridá nagios.conf do /etc/httpd/conf.d"

      1) Da sa to niekde zmenit? Lebo na debiane ma apache2 config fajly v /etc/apache2/
      2) A vlastne da sa pouzit aj iny web server ako apache? (asi som prehliadol)
      3) Configuracia nagiosu sa da robit aj cez webove rozhranie ci nie?

      inak idem ti robit analnu penetraciu: pekny clanok, len tak dalej :))
      ----------
      tommyhot@hackingmachine:~$ microsoft &> /dev/null

      • Re: Dohľadové systémy 2 - Nagios I 15.07.2008 | 10:32
        Avatar betmen   Používateľ

        1. jasne, v tomto pripade mi to urobi taku konfiguraciu lebo je to balik sity pre redhaty. stale mozes urobit aj rpm balicek, ktory to ma inak a v inej distribucii mozes pouzit ificialne distribuovany balicek, ktory to bude mat site zase na mieru pouzivanej distribucie.
        2. neprehliadol, nespominal som inu moznost ale v dokumentacii nelimituju na pouzitie apache. mal by vsak mat podporu cgi a este by si sa musel vysporiadat s alternativou k htaccess
        3. nie, neda. aspon v oficialnom cgi rozhrani nie. v buducnosti popisem aj php alternativy (spomenul som v uvodnej casti), ktore by mali zvladat konfiguracie aj cez web

        dakujem.

        ______________
        nález plný strát

        ______________ kam by som chodil...na dvor