V dalším díle seriálu o dohledovém systému Zabbix se podívejme na pokročilejší možnosti monitoringu a vyhodnocení dat, s čímž souvisí tvorba grafů a map. Podíváme se taktéž, jakým způsobem rozšiřovat možnosti Zabbixu pomocí externích skriptů. V poslední části dnešního dílu si také ukážeme, jak se tvoří akce v případě vzniklého problému.
9.5.2013 06:00 | Antonín Kolísek | czytane 16902×
RELATED ARTICLES
KOMENTARZE
V minulém díle jsme se seznámili s tvorbou šablon, skupin a testů. To samozřejmě neznamená, že je nutné vždy zakládat a tvořit vlastní testy pro monitoring. Zabbix nabízí celou řadu již připravených šablon, které můžeme doplnit, upravit, a nebo použít beze změn. Často v nich najdeme přesně to, co potřebujeme již připravené. Při konfiguraci nebo zakládání hosta, itemu, triggeru nebo prakticky čehokoli nabízí Zabbix funkci Clone díky které je možné, jak již z názvu vyplývá, naklonovat a upravit, co potřebujeme. Vyjmenuji alespoň ty nejzajímavější šablony, které Zabbix nabízí ve výchozím nastavení.
- App agentless : monitoring dostupnosti běžících aplikací/služeb (FTP, HTTP/HTTPS, LDAP, NTP, NNTP, SMTP, POP3, IMAP, SSH, ...)
- App MySQL : monitoring stavu a činnosti MySQL databáze
- App Zabbix server : informace o interním stavu Zabbix serveru
- IPMI : informace o IPMI zařízení (v tuto dobu pouze Intel SR1530,SR1630)
- SNMP : monitoring zařízení, některých parametrů OS (zatím pouze Windows a Linux)
- OS : široká řada systémových informací (Windows, Linux, Solaris, AIX, FreeBSD, OpenBSD, HP-UX, Mac OS X,...)
Pokud Zabbix neumí co potřebujeme
Může se stát, že potřebujeme sledovat nějaké informace, ale dohledový systém nám nenabízí metody, jak se k požadovaným informacím dostat, a nebo nejsou informace podle našich představ. V takovém případě máme několik možností. Můžeme se podívat, zda stejný nebo podobný problém již někdo neřešil ( a většinou zjistíme, že již tento problém řešen byl ), a nebo přistoupit k vlastnímu řešení. Zabbix umožňuje využít externích skriptů a nebo pomocí API doprogramovat vlastní funkce. My se budeme držet první mnohem schůdnější metody, tedy využití externích skriptů. První varianta je komplikovaná v tom, že musíme spoléhat na neměnnost API a také řešit případné změny s každou aktualizací.
Externí skripty - příprava
Nejprve je nutné zkontrolovat nastavení serverové části dohledového systéme Zabbix, jestli je připravený pro používání externích skriptů. Pokud jsme při instalaci postupovali dle návodu (Dohledový systém Zabbix II. - instalace) nemusíme se o další nastavení starat. V opačném případě si je raději zkotrolujeme.
- musí existovat adresář /etc/zabbix/externalscripts, který bude obsahovat veškeré externí skripty
- v /etc/zabbix/externalscripts nastavíme ExternalScripts=/etc/zabbix/externalscripts
Píšeme náš první skript
Volbu jazyka nechávám na každém, dle vlastních preferencí. Je možné použít zcela libovolný "jazyk" (Bash, Perl, Python, Ruby,...). Důležité je dodržet s jakými argumenty skript / program budeme volat a jaké hodnoty bude vracet. Externí skript je volán následovně.
skript[ARG_1,...,ARG_N]
- ARG_1,...,ARG_N jsou argumenty, se kterými je skript volaný. Argumentem může být libovolný řetezec nebo podporované makro
- pokud skript někam zapisuje pozor na oprávnění zabbix_server nebeží pod uživatelem root, ale pod uživatelem zabbix (nebo jiným) s omezenými právy
- skript je vhodné ladit pod uživatelem, pod kterým běží proces zabbix_server
Jednoduchý skript by mohl vypadat dle následující ukázky. Uvádím praktický příklad, který využijeme v další části seriálu. Jedná se o skript pro sledování vytíženosti síťového pásma. Strukturu skriptu nebudu vysvětlovat, abych příliš nepřekročil rámec seriálu. Stačí, když budeme věřit, že funguje, jak má. Poznamenám jen, že poslední řádek skriptu (echo "$BPS") je velmi důležitý. Skript by měl v každém případě končit návratovou hodnotou a neměl by být přerušený voláním exit,aniž by nepředal nějakou hodnotu na standartní výstup (STDOUT). Vykonaní externího skriptu je časově omezené. Výchozí doba je nastavena v zabbix_server.conf na 3 vteřiny a maximální doma může být 30 vteřin. Je nutné si uvědomit, že čím náročnější (časově delší) je externí skript, tím více bude Zabbix vytížen, proto je vhodné přikročit k externím skriptům pouze v krajním případě.
#!/bin/bash
#
# Skript pro mereni BPS.
#
# Pouziti: net_traff IPADDR DEV {in,out}
#
# <antonin@kolisek.cz>
TMP_DIR=/tmp/zabbix
if [ ! -d $TMP_DIR ];
then
mkdir $TMP_DIR
fi
C_TRAF=$(/usr/local/bin/zabbix_get -s $1 -k net.if.$3[$2,bytes])
C_TIMES=$(date +%s)
if [ -e $TMP_DIR/$1_$2.$3 ];
then
P_TRAF=$(cat $TMP_DIR/$1_$2.$3 | awk '{print $2}')
P_TIMES=$(cat $TMP_DIR/$1_$2.$3 | awk '{print $1}')
echo "$C_TIMES $C_TRAF" > $TMP_DIR/$1_$2.$3
else
echo "$C_TIMES $C_TRAF" > $TMP_DIR/$1_$2.$3
echo "0"
exit
fi
BPS=$(echo "(($C_TRAF-$P_TRAF) / ($C_TIMES-$P_TIMES)) * 8" | bc)
if [[ "$BPS" =~ "^[0-9]+$" ]];
then
BPS="0"
fi
echo "$BPS"
ve skriptu byl použitý nástroj zabbix_get - tento nástroj slouží k čtení dat se vzdáleného Zabbix agenta. Syntaxe programu je následující:
zabbix_get -s HOST_IP -k ITEM_NAME[ARG]
Založení nového itemu
Externí skript je pouze prvním krokem, a aby jsme mohli využít Externích testů, musíme založit odpovídající Item. Postup jsme probrali v minulém díle seriálu. Pro zopakování uvádím i názorný příklad. V našem případě se bude jednat o test přenosového pásma na síťovém rozhraní (eth0). Budeme muset založit Item zvlášť pro odchozí a příchozí směr viz následující obrázek.
Zabbix agent - uživatelské rozšíření
Vedle výše uvedených možností nabízí Zabbix ještě jednu možnost, jak přidávat vlastní funkce. Pomocí rozšíření Zabbix agenta. Princip je velmi jednoduchý. Konfigurační soubor agenta zabbix_agentd.conf obsahje položku UserParameter=<key>, <command>, které může obsahovat libovolné pořadí příkazů viz následující příklad, který si v zápětí vysvětlíme.
UserParameter=vfs.folder_size[*],du -shb $1 | cut -f1
Zabbix ve fázi, kdy píšu tento seriál, neobsahuje metodu, jak určit velikost složky. Obsahuje metody na určení velikosti souboru, ale co když potřebujeme velikost celé složky? Externí skript by byl v tomto případě krajně nevhodný. Můžeme s výhodou použít rozšíření Zabbix agenta. V první části definujeme název a řekneme, že budeme předávat argumenty [*]. Dále následuje sled příkazů, jejichž výstupem bude výstup Zabbix agenta. Po každém vložení vlastního testu je nutné agenta restartovat. Jestli vše funguje ověříme následujícím krokem.
shell> zabbix_get -s 127.0.0.1 -k vfs.folder_size[/tmp]
Grafické znázornění dat
Naměřená data a stav sledovaných zařízení můžeme zobrazit v grafické podobě. Máme na výběr dvě možnosti. První možností je znázornění grafem, kde vidíme aktuální stav i historii. Druhou možností je zobrazení pomocí mapy. Tato možnost je vhodná pro znázornění celé infrastruktury a stavu konkrétních zařízení.
Tvorba grafů
Zabbix umožňuje naměřené informace prezentovat pomocí grafů. Máme možnost využít automaticky generovaného grafu, nebo si vlastní graf vytvořit k obrazu svému. V praktickém příkladě se podívejme, jak postupovat při tvorbě grafu.
- Configuration -> Templates -> moje_sablona:Graphs -> Create graph
V příkladu vidíme veškeré vlastnosti grafů, které můžeme ovlivnit. Po nastavení velikosti grafu a jména můžeme zvolit, co vše se bude v grafu zobrazovat (legenda, čas, triggery ). Dále pak můžeme nastavit maximum a munimum pro osu Y, a nebo nechat meze automaticky vypočítat Zabbixem. V sekci Items vybereme, to co bude graf zobrazovat. Zde máme možnost ovlivnit funkci pro výběr dat (průměr, maximum, minimum, vše), dále styl grafu, barvu a umístění osy Y. Výsledkem vznikne graf podobný tomu našemu. V grafu je možné stejně jako v automaticky generovaném grafu zoomovat a pohybovat se v určitém časovém období, což závisí na délce historie a délce trendů, které máme nastavené pro konkrétní Item.
Tvorba map
Zajímavým způsobem, jak prezentovat v Zabbixu aktuální stav monitorovaných zařízení, je použití map. Mapa graficky znázorňuje infrastrukturu monitorované sítě. Můžeme tak mít přehled nejen o stavu zařízení, ale také o jejich umístění a závislosti na jiných aktivních prvcích počítačové sítě. Při tvorbě mapy nejprve musíme definovat velikost a nastavit základní parametry. Většina nastavení se týká grafické podoby. Jako mapový podklad můžeme použít obrázek. Při aktivaci volby Advanced labels může definovat popisky (label) jednotlivých elementů mapy a jejich umístění.
- Configuration -> Maps -> Create map
Po založení mapy můžeme přidávat jednotlivá zařízení tzv elementy. U Každého elementu máme možnost nastavit určité vlastnosti:
- Type : typ elementu (host, mapa, trigger, skupina, obrázek)
- Label : popis elementu
- Label location : umístění popisu
- další paramentry se týkají vlastností ikon pro jednotlivé stavy nebo-li jak budeme graficky vyjadřovat konkrétní stav (Problem, Disables, Maintenance,...)
Jednotlivé prvky můžeme propojovat pomocí Linky a vyjádřit tak propojením vztah mezi jednotlivými elementy. K propojům je možné uvádět popisky a rozlišit je barvou a stylem čáry. Můžeme tak rozlišit optické, metalické a bezdrátové sítě.
- v Monitoring -> Maps najdeme všechny naše mapy
- mapy mohou být společně s grafy použity při tvorbě Screens tzv dohledových obrazovek čemuž se budeme věnovat v příštím díle
Vybereme-li v mapě konkrétní element máme možnost provádět určité akce (Scripts), které jsou definovány v nabídce Administration -> Scripts. Jedná se o jednoduché příkazy, které můžeme spouštět na straně serveru nebo pomocí Zabbix agenta na vzdáleném hostu a výstup příkazu Zabbix zobrazí ve webovém rozhraní. Při tvorbě skriptů je nutné dbát na několik zásad:
- pozor na práva, v něterých případech bude nutné použít program sudo
- je vhodné používat absolutní cesty k programům
- pozor na SELinux
Akce
Naměřená data a stav jednotlivých zařízení můžeme sledovat přes webové rozhraní. U dohledového systému předpokládáme určitou míru samostatnosti. V případě nějakého nežádoucího stavu chceme, aby Zabbix reagoval na vzniklou situaci. Dal nám o problému vědět a pokusil se ho nějakým způsobem v určitých případech řešit. Takový postup označujeme jako scénář. Na tvorbu pokročilých scénářů se podíváme v příštím díle. Nyní se podíváme na tvorbu Akcí, které se od scénářů nijak neliší. V podstatě jde o to samé. Akci si můžeme představit jako určitý úkon (notifikace, restart zařízení, ...) reakci na konkrétní stav, situaci. Scénář není nic jiného než množina akcí. Základní akcí v případě problému je notifikace na email. Podívejme se podle následujícího příkladu, jak akci vytvořit. Předpokládejme, že požadujeme, aby Zabbix poslal e-mail na konkrétního uživatele v případě výpadku jakéhokoli zařízení. Postup by byl následující.
- Configuration -> Actions -> Create action
- vyplníme název, aktivujeme akci zatržením položky Enabled
- pokud chceme automatickou notifikaci i v případě, že je problém vyřešený, aktivujeme položku Recovery message
V záložce Conditions nastavíme podmínky, za jakých situací bude Zabbix provádět akce. Podmínky je možné spojovat logickou spojkou AND / OR. V našem případě vybereme logickou spojku AND. Podmínka bude znít : pokud je hodnota triggeru "PROBLEM" a zároveň (AND) tento tigger je ze šablony moje_sablona a má název Dostupnost, proveď akci.
Záložka Operationsslouží k nastavení samotné akce / úkonu. V našem případě použijeme notifikaci na e-mail viz následující příklad. Podrobnější tvorbu akcí a scénářů si ukážeme v příštím díle. Na začátku si můžeme povědět, že e-mail je možné zaslat jednomu uživateli nebo více uživatelům a nebo celé skupině. Formát zprávy můžeme ponechat ve výchozím tvaru, nebo ji upravit podle vlastních představ.
Rekapitulace
V dnešním díle jsme se podrobněji seznámili s možností tvorby vlastních testů a s prezentací naměřených dat formou map a grafů. Letmo jsme se podívali na tvorbu akcí a dohledových scénářů, které probereme podrobněji v příštím díle. Podíváme se také na některé další metody zjišťování dat, jako je protokol SNMP nebo IPMI.
Odkazy
1. Zabbix domovské stránky : http://www.zabbix.com
2. Zabbix dokumentace : http://www.zabbix.com/documentation.php
3. Zabbix - API : https://www.zabbix.com/documentation/2.0/manual/appendix/api/api
4. Zabbix - externí skripty : https://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/external
5. Zabbix - akce : https://www.zabbix.com/documentation/2.0/manual/config/notifications/action
6. Zabbix - uživatelské rozšíření : https://www.zabbix.com/documentation/2.0/manual/config/items/userparameters