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

Innen: AdminWiki

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, akármi), é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-ek 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!).


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-extra acpi libnet-snmp-perl libwww-perl python # +: ethtools, smartmontools, 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

Módosított vagy saját Munin pluginok

A Debian terjesztésben nem szereplő plugin-ok 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

# Fail2Ban statisztikák
cp /usr/local/share/munin/plugin-conf.d/fail2ban /etc/munin/plugin-conf.d/
ln -s /usr/local/share/munin/plugins/fail2ban_all_jails /etc/munin/plugins/fail2ban_all_jails

# Urlcheck
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

# 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:

/etc/init.d/munin-node restart

IPMI pluginok

Ha a hardware szenzorokat IPMI-vel monitorozzuk, elsőként a Debian Squeeze-beli munin-plugins-extra csomaggal települő ipmi_sensor_ wildcard plugint érdemes kipróbálni, az alábbi paranccsal:

munin-run --servicedir=/usr/share/munin/plugins ipmi_sensor_ suggest

A parancs megkeresi a szenzorokat és egy konfigurációs állományt készít (/etc/munin/ipmi), amelyben csoportosítva listázza ezeket. Általában az alábbi három plugin hívást javasolja:

ln -s /usr/share/munin/plugins/ipmi_sensor_ /etc/munin/plugins/ipmi_sensor_u_degrees_c
ln -s /usr/share/munin/plugins/ipmi_sensor_ /etc/munin/plugins/ipmi_sensor_u_rpm
ln -s /usr/share/munin/plugins/ipmi_sensor_ /etc/munin/plugins/ipmi_sensor_u_volts
# Érvényesítés
/etc/init.d/munin-node restart

Bugfix: ha az adatok megjelennek, de a /var/log/munin/munin-node.log az alábbi hibasorokat tartalmazza:

Error output from ipmi_sensor_u_degrees_c:
  Sensor data record "System Level" not found!
  Sensor data record "Current 2" not found!

akkor a konfigurációs állományban az alábbi két sor felvételével a (tévesen értelmezett) áram- és teljesítménymérő szenzorok figyelését tiltsuk le:

-rw-rw-r-- root munin /etc/munin/ipmi

[...]
amps =
watts =

Alternatívaként, ha a munin-plugins (saját) csomag telepítve van, a szenzorok kiolvasását a régebbi ipmitool_sensor_ wildcard pluginnal is elvégezhetjük. Ehhez vegyük fel az alábbi symlinkeket illetve másoljuk át az ipmitool_sensor konfigurációs állományát:

ln -s /usr/local/share/munin/plugins/ipmitool_sensor_ /etc/munin/plugins/ipmitool_sensor_fan
ln -s /usr/local/share/munin/plugins/ipmitool_sensor_ /etc/munin/plugins/ipmitool_sensor_temp
ln -s /usr/local/share/munin/plugins/ipmitool_sensor_ /etc/munin/plugins/ipmitool_sensor_volt
cp -p /usr/local/share/munin/plugin-conf.d/ipmitool_sensor /etc/munin/plugin-conf.d
# Érvényesítés
/etc/init.d/munin-node restart

Az ipmitool_sensor_ hátránya, hogy minden méréskor minden szenzort kiolvas (a nem szükségeseket is), így futása meghaladhatja a maximális 120 másodperces timeout limitet. Használata csak akkor javasolt, ha a Squeeze-beli plugin valamiért nem működne (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
/etc/init.d/munin-node restart

SNMP pluginok

Ha a hardware monitorozására SNMP-t használunk, először be kell állítani az SNMP elérését a Munin számára. Készítsünk egy csak olvasható hozzáférést ("community") a telepítés alatt álló szerver hostnevére:

-rw-rw---- root hpsmh /etc/snmp/snmpd.conf

[...]
rocommunity PASSWORD FULLY.QUALIFIED.HOSTNAME

Teszteljük ezt a munin-node-configure hívásával:

munin-node-configure --snmp FULLY.QUALIFIED.HOSTNAME --snmpcommunity "PASSWORD"

Siker esetén a Munin kapcsolódni tud az snmpd démonhoz, és a --suggest --shell hívásnak megfelelő (symlink létrehozó) shell utasításokat kapunk vissza a kimeneten. Válasszuk ki a kívántakat, hozzuk létre a symlinkeket, és indítsuk újra a Munin node-ot:

/etc/init.d/munin-node restart

Ezután adjuk meg a community adatokat Munin node konfigurációjában:

-rw-r--r-- root root /etc/munin/plugin-conf.d/snmp

[...]
[snmp_FULLY.QUALIFIED.HOSTNAME*]
    env.community PASSWORD

NTP pluginok

Talán nem szükséges mind a négy, 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')
/etc/init.d/munin-node restart

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).

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 700 /var/lib/munin/.ssh
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!

