Child pages
  • Monitorozás
Skip to end of metadata
Go to start of metadata

Célszerű feltenni egy monitorozó eszközt, amely megmutatja, hogy a szerverünk milyen állapotban van, grafikont rajzol az erőforrások kihasználtságáról – azok aktuális és trendszerű értékeiről. Több csomag közül választhatunk, nekem a Munin a kedvencem, amely rrdtool segítségével rajzol grafikonokat, illetve be lehet állítani riasztási küszöböket, amelyről levelet küld.

Telepítés

A munin telepítése egyszerű, kettő csomagot kell telepítenünk (amelyek függőségképpen hozhatnak több tucatnyi csomagot magukkal):

# yum install munin.noarch munin-node.noarch

Konfiguráció

A feltelepített munin igényel némi módosítást a beállításait illetően, ezt a  fájlban tudjuk megejteni (a meglévő minták alapján a megfelelő helyre beszúrva):

/etc/munin/munin.conf
contact.system.command mail -s "Munin notification" system@javaforum.hu

[javaforum.hu]
    address 127.0.0.1
    use_node_name yes

Hasonlóan kell eljárnunk a munin-node.conf fájl esetén:

host_name javaforum.hu

Futtatás

A fentiek után nincs más feladatunk, mint ellenőrizni, hogy a szolgáltatások elindulnak-e:

# /sbin/chkconfig --list | grep munin
munin-node      0:off   1:off   2:off   3:off   4:off   5:off   6:off

Látszólag nem, ezért állítsuk be a megfelelő futási szintekre:

# /sbin/chkconfig munin-node on
# /sbin/chkconfig --list | grep munin
munin-node      0:off   1:off   2:on    3:on    4:on    5:on    6:off

Ettől a pillanattól kezdve a munin-node a rendszer indulásakor el fog indulni, ám jelen pillanatban célszerű kézzel elindítani a szolgáltatást:

# service munin-node status
munin-node is stopped
# service munin-node start
Starting Munin Node:                                       [  OK  ]
# service munin-node status
munin-node (pid 3362) is running...

Nincs más dolgunk, mint várni egy kicsit, amíg a cron által ötpercenként indított munin lekérdezi a rendszerünk jellemzőit.

Apache Httpd konfiguráció

A munin önállóan is nagyon jól elvan, a kényelmes használatához azonban célszerű egy vhost beállítása, például munin.javaforum.hu néven, mivel ekkor szabadabban tudjuk a szolgáltatást módosítani, konfigurálni és persze nem zavarja meg a többi bekonfigurált vhost-ot. Az alábbi konfiguráció előfeltétele az Apache Httpd fejezetben leírtak elvégzése:

/etc/httpd/conf.d/hu.javaforum.munin.conf
<VirtualHost *:80>
    ServerAdmin auth.gabor@javaforum.hu
    DocumentRoot /var/www/html/munin
    ServerName munin.javaforum.hu
    DirectoryIndex index.php index.html index.htm

    <Directory /var/www/html/munin>
        #AuthUserFile /etc/munin/munin-htpasswd
        #AuthName "Munin"
        #AuthType Basic
        #Require valid-user
        ExpiresActive On
        ExpiresDefault M310
    </Directory>

    ProxyVia Off
    ProxyPreserveHost On
</VirtualHost>

Ha nem szeretnénk idegenek számára elérhetővé tenni a grafikonokat, akkor kommentezzük ki az alábbi négy sort, illetve gondoskodjunk arról, hogy a munin-htpasswd tartalmazza a megfelelő felhasználóneveket és jelszavakat:

AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user

Saját plugin létrehozása

Idővel szükségünk lesz olyan méréseket végezni, amire nincs gyári plugin, ekkor létre kell hoznunk egy jól kitöltött perl programot, amely a munin lekérdezés során megfelelő tartalmat ad majd vissza (ennek a formátumát nem részletezném). Például a Java alkalmazások memória foglaltságára az alábbi plugin-t használom:

