Munin telepítése és beállítása (Jessie)

A AdminWiki wikiből

A Munin egy Perl-ben írt framework hálózatba kötött számítógépek adatainak gyűjtésére és (grafikus) prezentálására. Az adatszolgáltatók a Munin kliensek, ezeken a munin-node komponens fut, amely egyszerű szöveges protokollal (akár telnet konzolon) megszólítható. A node a kapott kérésre meghívja a beépülő (plugin) adatgyűjtőket (ezek lehetnek shell programok, ELF, exe binárisok, stb.), és az általuk szolgáltatott adatokat szövegesen visszaadja; ezekből a Munin szerver (aggregátor) komponens periodikusan (alapértelmezésben 5 percenként) frissít egy round-robin adatbázist és készít prezentációs grafikonokat illetve weboldalakat. A dolog azért (relatív) biztonságos, mert az önállóan, periodikusan lefuttatott plugin-ok semmilyen paramétert nem kapnak a hívásból - minden a kliensgép konfigurációs állományaiban van meghatározva, így rosszindulatú hívásokkal (relatív) kevéssé lehet fejre állítani a klienst, valamint az aggregátor oldalán sem on-demand történik a számítás illetve grafikon-készítés, így az aggregátort sem könnyű túlterhelni.

Ha a monitorozott gép képes weboldalak megjelenítésére (fut rajta webszerver), érdemes lehet standalone beállítást használni (ekkor a node és az aggregátor is ezen a gépen vannak, a lekérdezés a localhoston történik), így a gép (általában authentikációhoz kötött, önmaga által szolgáltatott weboldalon) prezentálni tudja a saját állapotát.

Az egyszerű szöveges protokoll hátránya a lehallgathatóság, ezért külső aggregátor esetén (ha nem a localhoston történik a lekérdezés) a Munint érdemes SSH tunnelbe ágyazva használni (TODO!).

Tartalomjegyzék

Munin kliens telepítése

Minden gépre érdemes feltenni, standalone gépre és az aggregátorra is. Debian csomagból telepítjük:

apt-get install munin-node # +: munin-plugins-core, munin-plugins-extra, gawk, különféle library-k

A telepítés a /etc/munin/munin-node.conf szerinti beállításokkal elindítja a munin-node démont, amely alapértelmezésben a localhost:4949 TCP porton várja az aggregátor kérdéseit. Ezt egy gyorsteszttel ellenőrizhetjük is:

telnet localhost 4949
[...]
# munin node at FQHN
list

A parancs listázza a rendelkezésre álló pluginokat. Egy-egy konkrét mérési értéket a fetch Munin paranccsal kérhetünk el, a Munin konzolból a quit paranccsal lehet kilépni.

Munin pluginok beállítása

A telepítő lefuttatja a munin-node-configure scriptet, amely igyekszik a releváns pluginokat kiválogatni és a /etc/munin/plugins könyvtárba symlinkeléssel aktiválni. Ezen felül magunk is tölthetünk le és aktiválhatunk további pluginokat.

Módosított vagy saját Munin pluginok

A Debian terjesztésben nem szereplő pluginok beszerezhetőek pl. a Munin Plugin Exchange weboldalról. Ezeket a Debian terjesztésbeliektől elkülönítve, a /usr/local/share/munin könyvtárba telepítjük, és ugyanúgy, a /etc/munin/plugins-ból symlinkeljük. Hozzuk létre ezt a könyvtárat:

mount -o remount,rw /usr # átmenetileg írni kell bele
mkdir -p /usr/local/share/munin/plugins
chown -R root:staff /usr/local/share/munin
chmod -R 2775 /usr/local/share/munin

Ezután töltsük le és könyvtárhelyesen csomagoljuk ki a munin-plugins tarball legfrissebb verzióját, illetve opcionálisan a /usr/local/share/munin/plugins könyvtárba töltsük le a Munin Plugin Exchange oldalon kiszemelt Munin plugin-okat (root:staff, 755 jogosultságokkal). Letöltés illetve kicsomagolás után a/usr csak olvashatóan visszacsatolható:

