Munin grafikon készítés, kezdő szinten

A Munin a lusta rendszergazdák barátja, mert egyszerű vele megoldani monitorozott értékek látványos megjelenítését. Az alábbiakban bemutatok pár alap dolgot vele kapcsolatban, valamint a plugin készítés alapjait. Az online demo oldalak megtekinthetők a hivatalos oldalon, például itt. Mit lehet megjeleníteni a grafikonon? Hát mindent, ami valamilyen módon számosítható.

mysql_queries-day

Szeretnem megjegyezni, hogy nem vagyok Linux guru. Nem vagyok a pingvin lelkének professzionális értője. Ha ezt olvasod, nyilván te sem. Az alábbiakban azt szeretném bemutatni, hogy minimális tudással, hogyan is használhatjuk ezeket a szolgáltatásokat. Úgy vélem, hogy a leírtak adnak egy jó alapot.
A cikk terjedelmétől nem kell megijedni, a szuper-kezdő rész nagyon könnyű és a bejegyzés elején olvasható.

A telepítés

Én általában Debian alapú rendszereket használok és az apt csomagkezelőt. A folyamat rendkívül egyszerű és nulla konfigurálással is látványos eredményt ad:

apt-get install munin munin-node

Ahol a munin csomag a grafikonokat rajzoló szervert jelenti, a munin-node pedig azt a szolgáltatást, ami az előbbinek az értékeket szolgáltatja. Így ha más rendszereket is monitorozni akarunk, akkor azokra már elegendő a node-ot telepíteni. A program 5 percenként készíti a statisztikákat alapbeállításban, így kb. negyed óra után várhatjuk az első grafikonokat. Ez kicsit megnehezíti a hibakeresést, de a telepítés már eleve tartalmaz alapértelmezetten bekapcsolt pluginokat (hálózat, háttértár, processzor, …).

A grafikonok weboldala

A program statikus HTML fájlokat generál, így bármilyen webszerver szoftver alkalmas a feladatra. Az egyszerűség kedvéért most egy alap konfigos nginx-szet veszek alapul ( apt-get install nginx ), ami a weboldal gyökerét a /var/www/html mappából veszi.

A generált statikus HTML alapértelmezésben a /var/cache/munin/www nappában jön létre, ez természetesen beállítható. Az egyszerűség kedvéért csak egy szimbolikus linket hozunk létre munin néven:

ln -s /var/cache/munin/www /var/www/html/munin

Ennek hatására a http://ip_cim/munin címen érjük majd el az automatikusan előállított oldalt. Ahogy korábban is említettem, a telepítés után érdemes pár percet várni, hogy az első ötperces futás biztosan létrehozza a fájlokat.

munin_mappa

Ha minden jól alakul – a néhány perces várakozás után – akkor az alábbihoz hasonlót kell látnunk a weboldalon. A [] jelek közötti linkekre kattintva már láthatjuk is az első (nyilvánvalóan üres) grafikonokat.

screenshot-192.168.5.100 2016-08-19 12-57-58

screenshot-192.168.5.100 2016-08-19 14-09-32

Ha megelégedünk az alapbeállítás grafikonjaival, akkor már végeztünk is. Ha szeretnénk kicsit állítgatni, finomítani, valamint saját bővítményt készíteni, akkor érdemes tovább olvasni.


Testreszabás, saját bővítmény

A Munin (program) alapvető beállításai

A beállítás fájlt a /etc/munin/munin.conf helyen találjuk. Itt állíthatók be a grafikon generálás alapjai: az RRD adatbázis, a generált statikus HTML, a logok helye. A HTML sablon, stb. Bővebb leírás és magyarázat a készítő oldalán.

Ami minket érdekelhet a host neve rész, ami telepítés után [localhost.localdomain] értékkel rendelkezik, ezt bátran átírhatjuk, megtartva a domain nevek szabályait persze. Itt vehetünk fel további node-okat is.

