A munin működése
A munin egy olyan programcsomag, amivel egy gép könnyedén lekérdezheti sok másik gép teljesítményadatait és grafikonokat rajzolhat belőlük.
Össze lehet kapcsolni a nagios-szal; ebben az esetben riasztást kapunk arról, ha valamely lekérdezett teljesítményadat meghalad egy küszöbértéket.
Tartalomjegyzék |
1 Architektúra
A munin alapvetően kétféle gépet különböztet meg:
- munin-"szerver".
- Ez gyűjti a teljesítményadatokat és rajzol belőlük grafikont.
- Azért idézőjel, mert TCP-értelemben kliensként viselkedik.
- Nincs állandóan futó része: ötpercenként elindul, lekérdezi az adatokat, és frissíti a grafikonokat.
- munin-node
- TCP-értelemben szerver.
- A munin-"szerver" kapcsolódik rá és lekérdezi, amit le lehet.
- Hogy mit lehet lekérdezni, azt az dönti el, hogy milyen pluginek aktívak a munin-node-on.
- Egy plugin aktívvá tételéhez csak be kell symlinkelnünk a plugins könyvtárba (és újra kell indítanunk a munin-node-ot).
- Egy plugin outputja részben a hozzá tartozó grafikonok beállításait, részben az aktuális mért adatokat tartalmazza.
2 A grafikonok
Így fognak kinézni:
- A grafikonokat az RRDTool rajzolja és az adatokat is ő tárolja; a munin igazából csak egy perl wrapper az RRDtool köré.
- RRD: round-robin database (man rrd-beginners, man rrdtutorial - ebben van SNMP is, ha valakit érdekel)
- Sosem nő a mérete, lényegében egy körpuffer
- Adatforrások típusa (man rrdcreate; a lényeg: a típus kiolvasott adat jellemzőiből következik, nem szabadon választható!):
- GAUGE: egy olyan érték, amelynek nem az idő szerinti deriváltját szeretnénk ábrázolni; pl. hőmérséklet
- COUNTER: számláló, ami sosem csökken (kivéve túlcsorduláskor); pl. hálózati forgalom
- Ha bármi miatt resetelődik a számlálónk, tüskés lesz a grafikon, mert az RRDTool túlcsordulást feltételez és ennek megfelelően korrigálja az értéket. Létezik egy killspike.pl nevű script, amivel utólag megtisztíthatjuk az adatbázisokat, de jobb eleve elkerülni a tüske létrejöttét pl. úgy, hogy azt is megadjuk, legfeljebb mekkora érték hihető.
- Az RRDTool a grafikonban nem a számláló mindenkori értékét ábrázolja, hanem a számláló növekedésének az ütemét (a számláló idő szerinti deriváltját).
- DERIVE: olyan számláló, aminél sosem feltételezünk túlcsordulást.
- "Valójában" a két egymást követő értéket összekötő szakasz meredekségét fogja ábrázolni.
- Ez lehet negatív is, tehát számlálóknál érdemes alulról korlátozni az értelmezési tartományt.
- ABSOLUTE: olyan számláló, amit a kiolvasás aktusa nulláz. Egyébként úgy viselkedik, mint a COUNTER.
- Adatforrások további tulajdonságai:
- min, max: érdemes megadni, ha meg tudjuk, mert így az rrdtool el tudja dobni a hibás adatokat (pl. nem lesz az ADSL-ünkön gigabit/s-os forgalmi tüske a grafikon szerint)
- Az adatok értéke lehet "ismeretlen", ami nem ugyanaz, mint a nulla
- Ha a megadottnál hosszabb ideig nem kerül új adat az rrd-be, akkor arra az időszakra ismeretlen lesz az érték
- Grafikonok lehetőségei, a teljesség igénye nélkül:
- Görbék
- "kitöltött görbék" (area)
- Ezek stackelhetők
- Berakhatók fix vízszintes vonalak
- Származtatott értékek ("CDEF")
- Címkék
3 Konfiguráció
A munin-"szervert" a /etc/munin/munin.conf file-ban kell konfigurálni.
Pl:
dbdir /var/lib/munin htmldir /var/www/munin logdir /var/log/munin rundir /var/run/munin # Where to look for the HTML templates tmpldir /etc/munin/templates # a simple host tree [saját.magunk.domain] address 127.0.0.1 [másik.gép.domain] address 192.168.0.4 [harmadik.gép.domain2] address 10.0.0.2 port 49494 [domain;negyedik.gép.valahol] address 172.16.2.3 [domain;névváltós.gép.valahol] address 1.2.3.4 use_node_name yes
A monitorozott gép konfigurációja egyrészt a /etc/munin/munin-node.conf file-ban, másrészt pluginek symlinkelésével történik.
Példaconfig (runitos futtatáshoz):
log_level 4 log_file /var/log/munin/munin-node.log port 4949 pid_file /var/run/munin/munin-node.pid #background 1 #setsid yes host * user root group root host_name névváltós.gép.valahol allow ^127\.0\.0\.1$ allow ^192\.168\.10\.3$
A plugineket a /etc/munin/plugins könyvtárba kell symlinkelni. Vannak generikus pluginek, amik a symlink nevéből találják ki, mit is kell csinálniuk; pl:
- /etc/munin/plugins/if_eth0 -> /usr/share/munin/plugins/if_
- /etc/munin/plugins/sensors_fan -> /usr/share/munin/plugins/sensors_
- /etc/munin/plugins/ping_1.2.3.4 -> /usr/share/munin/plugins/ping_
A pluginek viselkedését külön configfile-okban szabályozhatjuk a /etc/munin/plugin-conf.d könyvtárban elhelyezett file-okkal; pl.:
[mysql*] user root env.mysqlopts --defaults-extra-file=/etc/mysql/debian.cnf [exim_mailstats] group mail, adm [ldap_*] env.binddn cn=munin,dc=foo,dc=bar env.bindpw secret [snmp_*] env.community SecretSNMPCommunityString
4 Riasztások küldése
Egyfelől lehet a nagioson át.
Másfelől lehet önállóan.
Ehhez csak a következőket kell írni a munin.conf-ba:
contacts admin contact.admin.command mail -s "Munin notification ${var:host}" admin@email.cime contact.admin.always_send warning critical [saját.magunk.domain] address 127.0.0.1 # a HTML-ből lehet kipuskázni az alábbi mezőneveket: df._dev_sda1.warning 95 df._dev_sda1.critical 99 hddtemp.hda.critical 50
A valóságban nekem 2004. körül nem nagyon működött a riasztások küldése; sok vakriasztás volt, és nem sikerült rájönni, mi okozza őket. Azóta nem próbáltam.
5 Egyéb lehetőségek
6 Pluginek írása
Példaplugin:
HDDTEMP=/usr/sbin/hddtemp if [ "$1" = "autoconf" ]; then if [ -x "$HDDTEMP" ]; then echo yes exit 0 else echo no exit 1 fi fi if [ "$1" = "config" ]; then echo 'graph_category sensors' echo 'graph_title HDD temperature' echo 'graph_args --base 1000 -l 0' echo 'graph_vlabel temp in °C' echo "graph_width 600" echo "graph_height 200" for a in $drives; do echo "$a.label $a" echo "$a.min 20" echo "$a.max 95" done exit 0 fi function gettemp() { ( if hddtemp -q $1 | grep '[0-9].C$'; then for i in 1 2; do sleep 1 hddtemp -q $1 | grep '[0-9].C$' || exit done fi ) \ | sed 's/.*: \([0-9][0-9]*\).C$/\1/' \ | sort -n \ | head -2 \ | tail -1 } cd /dev for a in ${drives:-[hs]d[a-z]}; do echo "$a.value " $(gettemp $a) | egrep ' [0-9]+$' & done wait
7 Ajánlott irodalom
8 Potenciális ZH-kérdések
- Hogy néz ki a munin architektúrája? Milyen elemekből áll, és ezek hogyan kapcsolódnak egymáshoz? (A válaszban ki kell térni legalább a munin-node-ra, a munin-"szerverre", az rrdtoolra és a pluginekre.)
- Milyen esetben érdemes COUNTER helyett DERIVE típusúnak definiálni egy adatot a munin (rrdtool) számára, és miért?