/etc/munin/own-plugins/jstat
#!/usr/bin/perl
my $javabinhome = $ENV{'javabinhome'} || '/usr/bin';
if ( $ARGV[0] and $ARGV[0] eq "autoconf" )
{
 print "yes\n";
 exit 0;
}
$0 =~ /jstat_(.+)*_(.+)$/; 
my $jpsName = $1;
my $processName = $2;
if ( $ARGV[0] and $ARGV[0] eq "config" )
{
 print "graph_title $processName memory usage in MBytes\n";
 print "graph_args --lower-limit 0\n";
 print "graph_vlabel in MBytes\n";
 print "graph_order perm old survivor0 survivor1\n";
 print "graph_info This graph shows memory usage of the $processName process.\n";
 print "survivor0.label Survivor0\n";
 print "survivor0.info Survivor0 generation\n";
 print "survivor0.draw STACK\n";
 print "survivor1.label Survivor1\n";
 print "survivor1.info Survivor1 generation\n";
 print "survivor1.draw STACK\n";
 print "old.label Old\n";
 print "old.info Old generation\n";
 print "old.draw STACK\n";
 print "old_capacity.label Old capacity\n";
 print "old_capacity.info Old generation capacity\n";
 print "old_capacity.draw LINE2\n";
 print "perm.label Permanent\n";
 print "perm.info Permanent generation\n";
 print "perm.draw AREA\n";
 print "perm_capacity.label Permanent capacity\n";
 print "perm_capacity.info Permanent generation capacity\n";
 print "perm_capacity.draw LINE2\n";
 
 print `whoami`;
 exit 0;
}
my $result = `LANG="en_US.UTF-8";$javabinhome/jps -v`;
@result = split(/\n/, $result); 
$gc = "0";
foreach $line(@result)
{
 if ( $line =~ /^(\d+)\s$jpsName.*$processName/ )
 {
  if ( $gc eq "0" )
  {
   $gc = `LANG="en_US.UTF-8";$javabinhome/jstat -gc $1`;
  }
 } 
}
@lines = split(/\n/, $gc);
@params = split(/\s+/,$lines[1]);
$survivor0 = $params[2]/1024.0;
$survivor1 = $params[3]/1024.0;
$old = $params[7]/1024.0;
$perm = $params[9]/1024.0;
$perm_capacity = $params[8]/1024.0;
$old_capacity = $params[6]/1024.0+$perm_capacity;
print "survivor0.value ".$survivor0."\n";
print "survivor1.value ".$survivor1."\n";
print "old.value ".$old."\n";
print "perm.value ".$perm."\n";
print "old_capacity.value ".$old_capacity."\n";
print "perm_capacity.value ".$perm_capacity."\n";

Létre kell hozni egy konfigurációs állományt, amely megoldja, hogy az adott Java process nevében fusson a fenti script:

/etc/munin/plugin-conf.d/jstat
[jstat_Bootstrap_confluence]
user confluence

Majd egyszerűen létrehozzuk a megfelelő nevű symlink-et, újraindítjuk a munin-t, s végül leteszteljük:

# cd /etc/munin/plugins/
# ln -s /etc/munin/own-plugins/jstat jstat_Bootstrap_confluence
# service munin-node restart
# telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
# munin node at javaforum.hu
fetch jstat_Bootstrap_confluence
survivor0.value 3.8513671875
survivor1.value 0
old.value 331.89404296875
perm.value 177.750390625
old_capacity.value 689.9375
perm_capacity.value 177.9375
.
quit
Connection closed by foreign host.

Az eredménynek a grafikonok között is meg kell jelennie a következő – öt percenkénti – lefutás után.

Mentés

Célszerű rendszeres időnként mentést készítenünk a munin adatbázisáról, ehhez két fontos könyvtárat kell a mentésbe vonnunk:

  • /etc/munin – konfiguráció
  • /var/lib/munin – adatok

Egyszerűen hozzunk létre a munin felhasználó nevében egy backup.sh nevű szkriptet:

# su - munin --shell=/bin/bash
$ mkdir bin
$ touch bin/backup.sh
$ chmod +x bin/backup.sh

Majd írjunk bele egy rövid programot:

#!/bin/bash

tar cjvf /home/backup/etc_munin.tar.bz2 /etc/munin/
tar cjvf /home/backup/var_lib_munin.tar.bz2 /var/lib/munin/

Majd próbáljuk ki, hogy fut-e és mennyi ideig fut:

$ time bin/backup.sh 
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names

real    0m4.719s
user    0m3.437s
sys     0m0.054s
$ ls -l /home/backup/*munin*
-rw-rw-r--. 1 munin munin  15081 Jun 23 12:57 /home/backup/etc_munin.tar.bz2
-rw-rw-r--. 1 munin munin 691845 Jun 23 12:57 /home/backup/var_lib_munin.tar.bz2

Hozzunk létre egy felhasználói cron bejegyzést a `crontab -e` parancs segítségével és időzítsük kedvünk szerint (ám kerüljük a túl kerek számokat):

MAILTO=root

3 13 * * * bin/backup.sh

Majd figyeljük a cron naplóját és a backup könyvtár tartalmát, hogy valóban lefut-e a mentés a megadott időben.

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels