vyuka:cviceni:y36sps:semestralky:plchm1

Zadání: Konfigurace dohledového systému Nagios pro bezdrátovou síť Praha 8. Jedná se o rozrůstající síť, ve které je v současné době 14 přípojných bodů+hlavní router. Přípojné body jsou realizovány jako routery Microtik se třemi sektorovými anténami po 120 stupních. Hlavní router je Debian Etch. Topologie sítě: Po pronajatých okruzích a naší stávající struktuře. Kvůli jednodušší správě je jsou tam nahozené VPNky ke každému tomu přípojnému bodu. Cílem semestrální práce je nakonfigurování dohledového systému na bázi ICMP (pingání) pro všechny routery, VPN a UPSky, SSH pro routery, UPSek plus vytvoření mapy topologie.

Schváleno 16.4.2009: Michal Medvecký

Hlavní router celé sítě je Debian Etch. Běží na něm dohled- Nagios a MRTG, vpnky, autorizace uživatelů, mailserver.

Pro zjednodušení práce administrátorů mají jednotlivé koncové routery svůj jmenný ekvivalent. Ten je zaznamenán na firemních DNS.

Systém Nagios jsem využil jako jeden z nejlepších a nejpoužívanějších dohledových systémů. Navíc je to firemní standard, že se k monitoringu používá právě on.

Osobně nemám přílič v lásce vim, navíc pro mě bylo rychlejší pracovat v nanu, instalace přes:

aptitude install nano

Získání potřebných balíčků k funkci a instalaci Nagiosu:

aptitude install nagios3 apache2 build-essential libgd2-xpm-dev

Ono si to najde a nainstaluje samo potřebné závislosti. Nyní už si můžeme zkusit dát do prohlížeče: http://vase_domena(ip)/nagios3/ Zobrazí se úvodní stránka Nagiosu, ale nejdou zobrazit statistiky služeb ani hostů. Je to proto, že nemám přístup. Pro usera admin ho vytvořím takto:

htpasswd -n admin

Zeptá se to na heslo, které když se zadá, tak vygeneruje hash v nějaké takové podobě:

admin:6WusQf7QgCtw6

Tento řádek je potřeba dodat do souboru /etc/nagios3/htpasswd.users, který si ale nejdřív musím vytvořit.

touch /etc/nagios3/htpasswd.users
nano /etc/nagios3/htpasswd.users

Případně htpasswd si umí ten soubor vytvořit sám:

htpasswd -c /etc/nagios3/htpasswd admin

Navíc se musí přidat, že tento uživatel má oprávnění ke službám. To se dělá v souboru /etc/nagios3/cgi.cfg. Na sedmi místech jsou tam už defaultně předepsána práva pro nagiosadmin. Admin bude mít také plná práva, takže tam stačí doplnit i admina. Nagios má pro kontrolu konfigurace vlastní skript, takže po konfiguraci je dobré ho spustit před tím, než se restartuje služba. Využije se příkazu:

nagios3 -v /etc/nagios3/nagios.cfg

Pokud Nagios nevypsal žádné errory, případně warningy, restartuje se služba, aby se projevily změny:

/etc/init.d/nagios3 restart

Nyní se už v prohlížeči zobrazí předkonfigurovaní hosti- localhost a gateway. Tím je instalace a zprovoznění Nagiosu kompletní. Můžu se vrhnout na konfiguraci hostů.

Konfigurační soubory budou uložené v adresáři /etc/nagios3/conf.d/, což je už defaultní nastavení dané v souboru /etc/nagios3/nagios.cfg. Po instalaci je v něm několik konfiguračních souborů se všeobecným nastavením. Podle zadání je vidět, že dohledový systém má hlídat několik skupin zařízení. Kdyby byly všechny konfigurační soubory v jednom adresáři, tak by to bylo nepřehledné. Ve složce /etc/nagios3/conf.d/ se vytvoří dva nové adresáře preconfigured a hosts.

mkdir /etc/nagios3/conf.d/hosts
mkdir /etc/nagios3/conf.d/preconfigured

Soubory s obecnými nastaveními se přesunou do adresáře preconfigured.

cd /etc/nagios3/conf.d/
mv ./contacts_nagios2.cfg ./extinfo_nagios2.cfg  ./generic-host_nagios2.cfg ./generic-service_nagios2.cfg ./host-gateway_nagios3.cfg ./hostgroups_nagios2.cfg ./localhost_nagios2.cfg ./services_nagios2.cfg ./timeperiods_nagios2.cfg ./preconfigured

Přesunu se do adresáře hosts a připravím si tam konfigurační soubory pro jednotlivé hosty.

touch hsr.cfg local.cfg ups.cfg vpn.cfg wl.cfg

