Sledování síte (SNMP, MRTG, Nagios)

Antonin Karasek (xkarase2@fi.muni.cz)


Obsah


K cemu to?

Pokud spravujete jeden a vice pocitacu, na kterych zavisi prace jeste nekoho jineho nez vas, je vzdycky dobre, kdyz vas na vypadek upozorni nekdo jiny nez zakaznik nebo sef. Navic je taky dobre vedet, jestli nahodou ten pocitac (pocitace) neprestava stihat a ze by bylo fajn dokoupit procesor, pamet nebo pocitac.

Co se tyce toho druheho pozadavku, tak muzete namitnout, ze na to staci top, ale na to ja vam zase reknu, ze nejvice jsou stroje zatizeny prave v dobe, kdy jste na obede nebo koukate z okna - proste takovy graf zateze je v celku fajn vec :o)) Navic se da ukazat sefovi jako v celku padny argument...


Co budeme monitorovat?

Vsechno :o)

Respektive vsechno, co ma vlastni IP adresu. Zakladni pouzity mechanismus je totiz SNMP, coz je standard, ktery podporuje snad kazde trochu konfigurovatelne zarizeni...


Hmm, zacina me to zajimat - co vlastne to SNMP dokaze?

SNMP je zkratka pro "Simple Network Management Protokol" (RFC 1157). Byl navrzeny tak, aby ho dokazalo implemetnovat i to nejjednodussi zarizeni - z toho taky plyne to, ze funguje nad UDP a ne TCP. Je to zpusob, jakym o sobe muze zarizeni davat vedet vedet prakticky neomezene mnozstvi informaci. Navic podporuje mechanismus SNMPTRAP (RFC 1215) pomoci ktereho vas muze zarizeni i aktivne informovat o necem nekalem. A aby toho nebylo malo, nektera zarizeni se daji pomoci SNMP i konfigurovat...

Zakladem SNMP je tak zvany MIB strom. MIB strom je v podstate logicke rozcleneni celeho meritelneho sveta do stromu. Nas asi bude nejvic zajimat podstrom s prefixem ".iso.org.dod.internet". Listy tohoto podstromu mohou vyjadrovat metriky jako uptime (sysUpTime.0), idle-time procesoru (ssCpuRawIdle.0) a tak podobne. Dluzno zminit, ze kazdy uzel ma ciselnou reprezentaci, kterou je mozne pouzit misto nazvu. Slysel jsem dokonce, ze vlastni list ma i microsofti dokument Wordu - i kdyz netusim, proc ho chce Bill monitorovat :o)

Specifikaci listu najdete v MIB souborech. Jsou to v celku snadno citelne textove soubory. Na mem systemu jsou napriklad umisteny v adresari /usr/local/net-snmp/share/snmp/mibs. Kazdy list ma svuj typ (string, integer, ...), MAX-ACCESS (read-write nebo read-only), pripadne jeste DESCRIPTION. Priklad uvadim nize:

ssCpuRawIdle OBJECT-TYPE SYNTAX Counter32 MAX-ACCESS read-only STATUS current DESCRIPTION "idle CPU time." := { systemStats 53 }

Kdyz tedy mate na stroji snmp daemona, muzete se ho ptat na hodnoty metrik (uzlu), jako ssCpuRawIdle.0, dale je mozne ho nakonfigurovat tak, aby v pripade, ze nameri neco zajimaveho, poslal snmptrap na jiny stroj (tam by mel bezet jiny daemon, ktery na to umi nejak reagovat)

Co se tyce zapisovani do jednotlivych listu MIB stromu, tak to uz asi neni neco, co by se tykalo PC. Ne, ze by to neslo, ale prijde mi dost silene takto neco konfigurovat. Nicmene se takto da napriklad konfigurovat router - proste zapisujete do listu, ktere predstavuji routovaci tabulky.

