Nagios – názvosloví

Dnešní zápis na blog slouží k pochopení názvosloví, které Nagios využívá. Nezůstane však pouze u vysvětlení slov, ale budu se zabývat i vzájemnou interakcí mezi jednotlivými komponentami Nagiosu, které tato slova představují. Směle tedy do toho.

Dvě nejzásadnější slova, která se v Nagiosu využívají a se kterými se budete setkávat na denní bázi, pokud budete určen jako osoba pro správu monitoringu, jsou HOST a SERVICE.

HOST – Jedná se o každé jednotlivé monitorované zařízení. Zjednodušeně lze říct, že je představován IP adresou (nebo DNS jménem) assetu, který chceme monitorovat.
SERVICE (služba) – jedna, nebo i více proměnných, které chceme monitorovat na hostu. Na hostu lze monitorovat např. vytížení CPU, RAM, zaplnění disků, dostupnost webové stránky apod.

U interakce těchto dvou komponent bych se chtěl na chvíli pozastavit, protože jejich nastavení je důležité pro celokové pochopení fungování monitoringu tak, jak jej chápe Nagios.

Ve skutečnosti se jedná o velice jednoduché vysvětlení: Služba nemůže existovat bez Hosta, Host nemusí mít žádné Služby. Při bližším vysvětlení se musíme podívat nejdřív na to, co je Host.

Jak jsem psal v úvodu, jedná se o monitorované zařízení, reprezentované IP adresou, nebo DNS názvem. U Hosta lze monitorovat pouze jeho dostupnost (běží/neběží). Možnost monitoringu evokuje, že je možné pouze monitoring pomocí pingu, není však tomu tak. Monitoring, zdali host běží, nebo ne lze navázat na jakoukoliv, dostupnou metriku – ping, otevřený port, odpověď webu apod. Při velice jednoduchém nastavení sítě si lze vystačit pouze s monitoringem hostů. Většinou je však nutné monitorovat na hostech ještě jejich další parametry, například zaplnění disků, spuštěný proces apod. Tyto rozšířené parametry se monitorují nastavením Služeb.

Služba nemůže být monitorovaná samostatně – vždy je nutno navázat ji na Host. Ve speciálních případech je však možné vytvořit tzv. Dummy Host, který nemá IP adresu a jeho stav je vždy konstantní (dle nastavení OK, Kritický, nebo Neznámý), monitorovanou službu je pak možno nastavit na něj.

Jeden příklad za všechny: V naší teoretické infrastruktuře chceme monitorovat Windows server (server.spolecnost.cz) na zaplnění disku a využití RAM. Zaprvé je potřeba vytvořit Host, abychom zjistili, jestli je online, nebo nedostupný. Host se definuje vytvořením nového konfiguračního souboru s příponou cfg např. /usr/local/nagios/etc/hosts/host_server.spolecnost.cz.cfg. Jeho struktura vypadá následovně:

define host {
#Název hosta, který se bude zobrazovat v konzoli Nagios.
host_name server.spolecnost.cz
#Adresa monitorovaného hosta.
address 192.168.0.1
#Příkaz, který se bude provádět, ke zjištění, zdali je host dostupný.
check_command check-host-alive!!!!!!!!
max_check_attempts 5
check_interval 1
retry_interval 1
check_period 24×7
}

Vytvořením tohoto souboru a restartem Nagios služeb (/etc/rc.d/init.d/nagios reload) začneme Nagiosem monitorovat dostupnost serveru. Jakmile máme vytvořený monitorovaný Host, můžeme přistoupit k monitorování služeb. V této části bych ještě rád odbočil od nastavení služeb a dotknul se nutných nastavení na straně Hostů.

Monitorování dostupnosti Hosta je záležitost poměrně jednoduchá – dostupnost zařízení je veřejně přístupný údaj, ať už pingem, nebo nějakou jinou metrikou. Jak je to ovšem s neveřejně přístupnými metrikami, ke kterým se běžný uživatel nemůže dostat, jako jsou zaplnění disků, čekající updaty, využití swap file apod.?! Nagios se potřebuje k těmto metrikám nějakým způsobem dostat. Nejjednodušší způsob je instalací Nagios agenta pro Linux a Windows zařízení, který má právo sbírat interní metriky systému a na požádání je předložit serveru Nagios. Jiné způsoby, jak se k vnitřním metrikám dostat jsou např. WMI, SNMP, NRPE, NSClient a MRTG. Nagios lze také nastavit na pasivní příjem SNMP Trap zpráv.

Zpět k našemu příkladu: Dostupnost našeho Hosta je monitorována pingem a nám zbývá doplnit monitoring zatížení RAM a zaplnění disků. V našem případě máme na serveru nainstalován program NSClient, který metriky sbírá. Na straně Nagiosu je zapotřebí nastavit kontroly, aby se v pravidelných intervalech připojily k serveru a stáhly si aktuální data. Nastavení služeb se provádí v souborech s příponou cfg a umístěchých v /usr/local/nagios/etc/services. V našem případě si vytvoříme nový soubor services_server.spolecnost.cz.cfg, který bude obsahovat následující nastavení:

define service {
# Navázání na vytvořený Host. Služba musí být vždy navázaná na Host!
host_name server.spolecnost.cz
# Tento název se bude zobrazovat v konzoli Nagiosu.
service_description Zaplneni disku C:
# příkaz ke spuštění s parametry.
check_command check_xi_service_nsclient!Heslo!USEDDISKSPACE!-l C -w 80 -c 95!!!!!
max_check_attempts 5
check_interval 1
retry_interval 1
check_period 24×7
}
define service {
host_name server.spolecnost.cz
service_description Vyuziti RAM
check_command check_xi_service_nsclient!Heslo!MEMUSE!-w 80 -c 90!!!!!
max_check_attempts 5
check_interval 1
retry_interval 1
check_period 24×7
}

