Instalace SNMP
Instalaci do systému provedeme obligátním apt-get install snmp snmpd . Jakmile program apt-get ukončí svou činnost, vrhneme se na hlavní konfigurační soubor démonu (soubor /etc/snmp/snmpd.conf). V něm najdeme řádek
"com2sec paranoid default public"
Na začátek tohoto řádku vložíme znak #. Dále najdeme řádek obsahující
"#com2sec readonly default public"
Z něj naopak znak # odstraníme. Po provedených změnách nezapomeneme démona restartovat (/etc/init.d/snmpd restart). Díky těmto úpravám donutíme SNMPD, aby nám z našeho stroje načítal důležité informace (jako jsou například přenesená data, obsazenost disku, uptime atd.), které později budeme potřebovat.
SNMP nebo-li Simple Network Management Protocol je součástí sady internetových protokolů. Slouží potřebám správy sítí. Umožňuje průběžný sběr nejrůznějších dat pro potřeby správy sítě a jejich následné vyhodnocování (převzato z cs.wikipedia.org/wiki/SNMP).
Pro ověření funkčnosti SNMP použijeme standardní utilitu – program snmpwalk. Do terminálu zadáme snmpwalk -v1 -c public localhost . První parametr označuje, že budeme používat protokol SNMP verze 1. Druhý parametr značí komunitu (skupinu oprávnění – kterou jsme si povolili v konfiguračním souboru) a ve třetím definujeme, kam má dotaz směřovat (náš lokální stroj). V případě, že jste byli úspěšní, se na konzoli objeví několikastránkový výpis MIB atributů s jejich hodnotami.
Vytváření konfiguračního souboru
Naposledy jsem vám ukázal, jak ručně vytvořit hlavní konfigurační soubor k MRTG. Kromě této metody existuje ještě jedna cesta, jak docílit podobného výsledku. MRTG totiž disponuje nástrojem cfgmaker, který se při zadání správných parametrů o vše postará (vytvoří konfigurační soubor, prozkoumá SNMP a přidá první grafy se statistikou přenosu dat pro jednotlivé interface). Pokud byste to rádi vyzkoušeli, zazálohujte si starý konfigurační soubor (jinak bude přepsán) a zadejte do terminálu příkaz
cfgmaker --global 'WorkDir: /var/www/mrtg' --output /etc/mrtg.cfg public@127.0.0.1
Následně je zapotřebí ještě vygenerovat indexovou stránku napsáním
indexmaker /etc/mrtg.cfg --columns=1 --output /var/www/mrtg/index.html
Po patnácti minutách bude (díky cronu) opět vytvořena správná struktura souborů a na grafech se začnou objevovat přenesená data. V případě, že jste byli úspěšní, uvidíte po čase něco podobného jako já.
Výsledný graf přenesených dat
Jestliže toužíte po tom, mít na jedné webové stránce graf přenesených dat i graf pingů, stačí sloučit starý a nový konfigurační soubor dohromady a znovu spustit indexmaker. Pro jistotu zde uvádím můj podrobný výpis /etc/mrtg.cfg (zbavený komentářů).
Výsledné grafy přenesených dat a pingů
WorkDir: /var/www/mrtg EnableIPv6: no WorkDir: /var/www/mrtg Target[127.0.0.1_3]: 3:public@127.0.0.1: SetEnv[127.0.0.1_3]: MRTG_INT_IP="192.168.1.33" MRTG_INT_DESCR="eth0" MaxBytes[127.0.0.1_3]: 1250000 Title[127.0.0.1_3]: Traffic Analysis for 3 – gateway PageTop[127.0.0.1_3]: <h1>Traffic Analysis for 3 – gateway</h1> <div id="sysdetails"> <table> <tr> <td>System:</td> <td>gateway in Unknown (configure /etc/snmp/snmpd.local.conf)</td> </tr> <tr> <td>Maintainer:</td> <td>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</td> </tr> <tr> <td>Description:</td> <td>eth0 </td> </tr> <tr> <td>ifType:</td> <td>ethernetCsmacd (6)</td> </tr> <tr> <td>ifName:</td> <td>eth0</td> </tr> <tr> <td>Max Speed:</td> <td>1250.0 kBytes/s</td> </tr> <tr> <td>Ip:</td> <td>192.168.1.33 ()</td> </tr> </table> </div> Title[localhost_ping-google]: <H1>Round Trip Time pro www.google.com</H1> Target[localhost_ping-google]: `/usr/local/bin/mrtg_ping.sh www.google.com` SetEnv[localhost_ping-google]: MRTG_INT_IP="" MRTG_INT_DESCR="www.google.com" MaxBytes[localhost_ping-google]: 2000 Options[localhost_ping-google]: growright,unknaszero,nopercent,gauge PageTop[localhost_ping-google]: <H1>Round Trip Time pro www.google.com</H1> LegendI[localhost_ping-google]: Ztrata paketu % LegendO[localhost_ping-google]: Prumerny RTT Legend1[localhost_ping-google]: Maximalni RTT (ms) Legend2[localhost_ping-google]: Minimalni RTT (ms) YLegend[localhost_ping-google]: RTT (ms)
Nyní je nejvyšší čas popsat si podrobněji strukturu konfiguračního souboru. Než tak ale učiníme, bude vhodné seznámit se alespoň se základní syntaxí.
- Klíčová slova musí být vždy na začátku řádku.
- Prázdné řádky jsou ignorovány.
- Rádky začínající znakem # jsou ignorovány.
- Do konfiguračního souboru je možné vložit odkaz na jiný konfigurační soubor, a to příkazem Include: <soubor.inc> .
Struktura konfiguračního souboru MRTG
Globální klíčová slova
WorkDir:
Parametr WorkDir nám určuje, do jakého adresáře bude MRTG ukládat HTML stránky, obrázky a logy.
Nepovinná klíčová slova
HtmlDir:
HtmlDir specifikuje, kam budou ukládány HTML stránky. Pozor – klíčové slovo WorkDir potlačí nastavení HtmlDir, ImageDir a LogDir.
ImageDir:
ImageDir specifikuje, kam budou ukládány vygenerované grafy.
LogDir:
LogDir specifikuje, kam budou ukládány vygenerované soubory s logy.
Forks:
Slovo fork v angličtině znamená „rozvětvovat se“. Tato volba je vhodná u velkých konfiguračních souborů (nebo v případě, kdy jednotlivé služby mají dlouhou dobu odezvy). Fork zapříčiní takový stav, že se MRTG rozvětví na více instancí a jednotlivé procesy se začnou zpracovávat nezávisle na sobě.
EnableIPv6:
Jestliže je nastaven na yes, MRTG se dotazuje přes routery na SNMP pomocí protokolu IPv6. Defaultně je EnableIPv6 nastaveno na no.
Refresh:
Hodnota parametru Refresh označuje, po jaké době dojde k automatickému znovunačtení webových stránek s grafy. Jestliže voláme MRTG z cronu každých pět minut, bude hodnota Refresh rovna 300 sekundám (což je pro Refresh zároveň defaultní hodnota). V případě, že MRTG běží jako démon, řídíme se hodnotou Interval.
Interval: #(při použití RRDTool mm[:ss])
Direktiva Interval značí, v jakých časových intervalech se spouští MRTG. Při použití MRTG je defaultní (a nejnižší povolená) hodnota 5 (300 s).
IconDir:
Adresář IconDir označuje umístění, kde se nacházejí obrázky, které jsou automaticky vloženy indexmakerem do zápatí webové stránky s grafy.
Language:
Určuje jazyk, ve kterém jsou vygenerovány www stránky a grafy.
Na výběr máme z těchto jazyků: big5 brazilian bulgarian catalan chinese croatian czech danish dutch eucjp french galician gb gb2312 german greek hungarian icelandic indonesia iso2022jp italian korean lithuanian malay norwegian polish portuguese romanian russian russian1251 serbian slovak slovenian spanish swedish turkish ukrainian.
RunAsDaemon: Yes
Tato direktiva nahrazuje spouštění MRTG přes démon cron. Na rozdíl od cronu neparsuje konfigurační soubory každých pět minut, ale pouze při startu. Díky této skutečnosti ve výsledku tolik nezatěžuje server. Při použití RunAsDaemon je nutné nastavit direktivu Interval a spouštět MRTG s parametry --user=mrtg_uživatel a --group=mrtg_skupina . Jestliže používáte daemontools, nezapomeňte konfigurační soubor doplnit o řetězec NoDetach: Yes, který zapříčiní, že se MRTG démon neodpojí z terminálu.
Konfigurace jednotlivých cílů
Každý monitorovaný cíl musí být identifikován unikátním jménem. Toto jméno musí být přiřazeno každému parametru, který je součástí daného cíle. Jméno je zároveň použito pro pojmenování vygenerovaných stránek, souborů s logy a obrázky pro daný cíl.
Target[cil]:
Klíčové slovo Target určuje, co bude program MRTG monitorovat. Target můžeme zadávat jako SNMP dotaz, nebo jako externí program. Základní formát SNMP dotazu je ve formě port:komunita@router . Pokud některý z údajů obsahuje znak „@“ nebo mezeru, je potřeba ho escapovat znakem „\“ . Pro informaci zde uvedu možné tvary zápisu:
Základní tvar
Target[ukazka]: 1:public@localhost
Prohození údajů
Znaménko „-“ způsobí prohození údajů (například příchozí Traffic přehodí za odchozí a naopak).
Target[ukazka]: -1:public@localhost
Zápis pomocí OIDs
Znak „&“ odděluje jednotlivé OID. V našem případě první údaj (1.3.6.1.2.1.2.2.1.14.1) monitoruje vstupní chyby a druhý údaj (1.3.6.1.2.1.2.2.1.20.1) výstupní chyby na prvním rozhraní.
Target[ukazka]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:public@localhost
Zápis pomocí MIBs
Stejný případ jako výše, pouze namísto OIDs je použito MIBs.
Target[ukazka]: ifInErrors.1&ifOutErrors.1:public@localhost
Externí monitorovací programy
Pokud potřebujeme monitorovat data, která SNMP neposkytuje, můžeme použít externí program, který nám data shromáždí. Program by měl MRTG navrátit čtyři výstupní řádky.
- řádka – aktuální stav první proměnné (například příchozí Traffic);
- řádka – aktuální stav druhé proměnné (například odchozí Traffic);
- řádka – uptime stroje (v tzv. human readable tvaru);
- řádka – název monitorované služby (stroje).
Pro ukázku se stačí podívat do našeho konfiguračního souboru. Spouštíme zde skript /usr/local/bin/mrtg_ping.sh . Pozornější z vás si jistě všimli, že výstupem souboru nejsou čtyři řádky, ale pouze dvě. Díky této skutečnosti uvidíme v jednotlivých grafech namísto hlášení
The statistics were last updated Saturday, 3 June 2007 at 14:10, at which time 'gateway.hodza.net' had been up for 6days, 13:01:01 .
pouze
The statistics were last updated Saturday, 3 June 2007 at 14:10, at which time 'unknown' had been up for unknown.
Parametry při tvorbě grafů
MaxBytes[cil]:
Položka MaxBytes označuje (obvykle v bitech za sekundu) maximální hodnotu proměnných. V případě, že je tato hodnota překročena, je v grafech ignorována. Pro 100Mbitový ethernet je hodnota MaxBytes rovna 12500000. Jestliže potřebujeme pro každou proměnou nastavit zvlášť hodnotu MaxBytes, uvedeme ji jako MaxBytes1 a MaxBytes2.
Title[cil]:
Parametr Title označuje titulek pro vygenerovanou stránku s grafy.
PageTop[cil]:
Přidá na vrch vygenerované stránky řádek textu. Pokud požadujeme více řádků, oddělujeme je za pomocí \n .
RouterUptime[cil]:
Zobrazí uptime routeru. Příklad:
Target[localhost]: 1:public@localhost + 2:public@localhost RouterUptime[localhost]: public@localhost
RouterName[cil]:
Zobrazí jméno routeru. Příklad:
RouterName[localhost]: 1.3.6.1.4.1.4779.1.1.3.0:public@localhost
PageFoot[cil]:
Obdoba PageTop – přidá na konec vygenerované stránky řádek textu. Pokud požadujeme více řádků, oddělujeme je za pomocí \n .
AddHead[cil]:
Stejný význam jako u PageTop – obsah je ale uveden mezi tagy a .
BodyTag[cil]:
Tento atribut vám umožní zvolit si vlastní tag. Příklad:
BodyTag[cil]:
AbsMax[cil]:
V případech, kdy je rozhraní schopné přenést větší Traffic, než je hodnota MaxBytes (například kompresí nebo pomocí frame-relay), bude se při překročení limitu brát v úvahu hodnota AbsMax.
Unscaled[cil]:
Použitím tohoto parametru zamezíte automatickému škálování jednotlivých typů grafů.
WithPeak[cil]:
Standardně grafy obsahují pouze průměrné hodnoty vstupních a výstupních proměnných. Jestliže chceme zobrazovat i jednotlivé špičky, použijte pro jednotlivé grafy tento parametr.
Suppress[cil]:
Supperess určuje, které grafy se nemají generovat. Pokud nás zajímají například pouze denní či roční statistiky, je využití tohoto atributu na místě.
Extension[cil]:
Standardně jsou výstupní stránky vytvořeny s příponou .html. Pakliže potřebujeme příponu jinou (například pro PHP) napíšeme Extension[cil]: phtml .
XSize[cil]: YSize[cil]:
Xsize a Ysize určují velikost generovaných grafů. XSize musí být mezi 20 a 600; YSize musí být větší než 20. Ve výchozím nastavení mají grafy velikost 100x400 pixelů (v x š).
XZoom[cil]: YZoom[cil]:
Xzoom a Yzoom ovlivňují velikosti jednotlivých pixelů v grafu.
Factor[cil]:
Pokud chceme všechna čísla v grafu násobit nějakým koeficientem, použijeme pro definici tuto direktivu.
Kilo[cil]:
Použijte tuto volbu pro změnu násobitele u prefixů. Defaultní hodnota je 1000. Tento tag je obzvláště používán při práci s daty – například 1kB != 1000 bajtů, ale 1024 bajtů!
kMG[cil]:
Mění defaultní násobitel prefixu (k,M,G,T,P). V tagu ShortLegend definuje základní jednotky. Příklad zobrazení rychlosti v nm/s zobrazených v nm/h:
ShortLegend[myrouter]: m/h kMG[cil]: n,u,m,,k,M,G,T,P options[myrouter]: perhour
Colours[cil]:
Mění barvy grafů.
Background[cil]: <#RRGGBB>
Nastaví barvu pozadí vygenerovaných stránek. Příklad: Background[cil]: #a0a0a0a . Na výběr máme:
- Col1 – první proměnná (obvykle vstup);
- Col2 – druhá proměnná (obvykle výstup);
- Col3 – maximum první hodnoty (obvykle vstupu);
- Col4 – maximum druhé hodnoty (obvykle výstupu).
RRGGBB je dvoumístná hexadecimální hodnota pro červenou, zelenou a modrou barvu.
YLegend[cil]:
Mění popisek osy Y na grafu. Pokud je text příliš dlouhý, je tiše ignorován.
ShortLegend[cil]:
Popis u jednotek Max, Average a Current. Defaultně v „b/s“.
Legend[1234IO][cil]:
Popisky pro barevnou legendu. Příklad:
Legend1[cil]: příchozí Traffic v bitech za sekundu; Legend2[cil]: odchozí Traffic v bitech za sekundu; Legend3[cil]: maximální pětiminutový příchozí Traffic; Legend4[cil]: maximální pětiminutový odchozí Traffic; LegendI[cil]: Vstup: LegendO[cil]: Výstup:
TimeZone[cil]:
Tento atribut umožní vygenerovat stránky v jiné časové zóně.
Options[cil]:
- growright – kreslí graf zprava doleva (výchozí nastavení je obráceně);
- bits – všechny hodnoty v grafu vynásobí 8 (zobrazí v bitech namísto bajtů);
- perminute – všechny hodnoty v grafu vynásobí 60 (zobrazí v jednotkách za minutu namísto jednotkách za sekundu);
- perhour – všechny hodnoty v grafu vynásobí 3600 (zobrazí v jednotkách za hodinu namísto v jednotkách za sekundu);
- noinfo – potlačí informace uptime a device name ve vygenerovaných stránkách;
- nopercent – potlačí procentuální vyjádření hodnot;
- transparent – vytvoří pozadí gif obrázků jako transparentní;
- gauge – vstupní data jsou udána jako „aktuální stav“, to znamená, že se nepřipočítává stav od minula;
- unknaszero – v případě vstupu „neznámých“ dat se zapíše do databáze namísto polední hodnoty 0;
- withzeroes – standardně se při počítání průměrného toku ignorují všechny nulové hodnoty; pokud je to nežádoucí, použijte tuto volbu;
- noborder – vytvoří obrázky grafů bez rámečků;
- noarrow – vytvoří osy X a Y bez šipečky na začátku či na konci;
- nobanner – potlačí generování banneru na www stránkách;
- nolegend – potlačí vygenerování legendy a přehledu hodnot pod grafem.
Ze všech parametrů konfiguračního souboru jsem vybral ty opravdu nejdůležitější. Kompletní seznam naleznete na domovských stránkách programu MRTG – konkrétně v menu Documentation – v sekci mrtg-reference.
Rád bych vás upozornil, že při vytváření nových grafů není vhodné v konfiguračním souboru vše narychlo „splácat“ a čekat na výsledek (který se většinou z více či méně závažného důvodu nedostaví). Je daleko lepší postupovat po krocích a vše ověřovat. Pokud používáme k importu dat do MRTG nějaký program či skript, nejdříve ho vyzkoušejte – zda předává správně všechny parametry (po spuštění z terminálu by měl vypsat čtyři řádky a na každém z nich jeden parametr). V případě, že načítáme data přímo ze SNMP, ověřujeme, že OID či MIB existuje a vrací neprázdné hodnoty. Uvedu alespoň jeden případ za všechny.
V novém grafu bychom chtěli zobrazovat chyby na vstupu a výstupu u prvního ethernetového rozhraní. V /etc/mrtg.conf by existoval přibližně takový řádek:
Target[ukazka]: 1.3.6.1.2.1.2.2.1.14.1&1.3.6.1.2.1.2.2.1.20.1:public@localhost
nebo takový:
Target[ukazka]: ifInErrors.1&ifOutErrors.1:public@localhost)
Jak je vidět, pokládáme přes MRTG dva SNMP dotazy. Nejprve vyzkoušíme první. Do terminálu zadejte
snmpwalk -v1 -c public localhost 1.3.6.1.2.1.2.2.1.14.1.
Jestliže je vše v pořádku, musí se zobrazit patřičná část MIBu a hodnota registru. U mě to je
IF-MIB::ifInErrors.1 = Counter32: 0
To samé zopakujeme pro druhý OID:
snmpwalk -v1 -c public localhost 1.3.6.1.2.1.2.2.1.20.1.
Odpovědí u mě bylo IF-MIB::ifOutErrors.1 = Counter32: 0. V případě, že by vám snmpwalk nevrátil žádnou odpověď, máte chybné OID číslo nebo nefunguje SNMP démon. Pakliže se zdá být výpis správný, doplňte konfigurační soubor o základní atributy a zkuste vygenerovat první graf. V případě úspěchu na závěr opravte jednotlivé popisy os, legendy a další parametry. Ve svých příkladech jsem úmyslně vynechal některé atributy, a tak si za domácí úkol zkuste grafy nastavit tak, aby mluvily česky (Položka Language) nebo na popiscích ukazovaly správné jednotky (například položka ShortLegend u grafů pingu).
Konkurence...
Poměrně dlouhou dobu souběžně s vývojem MRTG běží vývoj programu RRDTOOL. Jeho cílem je odstranit všechny možné nedostatky MRTG. Asi největší změnou k lepšímu je způsob ukládání a zobrazování dat. Při uložení hodnot se již automaticky zbytečně negeneruje graf. Ten si můžeme zobrazit kdykoliv jindy, a to podle přesně stanoveného období. Díky tomuto faktu ušetříme spoustu systémových prostředků. Dále také odpadly limitace počtu proměnných. Není tak problém v jednom grafu zobrazovat zároveň například vytížení serveru, obsazenou paměť a volné místo na disku. Vylepšena byla i spousta jiných funkcí, ale to je na jiné povídání. Pro srovnání se můžete podívat například na obrázek přenosu dat.
Statistika přenosu dat – RRDTOOL
Pro naše potřeby je zcela jedno, který z programů zvolíme. Osobně pro orientační grafy, kde nepotřebuji zobrazovat více než dvě proměnné, dávám přednost programu MRTG. V ostatních případech nasazuji RRDTOOL, a to většinou s nějakou webovou nástavbou, jako je například monitorovací systém CACTI.
Na závěr našeho povídání bych rád varoval před přehnaným vykreslováním grafů. Dost často vídávám na serverech několikastránkové grafy všeho, co lze monitorovat – od počtu přihlášených uživatelů, fronty e-mailu až po teplotu v serverově. Musíme si totiž uvědomit, že vykreslování grafů je pro procesor poměrně náročná operace a při velkém množství by mohlo dojít k přetížení samotného routeru. Zde opravdu platí pravidlo, že méně je někdy více...