====== 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ě