Začnu s konfigurací hsr.cfg, ve kterém budu konfigurovat dohled routerů na přípojných bodech. Všechny budou vypadat v tomto tvaru:

define host {
	host_name	hsrX           ;jméno hosta (volit nějaké kratší, protože se pak dále používá)
	alias		HSRX - adresa  ;alias (zde už si můžu psát, co chci)
	address		hsrX.p8        ;adresa (buď IP nebo jmenná)
	use		generic-host   ;pro hodnoty, které nejsou specifikovány tady se má využít nastavení z konfiguračního souboru generic-host
	parents		parent         ;rodič, hlavně pro status mapu, definuje to nadřazený prvek
}

Abych měl všechny konfigurační soubory hezky u sebe, tak do local.cfg nakopíruji informace obsažené v /etc/nagios3/conf.d/preconfigured/localhost_nagios2.cfg a /etc/nagios3/conf.d/preconfigured/host-gateway_nagios3.cfg, čímž sloučím konfigurační soubory pro gateway a localhost. Původní soubory můžu smazat.

rm /etc/nagios3/conf.d/preconfigured/localhost_nagios2.cfg
rm /etc/nagios3/conf.d/preconfigured/host-gateway_nagios3.cfg

Jak názvy napovídají, v ups.cfg budu mít uloženou konfiguraci dohledu UPSek a ve vpn.cfg VPNek. Op2t se budou definovat podle podobného vzoru:

define host {
	host_name	hsrX-ups
	alias		HSRX - UPS
	address		XXX.XXX.XXX.XXX
	use		generic-host
	parents		hsrX-vpn
}
define host {
	host_name	hsrX-vpn
	alias		HSRX - VPN
	address		10.1.0.2
	use		generic-host
	parents		hsrX
}

Protože přibyly nové přípojné body a status mapa začala být nepřehledná, doplnil se Nagios i o nějaké body po trase- mastery a slavy. Konfigurace jejich nastaveni je podobna jako hsr.

define host {
	host_name	name
	alias		alias
	address		XXX.XXX.XXX.XXX
	use		generic-host
	parents		parent
}

Nyní potřebuji dát hosty do skupin, nastavit mapu a kontakty. Vytvořím pro ně konfigurační soubory. Chci je mít vytvořeny v conf.d, protože obsahují globální nastavení a tak je nechci mít někde hluboko zanořené.

touch /etc/nagios3/conf.d/contacts.cfg /etc/nagios3/conf.d/extinfo.cfg /etc/nagios3/conf.d/groups.cfg

Ale tyto konfigurační soubory obsahuje už defaultní nastavení, které teď mám přesunuté do složky preconfigured (./contacts_nagios2.cfg ./extinfo_nagios2.cfg ./hostgroups_nagios2.cfg). Jejich obsah zkopíruji do nově vytvořených souborů a ty původní smažu. V contact.cfg stačí změnit emailovou adresu:

email				you@yourdomain.com

V extinfo.cfg nastavuji obrázky, které se budou zobrazovat u hostů ve status map. U localhostu chci, aby se mi zobrazoval tux.

define hostextinfo{
	host_name	localhost
	icon_image	base/linux40.gif
	icon_image_alt	base/linux40
	vrml_image	base/linux40.gif
	statusmap_image	base/linux40.gd2
}

U routerů se mi bude ukazovat obrázek nějakého zařízení:

define hostextinfo{
	host_name	hsrX,hsrY,hsrZ        ;můžu specifikovat více hostů
	icon_image	base/ng-switch40.gif
	icon_image_alt	base/ng-switch40
	vrml_image	base/ng-switch40.gif
	statusmap_image	base/ng-switch40.gd2
}

V group.cfg sdružuji hosty do skupin. Vytvořím 5 skupin podle služeb, které na nich chci kontrolovat- all, ssh, ping, vpn, ups.

define hostgroup {
        hostgroup_name  all
	alias           All Servers
	members         *
}

define hostgroup {
        hostgroup_name  ssh                          ;ssh budu kontrolovat na všech routerech
	alias           SSH machines
	members         localhost,hsrX,hsrY,hsrZ,name
}

define hostgroup {
        hostgroup_name  ping                         ;pingáním budu kontrolovat všechny zařízení
	alias           Pingable machines
	members         localhost,gw,hsrX,hsrX-vpn,hsrX-ups
}

define hostgroup {
	hostgroup_name	vpn                           ;vpnky si sdružím do zvláštní skupiny
	alias		OpenVPN tunnels
	members		hsrX-vpn
}

define hostgroup {
	hostgroup_name	ups                           ;upsky si sdružím do zvláštní skupiny
	alias		APC UPS
	members		hsrX-ups
}