mount -o remount /usr

A szükséges pluginokat symlinkeléssel aktiváljuk, illetve, ha szükséges, a plugin egyéni beállításait a plugin nevével megegyező, az /etc/munin/plugin.d alatt létrehozott állományba vegyük fel (a tarball-beli pluginok beállításait másoljuk át és szükség szerint szerkesszük meg). Általában az alábbi saját beállításokat illetve pluginokat érdemes aktiválni:

# Apache-2 webszerver és MySQL CPU load és memóriafoglalás
cp /usr/local/share/munin/plugin-conf.d/cpuload /etc/munin/plugin-conf.d/
ln -s /usr/local/share/munin/plugins/cpuload_ /etc/munin/plugins/cpuload_lampserver
cp /usr/local/share/munin/plugin-conf.d/memsize /etc/munin/plugin-conf.d/
ln -s /usr/local/share/munin/plugins/memsize_ /etc/munin/plugins/memsize_lampserver

# Urlcheck (Apache-2 és wsm esetén)
cp /usr/local/share/munin/plugin-conf.d/urlcheck /etc/munin/plugin-conf.d/
ln -s /usr/local/share/munin/plugins/urlcheck /etc/munin/plugins/urlcheck
# A hasonló funkciójú http_loadtime plugint ez esetben nem használjuk
rm /etc/munin/plugins/http_loadtime

# GRSecurity kernel patch miatti override-ok
cp /usr/local/share/munin/plugin-conf.d/if-grsec /etc/munin/plugin-conf.d/
cp /usr/local/share/munin/plugin-conf.d/processes-grsec /etc/munin/plugin-conf.d/

A fent aktivált pluginok általában elegendőek és nem igényelnek külön beállításokat (a Munin Plugin Exchange-ről opcionálisan letöltöttek igényelhetnek). Aktiválás után indítsuk újra a munin-node-ot:

systemctl restart munin-node

IPMI pluginok

TODO!

sensors_ pluginok

Az lm-sensors-hoz kapcsolódó pluginokat általában nem ismeri fel a suggest funkció, így (ha a hardware monitorozása ezzel történik és a sensors parancs egyébként lefut) manuálisan kell felvenni a symlinkeket:

ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_fan
ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_temp
ln -s /usr/share/munin/plugins/sensors_ /etc/munin/plugins/sensors_volt
# Érvényesítés
systemctl restart munin-node

SNMP pluginok

TODO!

NTP pluginok részleges törlése

Talán nem szükséges minden, a maintainer által beállított grafikon, elég az ntp_offset megtartása:

rm $(ls -1 /etc/munin/plugins/ntp* | grep -iv 'ntp_offset')
# Érvényesítés
systemctl restart munin-node

Uptime plugin törlése

Erre a pluginra (szerintem) nincs szükség:

rm /etc/munin/plugins/uptime
# Érvényesítés
systemctl restart munin-node

Munin node távoli lekérdezése SSH tunnelen keresztül

Ez a beállítás nem szükséges standalone Munin használata esetén (ha nincs és nem is lesz külső aggregátor).

Előkészítés

Mivel a Munin titkosítalan szöveges adatforgalmat használ, azt célszerű SSH tunnelen keresztül vezetni. Ehhez hozzunk létre a munin Linux felhasználó home könyvtárában (/var/lib/munin) egy tárhelyet az aggregátor publikus kulcsa számára:

mkdir -m 750 /var/lib/munin                    # a Jessie telepítő nem hozza létre a munin felhasználó home könyvtárát - vajon miért?
chown munin:munin /var/lib/munin
mkdir -m 700 /var/lib/munin/.ssh               # kulcsok könyvtára
chown munin:munin /var/lib/munin/.ssh
touch /var/lib/munin/.ssh/authorized_keys2
chown munin:munin /var/lib/munin/.ssh/authorized_keys2
chmod 400 /var/lib/munin/.ssh/authorized_keys2
chattr +i /var/lib/munin/.ssh/authorized_keys2 # kulcs bemásolása előtt chattr -i -vel kinyitni, utána visszazárni!

