Po dlhšej odmlke spôsobenej nedostatkom času a následnom udelení si telesných trestov za nedodržanie záväzku, prichádzam s pokračovaním seriálu. Dnes dokončím načaté konfiguračné súbory a následne vytvorím fungujúcu infraštruktúru.
Z /etc/nagios rozpíšem súbor cgi.cfg. Opäť, aby som nekopíroval celý súbor, skopírujem len zaujímavé časti, prípadne časti, ktoré budem meniť.
Výcuc cgi.cfg:
use_pending_states=1
use_authentication=1
#default_user_name=guest
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
default_statusmap_layout=5
refresh_rate=90
use_pending_states – táto možnosť je zaujímavá pri pridávaní nových služieb do nagiosu, ten totiž službu nekontroluje v momente jej pridania, ale scheduluje a potom, kým si neoverí fyzicky jej status, ju zobrazuje ako pending.
use_authentication – minule sme vytvárali nagiosadmina cez htaccess, keby sme prepli túto možnosť na 0, tak by sme sa nemuseli autnetifikovať, ale striktne sa to neodporúča, skôr je to možnosť pre nejaké uzavreté lokálne siete, kde si ľudia budú veriť navzájom. V každom prípade taký nagios potom nemôže byť reálne použiteľný z internetu.
default_user_name – štandardne vypnutá možnosť. Je to kompromis medzi vypnutou autentifikáciou a zapnutou autentifikáciou. Užívateľ sa nemusí autentifikovať, čo môže byť dosť nebezpečné.
authorized_for_blabla – v podstate môžte ľubovolnému užívateľovi umožniť prehliadať si veci, ku ktorým by normálne prístup nemal, štandardne má užívateľ prístup k informáciám o hostoch a službách, ktoré sú naviazané na užívateľa pomocou direktívy contacts alebo contact_groups (minulá časť seriálu hosts/local.cfg)
default_statusmap_layout – možnosť, v ktorej sa dá upraviť spôsob zobrazovania mapy monitorovaných systémov. Popis si pozrite sami
refresh_rate – web rozranie má nastavený autorefresh, 90 sekúnd je celkom v norme, aj tak len v málo firmách sedí človek, ktorého úlohou je pozerať sa na obrazovku statusov a väčšinou sa to rieši alertami cez email alebo/a sms.
Teraz prejdem k sľúbenej infraštruktúre, ktorá názorne predvedie možnosti, ktoré poskytuje nagios.
Pôvodný router1 nechám, to je gw do internetu, okrem toho pred ním mám ešte default gw pre localnet, na ktorom beží prípadový nagios zo seriálu. Preto ho pridám do hosts/local.cfg:
define host {
host_name nagios-gw
alias default gw
address 192.168.122.1
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
define service {
host_name nagios-gw
service_description PING
check_command check_ping
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
}
Teraz už vieme, že k router1 sa nedostaneme, ak nám nepôjde nagios-gw, preto pridáme do konfigurácie router1 parenta, čím zabezpečíme, že keď nepôjde nagios-gw, nepôjde ani router1
V hosts/local.cfg pridáme do definície host router1 riadok:
parents nagios-gw
Okrem smerovačov (a neskôr aj iných služieb) by nebolo dobré, aby zostali obuvníkove deti bosé. Preto nastavíme monitorovanie služieb systému, na ktorom prevádzkujeme nagios.
Do hostgroups.cfg pridáme:
define hostgroup {
hostgroup_name servers
alias serveriky
members node1, node2
}
do hosts/local.cfg:
define host {
host_name node1
alias Noda 1
address 192.168.122.90
hostgroups servers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
Parents mu nenastavíme, lebo z pohľadu nagiosu je to najbližší stroj. Po kontrole konfigurácie (nagios -v /etc/nagios/nagios.cfg) nám nagios správne zaplače, že nepozná node2, ktorú už máme v hostgroups, preto si pridáme aj tú:
define host {
host_name node2
alias Noda 2
address 192.168.122.179
hostgroups servers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
Po ďalšej kontrole konfigurácie zistíme, že už nemáme žiadne chyby, iba dve varovania súvisiace s tým, že k node1 a node2 sme nepriradili žiadne služby. Zatiaľ nám to neprekáža, pozrieme sa, čo sa zmenilo:
[root@node1 nagios]# service nagios reload
Running configuration check...done.
Reloading nagios configuration...done
a vo webrozhraní prejdeme do položky Status Map
Vidíme, že z pohľadu nagios procesu máme najbližšie seba (node1), node2, nagios-gw a jeho podriadený host router1.
Node2 je červená, zámerne som ju vypol, aby sme videli, ako vyzerajú hromy-blesky. Keďže sme si v contacts.cfg na rozdiel od mojich fiktívnych mailov nastavili korektné maily, tak nagios nám súčasne poslal aj email o tom, že node2 je down.
Ideme pridávať služby, najprv pridáme kontrolu webserveru:
define service {
host_name node1
service_description HTTP
check_command check_http
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
}
Podobne pridáme kontrolu SSH a SMTP:
define service {
host_name node1
service_description SSH
check_command check_ssh!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
}
define service {
host_name node1
service_description SMTP
check_command check_smtp
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
}
V commands.cfg nemáme definovaný príkaz check_ssh (minule som naschval použil iba check_tcp pre zjedndoušenie) medzi pluginmi, ale check_ssh máme. Preto ho pridáme do commands.cfg, najskôr si ale o ňom zistíme pár info:
[root@node1 nagios]# /usr/lib/nagios/plugins/check_ssh -h
check_ssh v1991 (nagios-plugins 1.4.12)
Copyright (c) 1999 Remi Paulmier <remi@sinfomic.fr>
Copyright (c) 2000-2007 Nagios Plugin Development Team
<nagiosplug-devel@lists.sourceforge.net>
Try to connect to an SSH server at specified server and port
Usage:check_ssh [-46] [-t <timeout>] [-r <remote version>] [-p <port>] <host>
Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
-H, --hostname=ADDRESS
Host name, IP Address, or unix socket (must be an absolute path)
-p, --port=INTEGER
Port number (default: 22)
-4, --use-ipv4
Use IPv4 connection
-6, --use-ipv6
Use IPv6 connection
-t, --timeout=INTEGER
Seconds before connection times out (default: 10)
-r, --remote-version=STRING
Warn if string doesn't match expected server version (ex: OpenSSH_3.9p1)
-v, --verbose
Show details for command-line debugging (Nagios may truncate output)
Send email to nagios-users@lists.sourceforge.net if you have questions
regarding use of this software. To submit patches or suggest improvements,
send email to nagiosplug-devel@lists.sourceforge.net
Podľa toho si do commands.cfg vytvoríme:
define command {
command_name check_ssh
command_line /usr/lib/nagios/plugins/check_ssh -H $HOSTADDRESS$ -p $ARG1$
}
Zaujímavý je napríklad argument -r, ktorý si do commandu môžme tiež pridať. Môže byť celkom použiteľný, ak by sa v budúcnosti vyskytla v nejakej verzii ssh remote vulnerability atď. Ja som použil iba port, ktorý mám často preložený niekde inde, aby mi zbytočne logy nešpinili rôzne roboty.
dáme service nagios reload a pozrieme sa do Service Detail webrozhrania:
Ako vidíme, služby sú v stave PENDING (viď info pri cgi.cfg), počkáme teda na refresh, ktorý nám naservíruje nasledovné:
Dostali sme warning (o ktorom dostaneme aj email), že http je forbidden. Je to preto, že http nám beží od minula default, iba kvôli nagiosu. Preto čisto kvôli nagiosu urobíme:
touch /var/www/html/index.html
nech nám dá pokoj. Po chvíli sa služba prepne do stavu OK. Samozrejme, že si konfiguráciu každý prispôsobí a nepredpokladám, že bude niekto monitorovať službu len preto, aby monitoroval, takže podobný stav u vás nevznikne.
Aby sme boli spokojnejší, budeme monitorovať ešte lokálne ukazovateľe. Pomocou balíka nagios-plugins máme dostatočnú výbavu
lokálne disky:
define service {
host_name node1
service_description FS-ROOT
check_command check_disk!/dev/hda2
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
}
Opravíme v commands.cfg pri príkaze check_disk nasledovné:
command_line /usr/lib/nagios/plugins/check_disk -w 15% -c 5% -p $ARG1$
z pôvodných 85 a 95%, ktoré boli o zaplnení, check_disk ale kontroluje percentá volného miesta.
Okrem filesystémov môžme kontrolovať aj swap, load, počet prihlásených užívateľov atď (priamo z pluginov) alebo si môžme napísať svoje pluginy.
Aby som nerozpisoval jednu vec milión krát iným spôsobom, prejdem ďalej, na webe prejdem do Host detail:
a počkám na zmenu statusu:
Teraz by som chcel na druhom stroji tiež monitorovať aj nejaké služby. Http služba tam nebeží, smtp nebeží, postačí mi ssh a lokálny filesystém.
Na ssh použijem to isté, čo som použil pre node1:
define service {
host_name node2
service_description SSH
check_command check_ssh!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
}
Po opätovnom reloade nagiosu ssh nabehne do stavu pending. Vzniká ale problém, ako skontrolovať lokálny filesystém na node2, keď nie je dostupný cez žiadnu sieťovú službu?
Do boja povoláme nrpe (nagios remote plugin executor). Tu medzi verziu v repozitári a aktuálnou nie je až tak dramatický rozdiel, preto použijeme nrpe z EPEL repozitára.
[root@node2 ~]# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
Retrieving http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
warning: /var/tmp/rpm-xfer.x0CYsz: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing... ########################################### [100%]
1:epel-release ########################################### [100%]
[root@node2 ~]# yum install nrpe
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* epel: ftp.nluug.nl
* base: ftp.fi.muni.cz
* updates: ftp.fi.muni.cz
* addons: ftp.fi.muni.cz
* extras: ftp.fi.muni.cz
epel 100% |=========================| 2.1 kB 00:00
primary.xml.gz 100% |=========================| 1.0 MB 00:02
epel : ################################################## 3574/3574
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
primary.xml.gz 100% |=========================| 158 kB 00:00
updates : ################################################## 415/415
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Excluding Packages in global exclude list
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package nrpe.x86_64 0:2.7-3.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
nrpe x86_64 2.7-3.el5 epel 31 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 31 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): nrpe-2.7-3.el5.x86 100% |=========================| 31 kB 00:00
warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 217521f6
Importing GPG key 0x217521F6 "Fedora EPEL <epel@fedoraproject.org>" from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
Is this ok [y/N]: y
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: nrpe ######################### [1/1]
Installed: nrpe.x86_64 0:2.7-3.el5
Complete!
Ako som spomenul, pre nrpe 2.12 môžte použiť spec file z epel repozitára a nabuildovať si novší nrpe.
Po nahlľiadnutí do /etc/nagios na node2 zistíme, že sa nám nainštaloval nrpe.cfg.
Stále nemáme pluginy, opäť môžme použiť nie najaktuálnejšie, ale použiteľné pluginy z repozitára epel:
yum install nagios-plugins
Nainštaluje sa nám balíček nagios-plugins. Balíček pluginov je trošku starší ako naše pôvodné vytvorené v minulej časti, to však nevadí. Jediný rozdiel spočíva v tom, že nie sú v /usr/lib/nagios/plugins, ale v /usr/lib64/nagios/plugins. Malý chyták spočíva v tom, že nagios-plugins neobsahuje pluginy samotné. Preto sa pozrieme, aké možnosti epel repozitár dáva:
yum search nagios-plugins
vyhodí to tony pluginov, lebo epel má každý plugin ako samostatný balík.
Nám postačí pre názornú ukážku:
yum install nagios-plugins-disk
Keď sa vám nechce prplať so všetkými pluginmi naraz, môžte nainšťalovať balík nagios-plugins-all
Pozrieme sa na zaujímavé časti /etc/nagios/nrpe.cfg:
server_port=5666
#server_address=192.168.1.1
#allowed_hosts=127.0.0.1,192.168.0.2
command[check_disk1]=/usr/lib64/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hda1
server_port – nrpe sa spúšťa ako služba, na ktorú sa pripája proces nagios serveru. 5666 je defaultný port.
server_address – ak chceme spustiť nrpe len na jednom interfejsi (v prípade, že ich máme viac), tak nastavíme ip adresu
allowed_hosts – ktoré hosty môžu prikazovať niečo nrpe démonovi. My si to teda zmeníme na:
allowed_hosts=127.0.0.1,192.168.122.90
Okrem toho sa odporúča použiť na obmedzenie aj /etc/hosts.allow ale v našom príklade to nepotrebujeme.
Príkazy sa nastavujú cez command, uviedol som jeden príklad, my si prirobíme svoj command:
command[check_disk_root]=/usr/lib64/nagios/plugins/check_disk -w 15% -c 5% -p /
Podľa potreby povolíme 192.168.122.90 v iptables na port 5666 a spustíme nrpe démona:
[root@node2 nagios]# service nrpe start
Starting nrpe: [ OK ]
prípadne môžme rovno:
chkconfig –level 2345 nrpe on
aby sa služba spúšťala pri boote servera.
Prejdeme na server node1 a začneme uvažovať, čo nám chýba ku šťastiu. Spôsob, akým z nrpe na node2 získame informácie o našom disku. Na node1 budeme potrebovať check_nrpe plugin.
Keďže sme si minule nevyrobili nrpe plugin, nainštalujeme ho z epel repozitára:
[root@node1 nagios]# yum install nagios-plugins-nrpe
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
* epel: mirror.fraunhofer.de
* base: merlin.fit.vutbr.cz
* updates: merlin.fit.vutbr.cz
* addons: merlin.fit.vutbr.cz
* extras: merlin.fit.vutbr.cz
Excluding Packages in global exclude list
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package nagios-plugins-nrpe.x86_64 0:2.7-3.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
nagios-plugins-nrpe x86_64 2.7-3.el5 epel 19 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 19 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): nagios-plugins-nrp 100% |=========================| 19 kB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: nagios-plugins-nrpe ######################### [1/1]
Installed: nagios-plugins-nrpe.x86_64 0:2.7-3.el5
Complete!
Ako vieme už z node2, epel repozitár uložil plugin do /usr/lib64/nagios/plugins.
Skontrolujeme teda, či bude fungovať, ako chceme:
[root@node1 nagios]# /usr/lib64/nagios/plugins/check_nrpe -H node2.test.tld -c check_disk_root
DISK OK - free space: / 4513 MB (61% inode=95%);| /=2837MB;6587;7362;0;7750
Takže funguje.
(Áno viem, že minule bol nagios nainštalovaný na i386 systéme, musel som však urobiť pár zmien a tak mi teraz beží na x86_64, nagios balík a nagios-plugins balík som nabuildoval zo src.rpm balíkov, ktoré som priložil v minulej časti)
Aj keď plugin funguje, nagios by bol stále zmätený, preto do commands.cfg pridáme:
define command {
command_name check_nrpe
command_line /usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
a do hosts/local.cfg:
define service {
host_name node2
service_description FS-ROOT
check_command check_nrpe!check_disk_root
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
}
service nagios reload a po chvíľke PENDING stavu na službu uvidíme:
Alternatívou k nrpe je použitie pluginu check_by_ssh, kedy sa nagios pripojí na ssh, vykoná lokálny plugin a vráti výsledok (o tom niekedy neskôr).
Dobre, máme pár prkotín, môžme ísť rozvetvovať našu infraštruktúru. Ďalej budeme kontrolovať stroj u iného providera, preto si nadefinujeme dostupnosť bodov oboch providerov v peeringovom centre (SIX).
Do hosts/local.cfg pridáme:
define host {
host_name local-isp-six
alias six lokalneho providera
address IP_routra_nasho_providera_v_sixe
parents router1
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
a do hosts/serverovna-1.cfg dáme:
define host {
host_name serverovna-isp
alias isp serverovne
address ip_routra_serverovne
parents local-isp-six
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
define host {
host_name serverovna-gw
alias gw serverov
address gw_ktoru_pouzivaju_nase_servery
parents serverovna-isp
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
A konečne pridáme aj jeden server z tej serverovne:
define host {
host_name nn01
alias nn01
address ip_servera
parents serverovna-gw
hostgroups servers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
Pridáme si hosts/serverovna-2.cfg:
define host {
host_name serverovna2-isp
alias isp serverovne2
address ip_adresa_isp2
parents local-isp-six
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
define host {
host_name serverovna2-gw
alias gw serverov
address gateway_IP_adresa_serverovne2
parents serverovna2-isp
hostgroups routers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
define host {
host_name centurion1
alias centurion1
address ip_centurion1
parents serverovna2-gw
hostgroups servers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
define host {
host_name centurion2
alias centurion2
address ip_centurion2
parents serverovna2-gw
hostgroups servers
check_command check-host-alive
max_check_attempts 3
check_period 24x7
check_interval 5
retry_interval 1
contact_groups operators,
notification_interval 20
notification_period 24x7
notification_options d,u,r
}
reloadneme nagios a pozrieme sa, ako sa nám rozrástla chobotnica:
Stále nás ale môžu jedovať dve veci. Prvou z nich je skutočnosť, že okrem toho či zariadenia žijú nevieme, čo na nich beží a v akom stave. Druhou nezbednosťou sú nepekné otázniky na Status mape. Najprv vyriešime škaredé otázniky.
Nagios umožňuje k jednotlivým hostom prideliť obrázky. Skočíme preto napríklad sem: http://www.nagiosexchange.org/cgi-bin/page.cgi?g=1320.html;d=1
a obrázky rozbalíme do /usr/share/nagios/images/logos/
Následne začneme editovat definície hostov, k routrom pridáme 2 riadky:
icon_image router40.gif
statusmap_image router40.gd2
k serverom podľa toho, čo používajú.
Pre centos si logo vyrobíme:
[root@node1 logos]# wget http://blog.evandavey.com/wp-content/uploads/2008/04/centos-logo.png
....
convert -resize 25% ./centos-logo.png centos40.png
yum install gd-progs
pngtogd2 centos40.png centos40.gd2 100 2
Následne po dorobení icon_image a statusmap_image a po reloade nagiosu uvidíme niečo takéto:
Opäť kilometer textu a malý výsledok a preto, aby to dávalo zmysel, budem pokračovať nabudúce. Konkrétne sa lepšie pozriem na host a service dependencies (momentálne som ich len načrtol prípravou v konfigurácii), na tvorbu pluginov, na ďalšie konfiguračné možnosti, na web rozhranie a veci, ktoré som zabudol napísať sem.
Ako je to s monitorovanim SIP v nagiose? Existuje nejaky plugin, ale velmi funkcny nie je... aj ked je dost mozne, ze predbieham a bude to v casti III. :)
nepredbiehas,
ustrednu som nemonitoroval ziadnu, preto nemam skusenosti s tym, co a ako je pouzitelne.
na nagiosexchange.com je par veci co si zrejme aj pozeral a vyhodnotil za nie velmi funkcne
______________
nález plný strát