Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
nagios [2013/07/25 13:30]
94.113.12.172
nagios [2019/02/25 18:21] (aktuální)
Řádek 1: Řádek 1:
 +====== 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.
 +
 +<​code>​
 +/​etc/​init.d/​nagios3 start
 +/​etc/​init.d/​nagios3 stop
 +/​etc/​init.d/​nagios3 restart
 +</​code>​
 +
 +
 +====== 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:
 +
 +<​code>​
 +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
 +   }
 +</​code>​
 +===== 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:
 +<​code>​
 +sendEmail -f odkoho@domena -t komu@domena -u '​Predmet zpravy'​ -m 'Telo zpravy'​ -s IPNeboHostnameSMTP
 +</​code>​
 +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'':​
 +
 +<​code>​
 +# Nastaveni sendEmail pro odesilani emailu pres SMTP
 +# IP nebo hostname SMTP serveru
 +$USER5$=10.0.0.49
 +# Odesílací adresa
 +$USER6$=nagios@domena
 +</​code>​
 +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é.
 +
 +<​code>​
 +# '​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$"​
 +}
 +</​code>​
 +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:
 +
 +<​code>​
 +$ /​usr/​lib/​nagios/​plugins/​check_disk -h
 +</​code>​
 +====== 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ě