A Node (adatforrás) alapvető beállításai

A konfig a /etc/munin/munin-node.conf; útvonalon érhető el. Dokumentációja itt található. Számunkra talán egyetlen fontos rész van, az allow paraméter, amely azt adja meg, hogy mely IP címeknek válaszol a node. Ezt akkor kell módosítanunk, ha csak a node-ot telepítjük, de a munin grafikont rajzoló szolgáltatás egy másik gépen fut. A konfig végén található még, hogy melyik IP címhez rendeljük hozzá, ami akkor hasznos ha több hálózati kártya is van a gépben. A host * beállítás azt jelenti, hogy az összes IP címen elérhető a node által szolgáltatott adat. Ezt érdemes a belső hálózatos IP-re állítani. A működést kipróbálhatjuk, ha telnettel rákapcsolódunk az ott szereplő portszámra (4949, de a plugin készítésnél erről majd bővebben).

A bővítmények

Minden egyes grafikont egy bővítmény állít elő. Ezek egyszerű futtatható scriptek, – amelyek bármilyen nyelven íródhatnak – csak annyi a lényeg, hogy a megfelelő formátumú kimenetet generálják. Az elérhető pluginok listája a /usr/share/munin/plugins mappában található. Ezek nem mindegyike futtatható le egyszerűen, mert vannak olyanok, amik külső paramétert is várnak. A saját magunk által készített bővítményt is célszerű ide létrehozni. Azokat, amelyeket használni szeretnénk, a /etc/munin/plugins mappába kell szimbolikus linkelni, például:

ln -s /usr/share/munin/plugins/sajatplugin /etc/munin/plugins

A bővítményt a Munin egy config argumentummal hívja meg, aminek hatására a bővítmény visszaadja a grafikon paramétereit: feliratok, szín, számítás típusa, stb. A config argumentum nélkül futás hatására pedig csak az értékeket adja vissza.

Példa a plugin kimenetére config argumentummal:

pi@raspberrypi:~ $ /usr/share/munin/plugins/rpi_temp config
graph_title Pi2 Temperature
graph_vlabel Celsius
graph_category Sensors
temperature.label Temperature
temperature.type GAUGE
temperature.colour COLOUR0
temperature.draw AREA

és nélküle:

pi@raspberrypi:~ $ /usr/share/munin/plugins/rpi_temp
temperature.value 41.698

A plugin config paraméterei

Ha szeretnénk jobban beleásni magunkat a témába, akkor a referencia itt található. Csupán 2 paraméter kötelező graph_title és {ertek}.value ( pl. “temperature.velue” ) . Az előbbi a grafikon tetején található címsor alapja, az utóbbi pedig maga az érték, amit ábrázol.

Fontos, hogy a generált tartalom nem tartalmazhat extra szóközöket, tabulátort, ékezetet, valamint a megnevezésekben írásjeleket. Az operációs rendszerre jellemző sor vége karaktert kell alkalmaznunk (ami például PHP esetén a PHP_EOL sor végéhez fűzésével lehetséges). A megjelenítendő érték csak pontot tartalmazhat tizedes elválasztó karakterként.

Példa egy PHP scripttel geneált Munin bővítményre, amely a Raspberry Pi2 belső hőmérsékletét monitorozza:

#!/usr/bin/php
<?php

if ( count($argv) == 2 && $argv[1] == 'autoconf' ) {
  exit('yes');
}

if ( count($argv) ==2 && $argv[1] == 'config' ) {
  echo 'graph_title Pi2 Temperature'.PHP_EOL;
  echo 'graph_vlabel Celsius'.PHP_EOL;
  echo 'graph_category Sensors'.PHP_EOL;
  echo 'temperature.label Temperature'.PHP_EOL;
  echo 'temperature.type GAUGE'.PHP_EOL;
  echo 'temperature.colour COLOUR0'.PHP_EOL;
  echo 'temperature.draw AREA'.PHP_EOL;
  exit();
}
$temp = (int) file_get_contents('/sys/class/thermal/thermal_zone0/temp');

