Monitorování sítě pomocí Icinga Petr Havlíček, HAV417 Abstrakt: Instalace a základní konfigurace monitorovacího systému Icinga s využitím PostgreSQL databáze na operačním systému GNU/Linux Debian Squeeze. Zaměřeno především na monitorování přepínačů firmy Cisco Systems, Inc. řady Catalyst 2960 a 3560 pomocí SNMP. Klíčová slova: icinga, monitoring, postgresql, debian, squeeze, nagios, pnp4nagios SNMP, cisco, 3560, 2960 1 Úvod... 2 2 Instalace... 2 2.1 Základní systém... 2 2.2 Grafické zobrazení... 3 2.3 SNMP pluginy...4 3 Konfigurace... 4 3.1 Definice skupiny hostů... 4 3.2 Definice hosta... 4 3.3 Definice příkazů...5 3.4 Definice služeb...5 3.5 Konfigurace na přepínači Cisco Catalyst 3560 a 2960...6 4 Závěr...6 5 Použitá literatura...6 duben 2012 1/7
1 Úvod Monitorovací systém Icinga vznikl jako odnož dobře známého a hojně používaného open source systému Nagios. Projekt zachoval kompatibilitu zásuvných modulů systému Nagios. Icinga umožňuje využívat pro ukládaní dat databáze MySQL, PostgreSQL, Oracle. Nagios umí ukládat pouze do MySQL databáze. Monitorovací systém má dvě webové rozhraní. První je klasické, jenž je součástí základní instalace a velmi se podobná rozhraní známé z Nagiosu. Druhé je moderní prostředí postavené na platformě AJAX. Při použití moderní webového rozhraní lze navíc použít i webovou aplikaci pro chytré telefony, která se na mnoho zařízeních tváří jako aplikace, tzn nevypadá jako klasická webová stránka. Například není zobrazen řádek s adresou. Konfigurace je také stejná jako v systému Nagios. Provádí se editací konfiguračních souborů, kde jsou umístěny definice hostů, služeb a příkazů apod. Součástí základní instalace není možné měnit tyto definice skrze webové rozhraní. Nenašel jsem přímo plugin, který by to uměl definovat objekty z grafického rozhraní, ale protože se jedná o editaci lokálních souborů, tak není problém takovou funkcionalitu implementovat svépomoci. 2 Instalace Pro instalaci bude použito balíku, jenž jsou nejsou součásti aktuálních stabilních repositářů. Proto je potřeba jako první krok přidat repositář s aktuálnějšími verzemi balíků s názvem Backports. Do souboru: /etc/apt/sources.list.d/squeeze-backports.list Vložíme následující záznam: deb http://backports.debian.org/debian-backports squeeze-backports main Následně spustíme aktualizaci seznamu balíčků: sudo apt-get update 2.1 Základní systém První nainstalujeme balíčky pro databázi: sudo apt-get -t squeeze-backports install postgresql-9.1 libdbd-pgsql Balíčky se samotným systémem: sudo apt-get -t squeeze-backports install icinga icinga-idoutils Během instalace budete dotázání zda chcete použít dbconfig pro nastavení přístupu k databázi. Jde o jednoduché řešení konfigurace, které je v tomto případě plně funkční. Instalátor icinga-core si vyžádá zadání hesla pro přístup k webovému rozhraní (toto heslo je dobré si poznačit). Po dokončení instalace už bude na adrese http://<ip_serveru>/icinga funkční základní webové rozhraní s monitorováním samotného serveru. Pro přihlášení použijte uživatelské jméno icingaadmin a dříve poznané heslo. Jako výchozí se používá autentizace pomocí htpasswd (lokální soubor). Samozřejmě jdou nastavit jiné autentizační mechanismy jako třeba LDAP. Ve výchozím stavu jsou z bezpečnostních důvodů zakázané externí příkazy, pro jejich povolení je potřeba v souboru /etc/icinga/icinga.cfg nastavit hodnotu check_external_commands na 1. Následně spustíme tyto příkazy: sudo service icinga stop sudo dpkg-statoverride --update --add nagios www-data 2710 /var/lib/icinga/rw sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/icinga sudo service icinga start Další krok je zprovoznění zapisování události do databáze pomocí icinga-idoutils. V konfiguračním souboru /etc/icinga/icinga.cfg odkomentujeme následující řádek: broker_module=/usr/lib/icinga/idomod.o config_file=/etc/icinga/idomod.cfg Poté restartujeme službu icinga pomocí následujícího příkazu: sudo service icinga restart Následně je potřeba povolit IDOUtils v souboru /etc/default/icinga, kde nastavíme hodnotu IDO2DB na yes. Nakonec spustíme službu obstarávající zápis do databáze: sudo service ido2db start duben 2012 2/7
2.2 Grafické zobrazení Existují služby, které jsou schopny exportovat zjištěná data do snadno zpracovatelného formátu pro následné grafické vykreslení. K tomuto účelu se nejčastěji používá modul PNP4Nagios. Instalace provedeme opět z Backports repositáře, kde je aktuálnější verze než v oficiálních repositářích. sudo apt-get -t squeeze-backports install pnp4nagios Dalším krokem je nastavení služby npcd starající se o zpracovaní dat. Změny provádíme v souboru /etc/pnp4nagios/npcd.cfg log_type = file log_level = -1 load_threshold = 10.0 Nyní nastavení zobrazovaní v pnp4nagios. Provádíme v souboru /etc/pnp4nagios/config.php: $conf['nagios_base'] = "/icinga/cgi-bin"; Vytvoříme šablony, pro služby s grafy v souboru /etc/icinga/objects/generic-service_icinga.cfg. define service{ generic-service process_perf_data 1 register 0 action_url /pnp4nagios/graph?host=$hostname$&srv=$servicedesc$' class='tips' rel='/pnp4nagios/popup? host=$hostname$&srv=$servicedesc$ Přidáme také zobrazení odezvy na zařízení do grafu. U každého zařízení se automaticky kontroluje dostupnost pomocí nástroje ping. Změny provedeme v souboru /etc/icinga/objects/generic-host_icinga.cfg. action_url /pnp4nagios/graph?host=$hostname$' class='tips' rel='/pnp4nagios/popup? host=$hostname$&srv=_host_ Další krok je povolení zpracování dat pro npcd, aby měl z čeho vytvořit graf v globální konfiguraci /etc/icinga/icinga.cfg. process_performance_data=1 broker_module=/usr/lib/pnp4nagios/npcdmod.o config_file=/etc/pnp4nagios/npcd.cfg Přidáme vyskakovací náhledové okno při najetí na přidanou okno s náhledem grafu při najetí na action tlačítko. Vytvoříme soubor /usr/share/icinga/htdocs/ssi/status-header.ssi s následujícím obsahem: <script src="/pnp4nagios/media/js/jquery-min.js" type="text/javascript"></script> <script src="/pnp4nagios/media/js/jquery.cluetip.js" type="text/javascript"></script> <script type="text/javascript"> jquery.noconflict(); jquery(document).ready(function() { jquery('a.tips').cluetip({ajaxcache: false, dropshadow: false,showtitle: false ); ); </script> Následně změníme práva jen pro čtení, abychom zabránili přepsání. chmod 644 /usr/share/icinga/htdocs/ssi/status-header.ssi Povolíme spuštění npcd v /etc/default/npcd hodnotou RUN="yes". Následně jej spustíme příkazem: sudo service npcd start Protože konfigurace PNP4Nagios počítá s použitím systému Nagios, tak musíme opravit cestu k souboru pro ověření uživatele. V apache konfiguraci PNP4nagios /etc/apache2/conf.d/pnp4nagios.conf: AuthUserFile /etc/icinga/htpasswd.rs Pro aplikaci změny je potřeba restartovat službu apache2, aby při příštím zobrazení fungovalo ověření. sudo servce apache2 restart Pro ověření funkčností byl vytvořen oficielní skript. Stažení provedeme příkazem: wget http://verify.pnp4nagios.org/verify_pnp_config Při spuštění mu předáme jako parametry cesty ke konfiguračínm souborům. sudo perl verify_pnp_config --mode npcdmod config=/etc/icinga/icinga.cfg --pnpcfg=/etc/pnp4nagios duben 2012 3/7
2.3 SNMP pluginy Nejdříve je potřeba doinstalovat potřebné balíčky. sudo apt-get install libwww-perl libnagios-plugin-perl Poté stáhneme archív se zásuvnými moduly. wget http://downloads.sourceforge.net/project/nagios-snmp/nagios-snmp-plugins/1.1.1/nagios-snmpplugins.1.1.1.tgz Následně stačí rozbalit a spustit instalační skript tar -xvf nagios-snmp-plugins.1.1.1.tar sudo nagios_plugins/install.sh 3 Konfigurace Konfigurace je stejná jako v případě systému Nagios. Skládá se z různých konfiguračních souborů, kde jsou uloženy definice pro jednotlivé položky systému. Použití SNMP pluginu předpokládá uložení komunity řetězce do uživatelské proměnné 7 v souboru /etc/icinga/reources.cfg. $UESR7$=-C <comunity> -2 Pro lepší plánování kontrol jsem upravil dobu určenou pro jeden interval z 60 sekund na 5.Konfigurace se nachází v globálním konfiguračním souboru /etc/icinga/icinga.cfg. interval_length=5 Po každé provedené změně konfigurace je potřeba říct službě Icinga, aby si načetla aktuální konfiguraci. sudo service icinga reload Veškeré následující příklady mohou být uloženy v jednom nebo více souborech. Je vhodné zvolit strukturu, ve které se dá snadno orientovat. Nejdůležitější je uvést cestu k souborům nebo složce s těmito soubory v souboru /etc/icinga/icinga.cfg jako hodnotu parametru cfg_file příapdně cfg_dir. cfg_dir=/etc/icinga/switches 3.1 Definice skupiny hostů Pokud plánujeme využít monitorování několika služeb u více zařízení najednou, tak je potřeba první vytvořit skupinu, do které poté přidáme jednotlivé zařízení. Nakonec nastavíme službu na celou skupinu. Skupina hostů sdružující všechny prvky typu Cisco Catalyst 3560 define hostgroup { alias Cisco Catalyst 3560 3.2 Definice hosta Vytvoříme definice pro jednotlivá zařízení a přiřadíme je do skupiny příslušné skupiny. V této části lze ošetřit i závislosti mezi zařízeními a správné vykreslení topologie v mapě stavů. Páteřní prvek typu Cisco Catalyst 3560. define host { host_ core generic-host hostgroups C3560 address 10.0.2.1 duben 2012 4/7
Prvek který je v topologii zapojen do core. Parametr parents určuje nadřazené zařízení pro vykreslení do mapy stavů. define host { host_ distribution generic-host hostgroups C3560 parents core address 10.0.2.2 Definice závislosti upozornění je bohužel oddělena od závislosti pro mapu stavů. Musíme tedy nadefinovat zvlášť podle následujícího příkladu. define hostdependency { host_ core dependent_host_ distribution notification_failure_criteria d,u 3.3 Definice příkazů Před vytvořením služeb, které se budou monitorovat je nutné vytvořit seznam příkazů, jenž budou služby využívat. Jde o jednoduchou definici, kde přidáme unikátní jméno příkazu z příkazové řádky. Příkaz musí vracet hodnoty 0 (OK), 1 (Warning), 2 (Critical) nebo 3 (Unknow). Veškerý textový výpis zapsaný stdout bude zobrazen jako detail u služby. Proměnné $ARGn$ reprezentuje n-tý parametr zadaný u definice služby. Příkaz kontrolující zatížení procesoru přepínače. command_ check_switch_load command_line $USER1$/check_snmp_load.pl -H $HOSTADDRESS$ $USER7$ -T $ARG1$ -f -w $ARG2$ -c $ARG3$ $ARG4$ Příkaz kontrolující paměť přepínače command_ check_switch_mem command_line $USER1$/check_snmp_mem.pl -H $HOSTADDRESS$ $USER7$ $ARG1$ -f -w $ARG2$ -c $ARG3$ $ARG4$ Příkaz kontrolující stav prostředí (teplota, větráky, napájení). command_ check_switch_env command_line $USER1$/check_snmp_env.pl -H $HOSTADDRESS$ $USER7$ -T $ARG1$ $ARG2$ Příkaz kontrolující zatížení rozhraní přepínače. command_ check_switch_int command_line $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ $USER7$ -n $ARG1$ $ARG2$ 3.4 Definice služeb Služby jsou spouštěny na všech zařízeních ve skupině C3560. Interval kontrol je hodnota parametru check_interval vynásobena počtem sekund z icinga.cfg (výchozí hodnota je 60 sekund). Některé příkazy vyžadují zadat dodatečné parametry. Ty se v definici oddělují vykřičníkem. Služba pro monitorování zatížení CPU. První parametr je typ monitorovaného zařízení, další úrovně pro varovný a kritický stav. Úrovně jsou definované pro průměrnou zátěž za 1, 5 a 15 minut. cisco_load service_description Switch Processor Load check_interval 6 check_command check_switch_load!cisco!90,80,60!100,100,100 duben 2012 5/7
Služba pro sledování používané paměti na přepínači. První parametr definuje, že se jedna o zařízení Cisco (Modul umí také monitorovat zařízení firmy HP a počítače s OS Linux.) cisco_mem service_description Switch Memory check_interval 12 check_command check_switch_mem!-i!80!99 Služba na sledování prostředí negeneruje data použitelné pro vykreslení do grafu, proto jako vzor není použita služba s ikonou akce a popout náhledem grafu. Jediný parametr je zde typ koncového zařízení. cisco_fan service_description Switch Fan status generic-service check_interval 60 check_command check_switch_env!cisco Pro sledování jednotlivých zařízení je použito více parametrů. První je název rozhraní. Pokud není definován přepínač -r, tak se z názvem pracuje jak s regulárním výrazem. Přepínač -f, který je u dříve zmíněných služeb umístěn již v definici příkazu, slouží pro generování dat pro vykreslení. Ve výchozím stavu je monitorován pouze stav rozhraní. Přepínač -k mění výchozí chování na sledování zatížení portu. Pomocí -Y jsou výsledky v absolutních hodnotách rychlosti místo v procentech (přepínač -y). Pokud není definováno -B, tak jsou absolutní hodnoty v bytech za s (Bps). Pro přehlednější definici varovných (-w) a kritických (-c) úrovních je definován přepínač -M, jenž násobí udané hodnoty číslem milion. V našem případě tedy do megabitů za sekundu (Mbps). Poslední parametr (-d) definuje za jak dlouhé období (v sekundách) jsou data zpracovávána. cisco_int_fa0/1 service_description Switch int Fa0/1 check_interval 2 check_command check_switch_int!fastethernet0/1!-ybkrf -M -w 50,30 -c 80,50 -d 10 3.5 Konfigurace na přepínači Cisco Catalyst 3560 a 2960 Na přepínačích je jako první potřeba nastavit IP adresu některému z přepínaných virtuálních rozhraní (SVI). V případě, že není server a zařízení ve stejné IP podsíti je nutné nastavit ještě výchozí bránu. (config)# interface vlan 1 (config-if)# ip address 10.0.2.1 255.255.255.224 (config)# ip default-gateway 10.0.2.31 Následně je dobré ověřit ping z monitorovacího serveru na dané zařízení. Pokud ping dopadl úspěšně je jisté, že máme funkční propojení mezi zařízení a serverem. Na přepínači je potřeba povolit snmp server. Pro SNMP verze 2 se pro ověření používá tzv. komunitní řetězec, který slouží k základní autentizaci přístupu k informacím. Pomocí RO říkáme, že s tímto komunitním řetězcem je možné data pouze číst (read-only). (config)# snmp-server community <comunity> RO Cisco IOS umí ještě zabezpečit přístup pomocí bezstavového filtrování paketů (Access Control List), kde specifikujeme adresu zařízení, jenž má k SNMP přístup. (config)# access-list 1 permit 10.0.2.32 (config)# snmp-server community <comunity> ro 1 duben 2012 6/7
4 Závěr Popsal jsem svůj postup, který jsem použil při instalaci monitorovacího serveru Icinga za účelem monitorovaní sítě pod svou správou. Je zde popsána funkční základní konfigurace. Ve výsledku je systém plně funkční s monitorováním základní údajů na jednotlivých přepínačích. Instalace není zrovna nejednodušší. Všechny mnou použité zásuvné moduly jsou psány pro systém Nagios. Ovšem s několika změnami konfigurace už vše fungovalo bez problému. Jde o velmi složitý systém z mnoha možnosti konfigurace v základu jsem se rozhodl, že bude postačující instalace a základní služby. 5 Použitá literatura [1] Icinga. [online]. Dostupné z: http://www.icinga.org [2] PNP4Nagios. [online]. Dostupné z: http://www.pnp4nagios.org/ [3] Nagios Plugins. [online]. Dostupné z: http://nagios.manubulon.com/ duben 2012 7/7