====== 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.
{{.:warning.png}} Č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 [[https://help.ubuntu.com/10.04/serverguide/C/nagios.html|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 24x7 (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 [[http://caspian.dotconf.net/menu/Software/SendEmail/|sendEmail]]. Protože je to Perl, nepotřebuje být kompilován (juchů).
{{.:note.png}} 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://nagios.sourceforge.net/docs/3_0/toc.html|Oficiální manuál]]
* [[http://hw.cz/novinky/art3737-nagios-dohled-hwg-zarizeni-uvod-pro-zacatecniky.html]]
* [[http://www.hwg.cz/software/Nagios/Nagios_plugins_cz.html]] - jak sledovat např. teplotu v serverovně