echo 'temperature.value '.($temp/1000).PHP_EOL;

?>

Ez a kód tartalmazza az alapvető dolgokat. Nézzük mik is ezek:

grap_title – A grafikon címsorában megjelenő szöveg, az ékezeteket és írásjeleket kerülni kell (kötelező paraméter!)
graph_vlabel – A függőleges tengely szövege
graph_category – A generált HTML-ben a kategóriákhoz gyorslinkeket hoz létre, annak azonosítója állítható itt be. Megadható saját kategória is (angol alfanumerikus karakterekkel)
{fieldname}.label – A grafikon alatti, értékhez tartozó jelmagyarázat szövege
{fieldname}.type – Az érték számításának módját határozza meg. Hagyományos értéknél ez jellemzően GAUGE (pl. hőmérséklet), folyamatosan növekvő értéknél pedig COUNTER (pl. hálózati forgalom, ami a továbbított adat értékét tárolja, így folyamatosan növekszik)
{fieldname}.colour – Az értékhez tartozó színt definiálja előre beállított színpaletta vagy RGB (RRGGBB, # nélkül) formátumban.
{fieldname}.draw – Alapértelmezésben LINE értékű, ami egy vonalat ábrázol. Az AREA pedig kitölti az érték alatti területet.
{fieldname}.value – A mért értéket tartalmazza

További lehetőségekért olvassuk el a referenciát itt vagy itt.

Ha egy grafikonon több értéket is ábrázolni akarunk egyszerre, akkor például az alábbi módon kell a generált tartalomnak kinéznie:

graph_title Temperature and humidity
graph_vlabel Celsius and percent
graph_category Sensors
temperature.label Temperature
temperature.type GAUGE
temperature.colour COLOUR0
temperature.draw AREA
humidity.label Humidity
humidity.type GAUGE
humidity.colour COLOUR1

temperature.value 26
humidity.value 32

Hozzáadás a node-hoz

Ha elkészült a bővítményünk, készítsünk egy szimbolikus linket rá a /etc/munin/plugins mappába, például:

ln -s /usr/share/munin/plugins/mikrotik /etc/munin/plugins

Majd indítsuk újra a a munin-node -ot service munin-node restart vagy /etc/init.d/munin-node restart paranccsal. Természetesen legalább 5 percet várni kell, hogy megjelenjen a generált weboldalon.

A plugin tesztelése

Először próbáljuk ki, hogy a pluginunk futtatható-e (rendelkezik-e futtatás joggal, pl. chmod +x pluginnev). Futtassuk le a config paraméterrel, ellenőrizzük a kimenetet, nem-e gépeltünk el valamit, nincs-e felesleges karakter. Majd a config nélkül futtatva csak <paraméter>.value <szám> lehet.

A hivatalos program erre a munin-run, futtatása munin-run pluginnev.

Ha a fentiek jónak tűnnek, akkor telneteljünk a localhost 4949-es portjára:

telnet localhost 4949

Majd adjuk ki a fetch pluginnev parancsot:

pi@raspberrypi:~ $ telnet localhost 4949
Trying ::1...
Connected to localhost.
Escape character is '^]'.
# munin node at raspberrypi
fetch mikrotik
wanrx.value 60774300714
wantx.value 73587316
.

Tipikusan elkövetett hibák

  • a munin felhasználójának nincs joga futtatni a plugint, vagy a plugin által olvasott paramétert
  • elgépelés, felesleges szóköz/tabulátor/írásjel
  • a value értéke nem szám, vagy a tizedes elválasztó nem pont
  • nincs futtatás jog a pluginon
  • nincs benne a /etc/munin/plugins mappában (szimbolikus link)

Előre definiált színek:

screenshot-munin-monitoring.org 2016-08-19 13-54-03
Forrás: http://munin-monitoring.org/wiki/fieldname.colour