Megjegyzés: a sikertelenség egyik oka lehet, ha a telepítés alatti szerveren a privát kulcsokat tartalmazó file explicit meg van határozva (és eltér az általunk használttól):

-rw-r--r-- root root /etc/ssh/sshd_config

[...]
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

Az AuthorizedKeysFile legyen kommentezve.

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 aggregátor illetve standalone 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. A belhálózaton (opcionálisan) elhelyezett központi aggregátoron kívül hasznos, ha (authentikáció után) megtekinthetőek a saját szerver Munin ábrái minden production (és DMZ?) webszerveren 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 aggregátort Debian csomagból telepítjük:

apt-get install munin # Hozza magával: 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 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 aggregátor 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 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
[FULLY.QUALIFIED.HOSTNAME]
    address 127.0.0.1
    use_node_name yes

(a localhostra 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 aggregátor periodikus (ötpercenkénti) futása engedélyezhető a /etc/cron.d/munin-beli comment eltávolításával.

Webfelület beállítása

A telepítő a Munin webfelületét /munin aliasként publikálja minden virtualhost alatt - ezt szüntessük meg:

rm /etc/apache2/conf.d/munin

é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

Ha a Munin felületét bárki megtekintheti (pl. ha a szerverhez hozzáférés - pl. tűzfallal - korlátozott), akkor a fenti link használatához csak a symlinkek követését kell engedélyezni a /etc/apache/sites-enabled/000-default állományban. Nyilvános webszervernél azonban célszerű a webfelület megtekintését authentikációhoz kötni - ilyenkor nem engedélyezzük a symlinkek követését, hanem https-re irányítjuk a látogatót, és a https konfigurációban pl. a webstatisztikával azonos authentikációt követelünk meg:

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

[...]
<VirtualHost *:80 >
    [...]
    # Virtualhost itself.
    <Directory /var/www/FULLY.QUALIFIED.HOSTNAME>
        [...]
        # Ha mindenki láthatja, ennyi elég;
        # authentikációhoz kötésnél viszont NEM kell:
        Options +FollowSymLinks
[...]
    # Csak ha authentikáció szükséges:
    <IfModule mod_rewrite.c>
        [...]
        # Logfiles.
        [...]
        # Munin graphs.
        RewriteRule ^/munin(.*)    https://%{HTTP_HOST}/munin$1 [L,R,QSA]
[...]
</Virtualhost>

# Csak akkor kell az SSL részhez nyúlni, ha authentikáció szükséges!

# Administration and special features via SSL.
<IfModule mod_ssl.c>
    <VirtualHost *:443 >
    [...]
        # DAV administration settings.
        <Directory /var/www/FULLY.QUALIFIED.HOSTNAME>
            [...]
            Options +FollowSymLinks
            [...]
        </Directory>
        [...]
        # Munin settings.
        <LocationMatch "^/(munin)">
            <IfModule mod_dav_fs.c>
                # Isn't supported yet...
                #DAV off
            </IfModule>
            AuthType Basic
            AuthName "Monitoring"
            AuthUserFile  /etc/apache2/auth.d/FULLY.QUALIFIED.HOSTNAME.user
            AuthGroupFile /etc/apache2/auth.d/FULLY.QUALIFIED.HOSTNAME.group
            <Limit GET HEAD OPTIONS>
                Require group stats
            </Limit>
            <LimitExcept GET HEAD OPTIONS>
                Deny from all
            </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:

invoke-rc.d apache2 reload

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, é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

Az aggregátorra (illetve 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ó plugin-okat is - ezek tájékoztatást adnak arról, hogy a monitorozás (elsősorban a grafokonok készítése) mennyire terheli az adott gépet. A plugin-ok a Debian terjesztésben benne vannak, csak symlinkelni kell (é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 # gépenkénti megosztásban, csak aggregátorra!

/etc/init.d/munin-node restart

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

SSH tunnel előkészítése

Ez csak a központi aggregátoron szükséges, a monitorozandó szerverek biztonságos elérésére.

TODO!

  • 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.

Irodalom