Zbývá doplnit, jaké služby chci monitorovat. Jdu do adresáře ./etc/nagios3/conf.d/preconfigured, kde mi už zbyly jen 4 soubory, ty si přejmenuji, aby se jmenovaly pěkněji.

mv ./generic-host_nagios2.cfg ./generic-host.cfg
mv ./generic-service_nagios2.cfg ./generic-service.cfg
mv ./services_nagios2.cfg ./services.cfg
mv ./timeperiods_nagios2.cfg ./timeperiods.cfg

Kontrolu služeb pro jednotlivé skupiny nastavím v ./services.cfg Změním hostgroup_name podle toho, jak jsem to nakonfiguroval group.cfg. Http, kterou tam mít nepotřebuji, smažu to tedy, ping a ssh chci. Ještě mi tam chybí dohled UPSek. Doplním tedy:

define service {
	hostgroup_name			ups
	service_description		APC UPS
	check_command			ups-check
	use				generic-service
	notification_interval		0
}

Pro kontrolu pingu a ssh existuje defaultní konfigurační nastavení, ale pro ups-check musím ještě doplnit příkaz, který se má spustit. Můžu použít nějakého pluginu, nebo zkusit napsat vlastní skript. UPS APC mají vlastní webové konfigurační rozhraní se statusem o stavu apod. To můžu načíst a pak regulárními výrazy vybrat, co z toho chci.

#!/bin/bash
ip="$1"
x=`wget -q -t 1 -T 5 http://$ip/status.cgi -O -`
 
if [ $? -eq 0 ]; then
        bat=`echo $x | sed "s/.*Battery\ status:\(.*\)/\1/" | head -c 120 | sed "s/.*Serif.*>\(.*\)<.font.*/\1/"`
        power=`echo $x | sed "s/\(.*\)Watts.*/\1/" | sed "s/.*providing:\(.*\)/\1/" | sed "s/.*>\(.*\)\&nbsp.*/\1/"`
        status=`echo $x | sed "s/.*Runtime\(.*\)/\1/" | sed "s/\(.*\)led..gif.*/\1/" | sed "s/.*Serif\(.*\)Serif.*/\1/" | sed "s/.*middle>\(.*\)..font.*font.*/\1/" | sed "s/\&nbsp\;/\ /"`
        time=`echo $x | sed "s/\(.*\)minutes.*/\1/" | sed "s/.*>\(.*\)\&nbsp\;.*/\1/"`
        capa=`echo $x | sed "s/.*Runtime\(.*\)minutes.*/\1/" | sed "s/.*led..gif\(.*\)Serif.*/\1/" | sed "s/.*>\&nbsp\;\(.*\)\&nbsp\;\(.\)<\/font.*/\1\ \2/"`
 
        echo -ne "Battery status: $bat ($capa, $time min)\n"
        echo -ne "Overall status: $status\n"
        echo -ne "Providing: $power Watts\n"
	if [ "$status" == "On Line" ]; then
                exit 0;
        else
                exit 1;
        fi
 
	exit 0
else
        echo "UPS communication lost"
	exit 2
fi

Tento skript si uložím jako ups.sh do nově vytvořeného adresáře /etc/nagios3/plugins. Teď už staří se na tento skript odkázat v definici příkazu. To udělám editací souboru /etc/nagios3/commands.cfg. Kam doplním:

define command {
	command_name	ups-check
	command_line	/etc/nagios3/plugins/ups.sh $HOSTADDRESS$ ;je cesta ke mnou vytvořenému skriptu a předávám mu adresu hosta
}

Pro to, abych mohl používat příkazy z webového rozhraní Nagiosu je potřeba v souboru /etc/nagios3/nagios.cfg změnit check_external_commands na:

check_external_commands=1

Aby se mi status mapa zobrazovala jako stromová struktura, tak edituji /etc/nagios3/cgi.cfg:

default_statusmap_layout=3

To bude asi vše. Zkontroluji nastavení a restartuji Nagios:

nagios3 -v /etc/nagios3/nagios.cfg
/etc/init.d/nagios3 restart

Dohledový systém (zkušební) je možné vidět zde: http://77.78.101.12/nagios3/

Během této semestrální práce jsem si vyzkoušel práci s dohledovým systémem Nagios, což mi pomohlo při laboratorních cvičeních a při mé práci.

Zkoušel jsem také konfiguraci Nagiosu pomocí nástroje Centreon, ale ten bohužel při exportu nastavení pro Nagios vyhazoval chyby v objektech php, které jsem já nemohl ovlivnit, takže jsem se touto utilitou dále nezabýval.

Prezentace

~~DISCUSSION~~

  • vyuka/cviceni/y36sps/semestralky/plchm1.txt
  • Last modified: 2009/05/27 15:20
  • by plchm1