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.
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 dpool/jails/data [root@freebsd:~]$ zfs create dpool/jails/data/logserver [root@freebsd:~]$ zfs clone dpool/jails/v8.1.0/template@base dpool/jails/v8.1.0/logserver [root@freebsd:~]$ zfs set compression=on dpool/jails/v8.1.0/logserver [root@freebsd:~]$ zfs set compression=on dpool/jails/data/logserver [root@freebsd:~]$ zfs set mountpoint=/dpool/jails/v8.1.0/logserver/data dpool/jails/data/logserver [root@freebsd:~]$ zfs set mountpoint=/dpool/jails/v8.1.0/logserver/usr/ports dpool/jails/v8.1.0/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ímet ellenőrizzük, s vegyük fel ha még nem létezik):
jail_list="logserver" jail_logserver_rootdir="/dpool/jails/v8.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.
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 /dpool/jails/v8.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 /dpool/jails/v8.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:/dpool/jails/v8.1.0/logserver/usr/local/etc]$ tail /dpool/jails/v8.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 vagy 127.0.0.1, de néhány program úgy csinál, mintha lenne .
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.
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 /dpool/jails/v8.1.0/logserver/ Filesystem Size Used Avail Capacity Mounted on dpool/jails/v8.1.0/logserver 3.7G 268M 3.4G 7% /dpool/jails/v8.1.0/logserver [root@freebsd:/home/backups/log]$ zfs set quota=64M dpool/jails/v8.1.0/logserver [root@freebsd:/home/backups/log]$ df -h /dpool/jails/v8.1.0/logserver/ Filesystem Size Used Avail Capacity Mounted on dpool/jails/v8.1.0/logserver 315M 268M 47M 85% /dpool/jails/v8.1.0/logserver