V soucasne dobe existuji tri verze SNMP (1, 2 a 3). Verze jedna umi vsechno vyse uvedene. 2 umi navic autentizaci - takze se da definovat, ze cist muzou vsichni, ale zapisovat jenom nekdo. 3 (RFC 2273) umi jeste navic prenasena data sifrovat. Nejpouzivanejsi je zatim verze 2. Co se tyce jednoduchych zarizeni jako jsou printservery nebo male routery, tak asi bude nejakou dobu trvat nez budou mit dostecny vykon na nejakou kriptografii, takze to tak asi jeste chvili zustane.


Open-source implementace.

Mozna existuje jeste neco jineho, ale ja jsem narazil na net-snmp. Obsahuje snmpd (snmp daemon), snmptrapd (daemon, ktery obsluhuje snmptrap generovane snmpd) a spoustu nastroju pro cteni a zapisovani MIB stromu. V soucasne dobe se muzete setkat s veriz 5.x - na Debianu pripadne jeste 4.x. Pokud se s tim chcete naucit zachazet, doporucuji tyto tutorialy.

Instalace je v celku standartni - ./configure, make, make install. Co je trosku nestandartni, je konfigurace a prvni spusteni. Konfiguracni soubory jsou 3 - snmp.conf (ten ctou temer vsechny programy - obsahuje obecne volby fungovani SNMP), snmpd.conf (konfigurak snmpd), snmptrapd.conf (analogicky). Pro vygenerovani prvniho konfiguraku doporucuji utilitku snmpconf:

snmpconf -g basic_setup

Ta se vas vypta na nejake ty veci, jako umisteni systemu a kontakt a vygeneruje to, co byste jinak hodinku psali... Pokud ale budete chtit splnit ukol na pristi tyden, rucnim zmenam konfiguraku se stejne nevyhnete :o)

snmpd je dost dobre konfigurovatelna vecicka a je mozne mu rict aby sledoval veci jako zaplneni disku, vytizeni procesoru, jestli bezi konkretni proces, ... Navic umi na kriticke hodnoty reagovat i jinak nez jenom zaslanim snmptrap - umi spustit libovolny program, ktery problem vyresi...

Krome toho muzete merit i metriky, ktere snmpd merit neumi - bud napisete skript nebo program nebo muzete napsat i vlastni knihovnu a snmpd prekompilovat nebo ji dokonce nacitat jako dynamickou knihovnu z konfiguraku - fantazii se meze nekladou :-)

snmptrapd umi na snmptrap reagovat prakticky libovolnym zpusobem - default je zapis do logu (v konfigurovatelnem formatu), muze ale take zoustet externi program (skript)...


Malovani grafu.

SNMP samo o sobe neni spatne, ale to co je na nem nejzajimavejsi, jsou programy, ktere ho nejakym zpusobem vyuzivaji. Jednim z nich je MRTG (Multi Router Trafic Grapher). Nazev je vice-mene historicky - pubodne mel malovat grafy zateze sitovych rozhrani. Pro zjistovani hodnot pouziva SNMP - takze uz je jenom otazkou konfigurace ho presvedcit, aby ty hodnoty byly neco jineho nez provoz na sitovem rozhrani a uz malujete napriklad graf zateze procesoru...

Instalace opet neni velky problem - jenom mozna budete muset prekompilovat klihovny jako gd nebo libpng. Jinak je to presne podle souboru doc/mrtg-unix-guide.txt.

Co se tyce konfigurace, tak zapomente na to, co pisou v doc/mrtg-unix-guide.txt.

cfgmaker --global 'WorkDir: /home/httpd/mrtg' \ --global 'Options[_]: bits,growright' \ --output /home/mrtg/cfg/mrtg.cfg \ community@router.abc.xyz

Sice nejaky konfigurak vygeneroval, ale urcite nebyl moc funkcni - pouzitelny z neho byly jen dva radky "EnableIPv6: no" a "WorkDir: /home/httpd/mrtg". Pokud chcete neco opravdu funkniho, tak zkuste tuto stranku. Jinak se na Internetu vali docela dost predepsanych konfiguraku pro malovani vseho mozneho. Treba tady. Pri psani konfiguraku si dejte pozor na bila mista ba zacatku radku - pokud tam budou, tak to MRTG nepochopi.