Külső aggregátor engedélyezése

Ha van külső aggregátorunk, az imént létrehozott állományba másoljuk be az aggregátor nyilvános kulcsát az alábbi, korlátozó előtagokkal:

from="IP.IP.IP.IP",command="/bin/false",no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,permitopen="localhost:4949" ssh-dss AAAA...

ahol a from tagban az aggregátor IP címe szerepel. Ezekkel a megkötésekkel ez a kulcs kizárólag a Munin forgalmának a from-ban rögzített IP felé tunnelezésére alkalmas.

Az aggregátorra belépve ellenőrizzük a kapcsolatfelvételt:

ssh -f -N -T -L 4949:localhost:4949 -i /PATH/TO/PRIVATE/KEY munin@FULLY.QUALIFIED.HOSTNAME
telnet localhost 4949

parancsokra a telepítés alatt álló szerver Munin konzoljának kell bejelentkeznie. Sikeres teszt esetén ne felejtsük kill-lel leállítani az SSH tunnelt!

Ezzel a külső aggregátor használatát előkészítettük, a további beállításokat már azon kell elvégeznünk.

A munin-node bejegyzése a Tiger által ismert démonok közé

A munin-node démon állandóan fut, valamint jogosan figyel a 4949 TCP porton, így a biztonsági figyelmeztetések elkerülése érdekében be kell jegyezni azt a tigerrc állományba:

-rw-r--r-- root root /etc/tiger/tigerrc

[...]
Tiger_Listening_ValidUsers='[...]|munin|[...]'
[...]
Tiger_Listening_ValidProcs='[...]|munin-node|[...]'
[...]
Tiger_Running_Procs='[...] /usr/sbin/munin-node [...]'
[...]

Munin adatkezelő - aggregátor illetve standalone megjelenítő - telepítése

Ezek a szolgáltatások webfelületen prezentálják a más gépekről, eszközökről (aggregátor) illetve saját magukról (standalone) gyűjtött adatokat. Az esetleges logszerverrel integrált központi aggregátoron (TODO!) kívül hasznos, ha (authentikáció után) megtekinthetőek a saját szerver Munin ábrái minden web megjelenítésre képes szervergépen is, ezeket tehát telepítsük standalone megjelenítőként.

Érdemes az alábbiakat a Munin kliens telepítése és beállítása után elvégezni. A Munin adatkezelőt Debian csomagból telepítjük:

apt-get install munin # +: rrdtools, sok font és fontkönyvtár

Telepítés után a beállítás idejére kommentezzük ki a /etc/cron.d/munin-ban az ötpercenkénti futtatást.

A Munin beállításai

A telepítés létrehozza a Munin által létrehozandó statikus webállományok alapkönyvtárát, amit a webes házirend teljesülése érdekében symlinkelve áthelyezünk a /var/cache alól a /var/www alá és megváltoztatjuk a jogosultságokat:

mv /var/cache/munin/www /var/www/munin     # áthelyezzük
ln -s /var/www/munin /var/cache/munin/www  # symlinkkkel követjük
chown -h munin:munin /var/cache/munin/www  # csak szépség :-)
chown munin:www-data /var/www/munin; chmod 2750 /var/www/munin

Ezután ellenőrizzük az adatkezelő konfigurációját - elegendő az alábbi sorokat meghagyni:

mv /etc/munin/munin.conf /etc/munin/munin.conf.bak # mentjük a régit
mcedit /etc/munin/munin.conf                       # készítünk egy újat
-rw-r--r-- root root /etc/munin/munin.conf

# Configuration file for Munin

# The next three variables specifies where the location of the RRD
# databases, the HTML output, and the logs, severally.  They all
# must be writable by the user running munin-cron.
dbdir   /var/lib/munin
htmldir /var/www/munin
logdir  /var/log/munin
rundir  /var/run/munin

# Where to look for the static www files
staticdir /etc/munin/static
# Where to look for the HTML templates
tmpldir /etc/munin/templates

