Child pages
  • Logserver
Skip to end of metadata
Go to start of metadata

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:

Parancssor
[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):

/etc/rc.conf
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:

/usr/local/etc/syslog-ng.conf
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:

Parancssor
[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 (smile).

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

/usr/local/etc/syslog-ng.conf
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:

Parancssor
[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
      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels