5.2.4. Logszerver
A sok jail hátránya, hogy mindegyik egyenként termeli a logbejegyzéseket, így célszerű egy logszervert összedobni, amelynek feladata "mindössze" annyi, hogy aggregálja és osztályozza a beérkező bejegyzéseket.
5.2.4.1. A jail létrehozása
Hozzuk létre a naplók tárolásához szükséges fájlrendszert, majd klónozzuk a template fájlrendszert s csatoljuk fel a megfelelő helyre a ports adatbázist és a naplók fájlrendszerét:
[root@freebsd:~]$ zfs create bpool/jails/data [root@freebsd:~]$ zfs create bpool/jails/data/log [root@freebsd:~]$ zfs clone bpool/jails/v7.1.0/template@base bpool/jails/v7.1.0/logserver [root@freebsd:~]$ zfs set compression=gzip-9 bpool/jails/v7.1.0/logserver [root@freebsd:~]$ zfs set compression=gzip-9 bpool/jails/data/log [root@freebsd:~]$ zfs set mountpoint=/bpool/jails/v7.1.0/logserver/data bpool/jails/data/log [root@freebsd:~]$ zfs set mountpoint=/bpool/jails/v7.1.0/logserver/usr/ports bpool/jails/ports
Majd módosítsuk a /etc/rc.conf állományt, a meglévő httpd helyére vegyük fel a logserver bejegyzést, hogy ez induljon el (az IP cím elvileg már létezik, nem kell hozzáadni):
jail_list="logserver" jail_logserver_rootdir="/bpool/jails/v7.1.0/logserver" jail_logserver_hostname="logserver.jails.javaforum.hu" jail_logserver_ip="192.168.2.1"
Célszerű rendes host-nevet adni minden egyes jail-nek, mivel ez később jól jöhet, s ha a szolgáltatásokat név alapján kötjük össze, később – ha nagyobbak leszünk – kényelmesebb lehet áttenni egy-egy szolgáltatást másik gépre is.
5.2.4.2. A syslog-ng telepítése és beállítása
A létrehozott és elindított új jail még nincs megfelelően beállítva a feladatához, a feltelepített syslog-ng csomagot a kliens módból át kell konfigurálnunk szerver módra. Lépjünk be, és módosítsuk a syslog-ng.conf állományt:
options { long_hostnames(off); sync(0); create_dirs(yes); };
source src { unix-dgram("/var/run/log" max-connections(20));
unix-dgram("/var/run/logpriv" perm(0600) max-connections(20));
internal();
tcp( ip("logserver.jails.javaforum.hu") port(1999) max_connections(200)); };
destination messages { file("/data/$SOURCEIP-$YEAR-$MONTH/messages.$YEAR-$MONTH-$DAY"); };
destination security { file("/data/$SOURCEIP-$YEAR-$MONTH/security.$YEAR-$MONTH-$DAY"); };
destination authlog { file("/data/$SOURCEIP-$YEAR-$MONTH/auth.$YEAR-$MONTH-$DAY"); };
destination maillog { file("/data/$SOURCEIP-$YEAR-$MONTH/mail.$YEAR-$MONTH-$DAY"); };
destination cron { file("/data/$SOURCEIP-$YEAR-$MONTH/cron.$YEAR-$MONTH-$DAY"); };
destination debuglog { file("/data/$SOURCEIP-$YEAR-$MONTH/debug.$YEAR-$MONTH-$DAY"); };
filter f_auth { facility(auth); };
filter f_authpriv { facility(authpriv); };
filter f_not_authpriv { not facility(authpriv); };
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_ftp { facility(ftp); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_news { facility(news); };
filter f_security { facility(security); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
filter f_local0 { facility(local0); };
filter f_local1 { facility(local1); };
filter f_local2 { facility(local2); };
filter f_local3 { facility(local3); };
filter f_local4 { facility(local4); };
filter f_local5 { facility(local5); };
filter f_local6 { facility(local6); };
filter f_local7 { facility(local7); };
filter f_emerg { level(emerg); };
filter f_alert { level(alert..emerg); };
filter f_crit { level(crit..emerg); };
filter f_err { level(err..emerg); };
filter f_warning { level(warning..emerg); };
filter f_notice { level(notice..emerg); };
filter f_info { level(info..emerg); };
filter f_debug { level(debug..emerg); };
filter f_is_debug { level(debug); };
log { source(src); filter(f_notice); filter(f_not_authpriv); destination(messages); };
log { source(src); filter(f_kern); filter(f_debug); destination(messages); };
log { source(src); filter(f_lpr); filter(f_info); destination(messages); };
log { source(src); filter(f_mail); filter(f_crit); destination(messages); };
log { source(src); filter(f_news); filter(f_err); destination(messages); };
log { source(src); filter(f_security); destination(security); };
log { source(src); filter(f_auth); filter(f_info); destination(authlog); };
log { source(src); filter(f_authpriv); filter(f_info); destination(authlog); };
log { source(src); filter(f_mail); filter(f_info); destination(maillog); };
log { source(src); filter(f_cron); destination(cron); };
log { source(src); filter(f_is_debug); destination(debuglog); };
A lényeg annyi, hogy a syslog-ng a /data könyvtár alá fogja írni a bejegyzéseit, ahol létrehozza a forrásIP-év-hónap könyvtárakat, s szétválogatja a bele érkező naplókat a megadott paraméterek szerint, s bónuszként naponta új fájlt kezd. A fájl módosítása után lépjünk ki a jail-ből, és indítsuk újra:
[root@freebsd:~]$ /etc/rc.d/jail restart logserver Stopping jails: logserver.jails.javaforum.hu. Configuring jails:. Starting jails: logserver.jails.javaforum.hu. [root@freebsd:~]$ ls -l /bpool/jails/v7.1.0/logserver/data/ total 2 drwx------ 2 root wheel 6 Jan 17 16:33 127.0.0.1-2009-01 [root@freebsd:~]$ ls -l /bpool/jails/v7.1.0/logserver/data/127.0.0.1-2009-01/ total 4 -rw------- 1 root wheel 372 Jan 17 16:34 auth.2009-01-17 -rw------- 1 root wheel 92 Jan 17 16:33 cron.2009-01-17 -rw------- 1 root wheel 543 Jan 17 16:34 mail.2009-01-17 -rw------- 1 root wheel 1580 Jan 17 16:34 messages.2009-01-17 [root@freebsd:/bpool/jails/v7.1.0/logserver/usr/local/etc]$ tail /bpool/jails/v7.1.0/logserver/data/127.0.0.1-2009-01/messages.2009-01-17 Jan 17 16:32:00 logserver net_server[61477]: 2009/01/17-16:32:00 MyPackage (type Net::Server::Fork) starting! pid(61477) Jan 17 16:32:00 logserver net_server[61477]: Binding to TCP port 4949 on host * Jan 17 16:32:00 logserver net_server[61477]: Setting gid to "0 0" Jan 17 16:34:02 logserver net_server[61477]: 2009/01/17-16:34:02 Server closing! Jan 17 16:34:02 logserver syslog-ng[61437]: syslog-ng shutting down; version='2.0.9' Jan 17 16:34:04 logserver syslog-ng[61970]: syslog-ng starting up; version='2.0.9' Jan 17 16:34:05 logserver net_server[62010]: Process Backgrounded Jan 17 16:34:05 logserver net_server[62010]: 2009/01/17-16:34:05 MyPackage (type Net::Server::Fork) starting! pid(62010) Jan 17 16:34:05 logserver net_server[62010]: Binding to TCP port 4949 on host * Jan 17 16:34:05 logserver net_server[62010]: Setting gid to "0 0"
Láthatjuk, hogy a naplófájlok létrejöttek a megfelelő helyen, hiszen a syslog-ng szerint önmaga IP címe a 127.0.0.1 (a valóságban egy jail-ben nincs localhost vag 127.0.0.1, de néhány program okoskodik).
5.2.4.3. A syslog-ng mint logszerver
A syslog-ng lényege, hogy atombiztosan tud logszerverként működni, és logokat aggregálni, s a távoli naplóbejegyzések fogadásához egyszerűen csak egy sor felel a konfogurációs állományában::
tcp( ip("logserver.jails.javaforum.hu") port(1999) max_connections(200));
E szerint a logserver.jails.javaforum.hu domén név alapján meghatározott IP cím 1999/tcp portján várja a távoli kliensek által küldött üzeneteket. A max_connection annyit határoz meg, hogy egy időben maximum 200 kliens kapcsolódhat a logszerverhez. Emlékezzünk, hogy a template jail úgy készült el, hogy a klónozott jail a logserver.jails.javaforum.hu felé küldi a logokat, tehát új jail létrehozásakor semmi dolgunk nem lesz, a logszerver fogadja majd az új jail által küldött naplóbejegyzéseket.
5.2.4.4. Utolsó simítások
Mivel a logszerver saját logjai egy külön fájlrendszerbe kerülnek, illetve a távoli kliensek által küldött bejegyzések is ebbe a külön fájlrendszerbe kerülnek, ezért érdemes megnézni, hogy mennyi helyet foglal el a logserver fájlrendszere, ugyanis erre be tudunk állítani egy kvótát. A munin éberen figyeli a jail által elfoglalt helyet és 90% felett küld majd egy értesítést (warning), illetve 95% felett egy újabbat (error). Mivel semmi sem indokolja, hogy a logserver fájlrendszer növekedjen, ezért a fájlrendszerben a szabad hely fogyása meghibásodást jelez.
A kvóta méretét úgy kell meghatároznunk, hogy a df a ZFS fájlrendszer látszólagos méretét ismeri, ahhoz képest kell egy olyan kvótát beállítani, hogy 90% alá essen az elfoglalt hely:
[root@freebsd:/home/backups/log]$ df -h /bpool/jails/v7.1.0/logserver/ Filesystem Size Used Avail Capacity Mounted on bpool/jails/v7.1.0/logserver 3.7G 268M 3.4G 7% /bpool/jails/v7.1.0/logserver [root@freebsd:/home/backups/log]$ zfs set quota=64M bpool/jails/v7.1.0/logserver [root@freebsd:/home/backups/log]$ df -h /bpool/jails/v7.1.0/logserver/ Filesystem Size Used Avail Capacity Mounted on bpool/jails/v7.1.0/logserver 315M 268M 47M 85% /bpool/jails/v7.1.0/logserver
Előző fejezet Tartalomjegyzék Következő fejezet
Auth Gábor auth.gabor@javaforum.hu