# (Exactly one) directory to include all files from.
#
includedir /etc/munin/munin-conf.d

# Make graphs show values per minute instead of per second
#graph_period minute

# a simple (local)host tree (supposed, we're monitoring the localhost also)
[FULLY.QUALIFIED.HOSTNAME]
    address 127.0.0.1
    use_node_name yes

(a localhost-ra vonatkozó node definíció feltételezi, hogy a telepítés alatt álló szerveren már be van állítva a munin-node).

Ezután a Munin periodikus (ötpercenkénti) futása engedélyezhető a /etc/cron.d/munin-beli comment eltávolításával. Ezzel az adatgyűjtést megkezdtük, a továbbiakban a megjelenítést állítjuk be.

Webfelület beállítása Apache-2 környezetben

Apache-2 környzezetben a telepítő a Munin webfelületét /munin aliasként publikálja minden virtualhost alatt, illetve CGI-t is engedélyez - ezt szüntessük meg:

a2disconf munin
systemctl reload apache2

és a /var/www/munin alatt keletkező statikus webtartalmat kizárólag az alapértelmezett virtualhost webcímén publikáljuk az alábbi symlink elhelyezésével:

ln -s /var/www/munin /var/www/FULLY.QUALIFIED.HOSTNAME/munin 
chown -h webadmin:www-data /var/www/FULLY.QUALIFIED.HOSTNAME/munin

Gyorstesztként az adatgyűjtés megkezdését követően várjuk meg a /var/www/munin első feltöltését (legfeljebb 5 perc), majd egy, a telepítés alatti szervergépet http protokollon elérő munkaállomás grafikus böngészőprogramjában kérjük el a http:/FULLY.QUALIFIED.HOSTNAME/munin weboldalt, és tekintsük meg a generált grafikonokat.

HTTPS és authentikáció beállítása

Nyilvános webszervernél (tulajdonképpen mindig) célszerű a webfelület megtekintését authentikációhoz kötni - ilyenkor https-re irányítjuk a látogatót, és a https konfigurációban valamilyen - pl. a webstatisztikával azonos - azonosítást követelünk meg:

-rw-r--r-- root root /etc/apache2/sites-enabled/000-default.conf

[...]
<VirtualHost *:80 >
[...]
    <IfModule mod_rewrite.c>
        [...]
        # Logfiles.
        [...]
        # Munin graphs.
        RewriteRule ^/munin(.*)    https://%{HTTP_HOST}/munin$1 [L,R,QSA]
[...]
</Virtualhost>

# Administration and special features via SSL.
<IfModule mod_ssl.c>
    <VirtualHost *:443 >
    [...]
        # DAV administration settings.
        <Directory /var/www/FULLY.QUALIFIED.HOSTNAME>
            [...]
        </Directory>
        [...]
        # Munin settings.
         <LocationMatch "^/(munin(/.*)*$)">
            <IfModule mod_dav.c>
                # Unfortunately, DAV Off cannot be used to turn off a subtree of a DAV-enabled location.
                # https://wiki.apache.org/httpd/ListOfErrors AH00578
                #DAV off
            </IfModule>
            Options +FollowSymLinks
            AuthType Basic
            AuthBasicProvider file
            AuthName "Monitoring"
            AuthUserFile  /etc/apache2/auth.d/FULLY.QUALIFIED.HOSTNAME/FULLY.QUALIFIED.HOSTNAME.user
            AuthGroupFile /etc/apache2/auth.d/FULLY.QUALIFIED.HOSTNAME/FULLY.QUALIFIED.HOSTNAME.group
            <Limit GET HEAD OPTIONS>
                Require group stats
            </Limit>
            <LimitExcept GET HEAD OPTIONS>
                 Require all denied
            </LimitExcept>
         </LocationMatch>
[...]

Ne feledkezzünk el a tényleges FULLY.QUALIFIED.HOSTNAME beírásáról!

A beállítások a webszerver konfiguráció újratöltésével érvényesíthetőek:

systemctl reload apache2