Vzhled vygenerovane stranky (i grafu) by mel byt pomerne dobre konfigurovatelny. Pokud jsem to spravne pochopil, tak neni mozne malovat vice nez dve krivky do jednoho obrazku. Jinak ukazku najdete tady. Nicmene bude funkci jen do stredy - pak tuto stranku presunu nekam, kde na ni uvidim jenom ja - povazuji to za informace, ktere nemusi vedet kazdy...

Co se tyce vyuziti systemovych prostredku, tak je MRTG v celku skromny. Kdybyste nahodou potrebovali tech grafu malovat stovky, tak je v celku dobry napad pouzit jako backend Roud Robin databazi (rrd). To je knihovna, se kterou se asi setkate vzdycky, kdyz pujde o uchovavani statistickych informaci. Nechova se jako klasicka databaze, ze ktere muzete precist presne to, co jste tam ulozili, ale dokaze vam rict, ze prumer hodnot, ktere jste kladali minuly tyden ve stredu je 10...


Dalsi nastroje vyuzivajici SNMP.

Je jich urcite hodne. Naprosta spicka je asi HP Open View. Ten umoznuje namalovat temer libovolne slozitou sit a jeji podsite, celou strukturu prochazet podle logickeho cleneni, cist metriky z libovolneho zarizeni a libovolne zarizeni, ktere to umoznuje, take konfigurovat - takze se da s trochou nadsazky rict, ze z jednoho pocitace a dokonce i z jedne aplikace uridite celou sit. A nemusi vas zajimat, ze mate na siti zarizeni od ruznych vyrobcu a konfiguracni utility vypadaji ruzne. Navic vam da vedet, pokud nejake zarizeni na siti poslalo snmptrap.


Nagios

SNMP je hodne dlouha paka, pokud jde o monitorovani zeleza nebo cehokoli, co si umi stroj zmerit sam. Nicmene pokud stroj uplne umre nebo se na nem zacykli nejaky daemon, potrebujete neco, ho dokaze "ocuchat" zvenku. Presne to dela Nagios.

Obsahuje sadu pluginu, kde kazdy je v podstate jednoduchy program nebo skript, ktery umi nejak proverit dostupnost urciteho stroje nebo sluzby a rict ANO (sluzba funguje) nebo NE (sluzba nefunguje). Navic rozlisuje mezi sluzbami a stroji a vi neco o tom, na kterem stroji sluzba bezi a pochopi, ze pokud si na ten stroj nezapingal, tak uz ani nemusi zkouset, jestli tam bezi nejaka sluzba nebo ne. Navic umoznuje definovat zavislosti mezi sluzbami. Takze mate napriklad MySQL za firewallem a jeho dostupnost proverujete tak, ze zavolate PHP skript, ktery z MySQL vytahne nejake informace a Nagios zjisti, ze spadl Apache, uz se nebude pokouset otestovat MySQL.

Prvni vec, kterou se doctete v dokumentaci, je, ze pro novacky je to v celku slozita vec. Vyplati se tomu verit a precist dokumentaci pokud mozno pozorne, ale zase vas to nemusi odradit - ja jsem Nagios rozjel behem 3 hodin. Teda - ne ze bych to za tu dobu nakonfiguroval tak, aby to bylo pouzitelne v produkcnim prostredi, ale tak nejak to bezi. Myslim si, ze jeden pracovni den by mohl stacit, pokud nemate velkou sit nechcete delat prilis velke silenosti...

Konfigurace je udelana velmi inteligentne - muzete nadefinovat sablony, ktere potom jenom nejak modifikujete - takze pokud mate 10 serveru, na kterych bezi Apache a na 3 z nich mate navic postu, nemusite definovat vsechno zvlast, ale pujde o nadefinovani dvou sablon, kde ta druha bude dedit sluzbu http z te prvni. Rozebirat to do podrobna a v podstate opisovat dokumentaci nepovazuji za smysluplne...