Nagios
Nagios je de facto linuxový standard pro hromadné monitorování síťových prvků jako jsou servery, switche, ale i např. síťové tiskárny, speciální zařízení apod. Díky desítkám pluginů jím lze monitorovat téměř všechno.
Pokud nainstalujete speciálního agenta je možné sledovat i „nesíťové“ údaje jako volné místo na disku, vytížení CPU apod. Agenti existují nejen pro Linux, ale i pro Windows a Solaris. Nagios také dokáže zasílat administrátorům upozornění mailem či SMS. V základu má sice ne příliš pěkné, ale dostačující webové rozhraní.
V tomto stručném návodu popíšu základní instalaci a základní nastavení edice Core, což je základní open-source varianta produktu.
Článek popisuje Nagios 3 na Ubuntu 10.04 LTS. Důvodem vzniku článku byla jednak absence českého návodu, ale především zastaralost jiných wiki a nesoulad mezi dokumentací Nagiosu a tím co obsahují Ubuntu nagios balíčky.
Terminologie
Na úplný začítek projdu názvosloví užívané v Nagiosu.
- host - zařízení, které chceme monitorovat. Obvykle počítač, switch nebo tiskárna.
- host group - skupina hostů stejného typu. Např. servers pro servery, printers pro tiskárny. Používají se protože tak lze snadno všem hostům ve skupině nastavit nějaké chování. Též v reportech Nagiosu jsou hosti ve skupině seskupeni.
- service - služba, kterou na zařízení (hostu) chceme monitorovat. Buď jsou to služby veřejně dostupné (ping, HTTP, FTP, …) nebo prostřednictvím agentů také údaje o volném místě na discích apod.
- service group - skupina služeb. Stejně jako pro skupinu hostů i skupina služeb zjednodušuje konfiguraci a zpřehledňuje reporting.
- contact a contact group - kontakt a skupina kontaktů, kteří mají být informováni pokud dojde k nějaké kritické události
- timeperiod - časový rámec, kdy může být kontakt nebo skupina kontaktů informována
Instalace serveru
Detailně viz Ubuntu Server Guide. Já jen opravdu stručně, abych neduploval oficiální help. Příkazy provádějte na serveru, kde má běžet Nagios.
sudo apt-get install nagios3 nagios-nrpe-plugin
- Budete vyzváni k nastavení hesla uživatele „nagiosadmin“, což je správce Nagiosu. Jeho heslo bylo uloženo do
/etc/nagios3/htpasswd.users
Pokud chcete později změnit toto heslo, musíte ještě doinstalovat sudo apt-get install apache2-utils
a pak použít příkaz sudo htpasswd /etc/nagios3/htpasswd.users nagiosadmin
.
Instalace agenta
Pokud nevystačíte se sledováním síťových veřejných služeb jako ping, HTTP, FTP apod., ale chcete i „nesíťové“ informace o hostu jako např. volné místo na disku a vytížení CPU, pak musíte na daný operační systém doinstalovat agenta.
TODO
Konfigurační soubory
Toto byl pro mě největší kámen úrazu a zdržování, protože oficiální manuál a Ubuntu (resp. Debian na kterém je Ubuntu založeno) balíčky ukládají konfigurační soubory do jiných adresářů.
Hlavní konf. soubor:
/etc/nagios3/nagios.cfg
Konf. hostů a služeb:
/etc/nagios3/conf.d/
Binárky pluginů:
/usr/lib/nagios/plugins/
Konf. pluginů:
/etc/nagios-plugins/config/
Uživatelé webové administrace: (viz htpasswd)
/etc/nagios3/htpasswd.users
Při restartu a spuštění Nagios též kontroluje své konfigurační soubory. Jestli je chcete nechat ověřit dříve, než to zjistíte při restartu a Nagios tím pádem přestane běžet, použijte:
$ nagios3 -v /etc/nagios3/nagios.cfg
Spuštění, vypnutí, restart
Opět jinak, než říká manuál Nagiosu.
/etc/init.d/nagios3 start /etc/init.d/nagios3 stop /etc/init.d/nagios3 restart
Notifikace
Nagios nás dokáže informovat, pokud dojde k poruše nebo prostě k určené události. Sám o sobě vlastně ne, protože jen vyvolá v daný okamžik externí aplikaci, která nám pošle třeba email nebo SMS. Já ukážu jak nastavit poslání emailu.
Nastavení
V /etc/nagios3/conf.d/contacts_nagios2.cfg' je z výchozí instalace jedna kontaktní osoba
root a jedna skupina
admins` a upozornění budou generovány 24×7 (tj. vždy). To mi vyhovovalo, jen jsem změnil, že chci být upozorňován na úplně všechny typy událostí hostů i služeb.
Položka host_notification_options
nastavená na d,u,r,f,s
zajistí upozornění na všechny událostí hosta:
- down – vypnutý
- unreachable - nedostupný
- recovery – návrat do normálu
- flapping – přeskakuje-li zařízení z jednoho stavu do druhého
- sheduled downtime – počátek a konec plánované údržby
- none – žádné zprávy
Položka service_notification_options
nastavená na w,u,c,r,f
zajistí upozornění na všechny události služeb:
- warning – varování
- unknown – neznámý stav
- critical – kritický stav
- recovery – návrat do normálu (OK)
- flapping – přeskakuje-li služba z jednoho stavu do druhého
- none – žádné zprávy
Celý soubor může tedy vypadat takto:
define contact { contact_name helpdesk alias Company Helpdesk host_notification_period 24x7 service_notification_period 24x7 host_notification_options d,u,r service_notification_options u,w,c,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email helpdesk@company.com } define contact { contact_name technician1_mail alias John Doe host_notification_period 10x5 service_notification_period 10x5 host_notification_options n service_notification_options w,c,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email john.doe@company.com } define contactgroup { contactgroup_name support alias Company Support members helpdesk, technician1_mail }
Odesílání přes SMTP
„Oficiální“ postup je sice nainstalování Postfixu a posílání přes něj, avšak mě se zdá Postfix jako kanón na komára, pokud jen použít SMTP server poskytovale internetu k odeslání jednoduché emailové zprávy.
Nejlepší řešení mi proto přijde použít skript v Perlu od Brandona Zehma nazvaný jednoduše sendEmail. Protože je to Perl, nepotřebuje být kompilován (juchů).
Aktualizace: tento skript je dokonce i repozitářích jak jsem zjistil. Jestli ho chcete instalovat z něj (a to byste měli chtít), pak přeskočte následující kroky a jen proveďte sudo apt-get install sendemail
.
- Stáhněte aktuální verzi v .tar.gz např. přes wget:
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
- Rozbalte do aktuální adresáře:
tar xvfz sendEmail-v1.56.tar.gz
- Soubory sendEmail a sendEmail.pl zkopírujte do /usr/bin (jako root):
sudo cp sendMail* /usr/bin
.
Příklad odeslání zprávy ze sendEmailu:
sendEmail -f odkoho@domena -t komu@domena -u 'Predmet zpravy' -m 'Telo zpravy' -s IPNeboHostnameSMTP
Všimněte si použití jednoduchých uvozovek, pokud parametr má obsahovat i mezeru nebo jiné znaky. Pokud chcete odesílat právy s češtinou, přijde ještě -o message-charset=utf-8
pro UTF-8 kódování.
Teď honem k vlastní konfiguraci Nagiosu. Nejprve přidáme proměnné (makra) určující náš SMTP server (může to být IPv4 nebo hostname) a adresu odesílatele do souboru /etc/nagios3/resource.cfg
:
# Nastaveni sendEmail pro odesilani emailu pres SMTP # IP nebo hostname SMTP serveru $USER5$=10.0.0.49 # Odesílací adresa $USER6$=nagios@domena
V souboru /etc/nagios3/commands.cfg
nahradíme stávající příkaz (command) pro zaslání oznámení hosta a služby. Změny je jen v (pěkně dlouhém) řádku command_line
pro oba příkazy. Pro úplnost uvedenu oba a celé.
# 'notify-host-by-email' command definition define command{ command_name notify-host-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | sendEmail -s $USER5$ -t $CONTACTEMAIL$ -f $USER6$ -v -l /var/log/sendEmail -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: LONGDATETIME$\n" } # 'notify-service-by-email' command definition define command{ command_name notify-service-by-email command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | sendEmail -s $USER5$ -t $CONTACTEMAIL$ -f $USER6$ -v -l /var/log/sendEmail -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -m "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" }
Teď restart a vesele emailujeme. Adresáta je možné nahradit na SMS přeposílací adresu (můj Vodafone to má jako nekdo@vodafonemail.cz) - email pak přijde jako SMS na mobil.
Pluginy
Nagios sám je docela „hloupý“. Neumí nic, než jsem rozpoznat změnu stavu nečeho. Vlastní způsob zjištění stavu nečeho zajišťuje plugin, který Nagiosu vrátí stav. Nagios, odpovědi shromažďuje a vyhodnocuje.
/usr/lib/nagios/plugins
je místo, kde jsou pluginy uloženy.
Pluigin sám je v podstatě buď spustitelný program nebo skrip, který Nagios vyvolá. Tedy pokud potřebujete nápovědu ohledně parametrů pluginu, obvykle ji zjistíme spuštěním pluginu s parametrem -h. Např. plugin check_disk
zjištující velikost volného místa disku:
$ /usr/lib/nagios/plugins/check_disk -h
Odkazy
- http://www.hwg.cz/software/Nagios/Nagios_plugins_cz.html - jak sledovat např. teplotu v serverovně