Gyorstesztként egy, a telepítés alatti szervergépet http és https protokollon elérő munkaállomás grafikus böngészőprogramjában kérjük el a http:/FULLY.QUALIFIED.HOSTNAME/munin weboldalt, és az automatikus https-re váltás, majd auditor-ként bejelentkezés után tekintsük meg a generált grafikonokat.

Webfelület beállítása Lighty környezetben

Lighty-t (lighttpd-t) használó szervergépen a Munin eléréséhez szükséges beállítások a házirend szerinti telepítésben eleve szerepelnek.

Gyorstesztként egy, a telepítés alatti szervert http és https protokollon elérő munkaállomás grafikus böngészőprogramjában kérjük el a http:/IP.IP.IP.IP/munin/ weboldalt (a záró slash sajnos kell az alias miatt! - TODO), és az automatikus https-re váltás, majd auditor-ként bejelentkezés után tekintsük meg a generált grafikonokat (vegyük figyelembe, hogy a Munin 5 percenként generál, így értékelhető grafikont esetleg csak 10-15 perc múlva láthatunk).

Munint monitorozó pluginok engedélyezése

Minden grafikus eredményt is szolgáltató gépre érdemes telepíteni a Munin saját működését (munin-stats, munin-update) monitorozó pluginokat is - ezek tájékoztatást adnak arról, hogy a monitorozás (elsősorban a grafikonok készítése) mennyire terheli az adott gépet. A pluginok a Debian terjesztésben benne vannak, csak symlinkelni kell azokat (és a munin-node-ot újraindítani):

ln -s /usr/share/munin/plugins/munin_stats /etc/munin/plugins/munin_stats
#ln -s /usr/share/munin/plugins/munin_update /etc/munin/plugins/munin_update # csak aggregátorra telepítsük!
# Érvényesítés
systemctl restart munin-node

Standalone (a grafikonokat önmagban szolgáltató) webszerver esetén a Munin beállításával készen vagyunk.

Aggregátor funkciók beállítása

Ezek a beállítások csak aggregátoron szükségesek, standalone szervergépen nem.

TODO! - még ne vedd komolyan!

SSH tunnel előkészítése

  • Töltsük le és könyvtárhelyesen csomagoljuk ki az ssh-tunnels tarballt;
  • beütemezés boot-kor (nem muszáj, a cron is elindítja, legkésőbb negyed óra múlva):
sysv-rc-conf -p
  • tunnelek életben tartása:
-rw-r--r-- root root /etc/cron.d/ssh-tunnels

# Crontab fragment: esetleg megszakadt SSH tunnelek negyedorankenti ujraepitese.
# kovacs.zoltan@mimoza.hu 2007-01-03
2,17,32,47 *   * * *    root      /etc/init.d/ssh-tunnels start >/dev/null 2>&1

Munin node lekérdezésének beállítása az aggregátoron

Ha az SSH tunnelezett kapcsolat megvan, azt állítsuk be állandóra:

-rw-r--r-- root root /etc/default/ssh-tunnels

[...]
# lport:rhost:rport     user@remotehost                         keyfile pathname (W/O passphrase!)
LPORT:localhost:4949    munin@FULLY.QUALIFIED.HOSTNAME          /PATH/TO/PRIVATE/KEY

ahol LPORT egy tetszőlegesen választott magas portszám (az aggregátoron localhost:LPORT-on látszik a telepítés alatti szerver Muninja). Indítsuk újra az ssh-tunnels-t:

/etc/init.d/ssh-tunnels start

ami a meglévő tunneleket nem bántja, viszont felépíti a kapcsolatot a telepítés alatti szerverrel.

Ezután közöljük a Muninnal az új node létezését:

-rw-r--r-- root root /etc/munin/munin.conf

[...]
[FULLY.QUALIFIED.HOSTNAME]
    address localhost
    port LPORT
    use_node_name yes

A Munin aggregátor következő lefutása (alapértelmezett időzítés esetén legfeljebb 5') után a webfelületen láthatóak az új node adatai.