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.

  1. sudo apt-get install nagios3 nagios-nrpe-plugin
  2. 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.

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
   }

„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.

  1. 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
  1. Rozbalte do aktuální adresáře: tar xvfz sendEmail-v1.56.tar.gz
  1. 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