Na příkladu konfiguračních souborů služeb můžeme vidět, že je vždy zapotřebí Službu navázat na Host.
Po uložení souboru a restartu Nagios služeb máme monitorováno zaplnění disku a využití RAM na našem testovacím serveru.

Službám a Hostům jsme věnovali pozornost, kterou si zaslouží a lze tedy přikročit k ostatním názvům a jménům se kterými se budete v rámci Nagiosu setkávat.

Další důležitý název v prostředí Nagios je Command (příkaz, check) – jedná se o zkrácené jméno spouštěného pluginu s parametry, které slouží k provedení kontroly. Abychom si mohli dále vysvětlit, co Command znamená, je potřeba zaměřit se ještě na jeden název a tím je Plugin – v tomto případě se jedná o soubor, který se spustí v operačním systému Nagiosu, provede požadovanou kontrolu a zpět reportuje její výsledek tak, aby jej mohl Nagios zobrazit.

Tolik tedy k teorii a přejděme k praktickému využití. V našem příkladu monitorovaného serveru jme si mohli v konfiguračním souboru všimnout řádků „check_command“. Jak název napovídá, jedná se o Command. Pojďme si rozebrat jeho hodnotu trošku blíž. V definici Služby, v části „Vyuziti RAM“ má sekce check_command tuto hodnotu: check_xi_service_nsclient!Heslo!MEMUSE!-w 80 -c 90!!!!!. I když tento zápis nevypadá, že by měl něco spouštět, je tomu tak.

Část check_xi_service_nsclient definuje skutečný program, který se má spouštět. Vykřičníkem jsou pak odděleny jeho parametry. Command se definuje souboru /usr/local/nagios/etc/commands.cfg. V případě našeho Příkazu je v konfiguračním souboru commands.cfg definováno:

define command {
command_name check_xi_service_nsclient
command_line /usr/local/nagios/libexec/check_nt -H $HOSTADDRESS$ -s “$ARG1$” -p 12489 -v $ARG2$ $ARG3$ $ARG4$
}

Command_name je jméno, které se volá v konfiguračním souboru Hosta, nebo Služby. Command_line je příkaz, který se spouští z příkazové řádky operačního systému Nagios serveru. Symboly $…$ se označují proměnné programu HOSTADDRESS je vnitřní proměnná Nagiosu vyjadřující adresu hosta, na který je Check nastaven. ARG1, ARG2… jsou argumenty, které definuje administrátor při vytváření soubory Checků.

Pojďme se vrátit k příkazu ze souboru services_server.spolecnost.cfg a k hodnotě check_xi_service_nsclient!Heslo!MEMUSE!-w 80 -c 90!!!!!. Co se tedy ve skutečnosti děje, jakmile nastane doba, kdy se má služba začít monitorovat.

check_xi_service_nsclient najde příslušný název v souboru commands.cfg a spustí definovaný příkaz. V našem případě /usr/local/nagios/libexec/check_nt s parametry -H -s -p -v
-H je automatický parametr přebírán z Nagiosu a znamená adresu Hosta.
-s je heslo pro přihlášení k programu NSClient nainstalovaném na monitorovaném serveru.
-p komunikační port.
-v definuje, jaká metrika má být zkoumána.

Pokud víme, že vykřičníkem se oddělují jednotlivé parametry, příkaz, který je vepsán do souboru Checku lze tedy přepsat následovně:

/usr/local/nagios/libexec/check_nt -H server.spolecnost.cz -s Heslo -p 12489 -v MEMUSE -w 80 -c 90

Spuštěním tohoto příkazu se server Nagios spojí s programem NSClient nainstalovaném na Hostu server.spolecnost.cz, zaměří se na parametr MEMUSE a vrátí zpět Nagiosu jeho hodnotu, která může být číselná, a/nebo textová. Zároveň vrátí hodnotu Exit Code, podle které Nagios pozná, zdali je služba ve stavu OK, Warning, nebo Critical.

Souboru, příkazu, nebo programu, který se spouští pod Operačním systémem serveru Nagios (v našem případě check_nt) se říká plugin.

Pro názornost jsem vybral ještě jeden jednoduchý plugin, který má v commands.cfg definováno:

define command {
command_name check-host-alive
command_line /usr/local/nagios/libexec/check_icmp -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
}

Pokud bychom chtěli monitorovat Host tímto příkazem, do jeho konfiguračního souboru (host_server.spolecnost.cz) bychom definovali hodnotu check_command jako check-host-alive. Při spuštění monitorování by se pak spustil program check_icmp s definovanými parametry.

Tento blog byl poněkud rozsáhlejší a vcelku technický. Snažil jsem se tím mimo názvosloví i ukázat, jak ve skutečnosti fungují konfigurační soubory, kterými se nastavují všechny specifikace v Nagios Core. V příštím zápise blogu se budu zabývat nastavením jednotlivých kontrol. Nečekejte prosím, že budu popisovat, co který Plugin monitoruje (tento popis máte k dispozici na adrese http://nagios-plugins.org/). Post bude o tom, jak nastavit monitoring tak, aby reportoval správná data, ve správný čas a notifikace, že je něco špatně, zasílal správným lidem. Ve zkratce – probereme si hodnoty, které mohou být definovány v souborech Hostů, nebo Služeb.