Logi

Allikas: Kuutõrvaja
Redaktsioon seisuga 1. märts 2011, kell 14:33 kasutajalt Jj (arutelu | kaastöö) (Roteerime logiserveris logisid)

sissejuhatus

Logimist korraldab serveris tavaliselt tarkvara nimega syslog, levinud on ka täiustatud logimootor nimega syslog-ng. Antud tekstis tegeleme keskse logimisega logiserverisse, mille ip'ks on näiteks 192.168.1.10. Reeglina soovitatakse seadistada arvutid logima võrgus töötavasse logiserverisse, nt turvalisuse ja logitöötluse kaalutlustel

   _____   logiserver 192.168.1.10
  |     |  :514/tcp
  |_____|  :514/udp
     |
     |
    -|---------|----------|----....---|--
               |          |           |
             __|__      __|__       __|__
            |     |    |     |     |     |
            |_____|    |_____|     |_____|
        
              smtp       www         dns

kus

  • logisever (syslog-ng) kuulab ühedusi oma 514/tcp ja 514/udp soketitel
  • smtp, www ja dns arvutid logivad oma andmed logiserverisse, kasutades nii tavalist syslogi kui syslog-ng abi

Vajalik võib logiserveri pidamine olla näiteks juhtudel kui peale serveri häkkimist või selle failisüsteemi täielikku purunemist saaks jälgida mis on toimunud. Tsentraalse statistika genereerimiseks, info kombineerimiseks jne

logikliendi seadistus

syslog.conf'is näiteks kui on rida

auth,authpriv.*                 /var/log/auth.log

siis võib tekitada kõrvale

auth,authpriv.*                 @192.168.1.10

ja rohkem polegi vaja lihtsaks logimiseks peale seda saadetakse juba auth ja authpriv teated kõik masinale 192.168.1.10

tavalise syslog'i puhul näiteks freebsd's võime /etc/syslog.conf'i kirjutada

*.notice;kern.debug;lpr.info;mail.crit          @192.168.1.10
auth.info;authpriv.info                         @192.168.1.10
mail.info                                       @192.168.1.10

ehk siis messages, auth ja mail antud näites

syslog-ng kasutamisel oleks analoogne seadistus

destination loghost { udp("192.168.1.10"); };
log { source(src); filter(f_mail); destination(loghost); };
log { source(src); filter(f_authpriv); destination(loghost); };
log { source(src); filter(f_messages); destination(loghost); };

Teenuste logimine läbi syslog'i

Osa tarkvara ei kasuta logimiseks sysloq'i, vaid eelistavad ise tegeleda logi kirjutamiega - näiteks apache. Nende tarkvaradega tuleb rohkem vaeva näha.

Selleks juhuks on syslog-ng's hulga vabu local'eid

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); };

Näide logimisest skriptis

Soovime näiteks teha või meil on juba serveris skript mille teateid soovime saada läbi syslog'i kuhugi faili ning samas kirjutada ka logiserverisse. Logifail, kuhu soovime et kirjutataks infot, on /var/log/katse

Kirjutame syslog.conf'i read

destination katse { file("/var/log/katse"); };
log { source(src); filter(f_local4); destination(katse); };

ning nüüd anname käsu testiks shell'is

/usr/bin/logger -p local4.info "this is a test message"

faili /var/log/katse peaks tekkima rida

Jun 11 19:46:50 hostname kasutaja: this is a test message

Nüüd kui soovime, et teated läheksid ka logi serverisse, on vaja syslog.conf'i lisada vaid read

destination loghost { udp("192.168.1.10"); };
log { source(src); filter(f_local4); destination(loghost); };

Serveris 192.168.1.10 kuhu logi saadetakse peame aga konfiguratsiooni selleks ,et info vastuvõetaks ja test faili lisataks kirjutama

destination test {
   file("/log/serverid/$FULLHOST/test.log"
  owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

Apache logimine läbi syslogi

Apache on üks laialdaselt levinud programmidest mille arendajad on aga mingil põhjusel syslogi justkui lausa äraunustanud. Viimati ErrorLog'i sai suunata syslog peale kuid CustomLog'i mitte nii ,et tuli seda eraldi seadistada. Parandage seda teksti kui asi praeguseks muutunud.

Programmi apache logimise läbi syslog'i saame selliselt

Avame httpd.conf'i

asendame rea

ErrorLog /var/log/httpd/error.log

reaga

ErrorLog syslog:local4

ja access log'i jaoks rida

CustomLog "|/usr/bin/logger -p local5.info" combined

syslog.conf muudatused tulevad

destination loghost { udp("192.168.1.10"); };

filter f_local5 { facility(local5); };
filter f_local4 { facility(local4); };

destination http_error { file("/var/log/httpd/error.log"); };
destination http_access { file("/var/log/httpd/access.log"); };

log { source(src); filter(f_local4); destination(loghost); };
log { source(src); filter(f_local4); destination(http_error); };
log { source(src); filter(f_local5); destination(loghost); };
log { source(src); filter(f_local5); destination(http_access); };

FreeBSD's võib tavalist syslogi ja syslog.conf'i kasutades teha ka sellise seadistuse

local5.*                                             /var/log/httpd-access.log
local4.*                                                /var/log/httpd-error.log
local5.*                                             @192.168.0.10
local4.*                                             @192.1680.10

Syslog on suhteliselt primitiivne vahend nii ,et kui kuskil on defineeritud jaotis märgiga ! syslogi lõpus siis tuleks oma read kirjutada ENNE seda muidu loetakse lisatud read blokki kuuluvaks.õ

Vsftpd logi suunamine logiserverisse

vsftpd.conf

xferlog_enable=YES
syslog_enable=YES

facilityna kasutab vsftpd nimetus ftp

syslog-ng.conf täiendused

destination ftp { file("/var/log/ftp.log"); };

filter f_messages { level(debug .. emerg)
        and not facility(auth, authpriv, mail, ftp, local4, local5); };

log { source(src); filter(f_ftp); destination(ftp); destination(loghost); flags(final); };

ja syslogi serveris asuvasse syslong-ng.confi tuleb lisada täiendus

log { source(net); filter(f_ftp); destination(remote_ftp); };

filter f_messages { level(info .. emerg)
        and not facility(auth, authpriv, mail, ftp, local4, local5); }; 

destination remote_ftp {
   file("/log/serverid/$FULLHOST/ftp.log"
   owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

logiserveri seadistus

Serveripoolel soovitaks kasutada rohkemate võimaluste poolest kui võimalik syslog-ng tarkvara. Antud näide on ainult syslog-ng'l toimiv

vaikimisi üritab syslog kirjutada logifailid ühte defineeritud faili kokku. Esimese tööna tuleb defineerida failid kuhu mis tüüpi logi kirjutatakse. Kasutame muutujat $FULLHOST radadepuhul. See annab meile võimaluse ,et logiserveris tekivad kaustad ja failid tekitatakse automaatselt sellise struktuuriga

/log/serverid/mail.server.ee/messages
/log/serverid/mail.server.ee/mail.log
/log/serverid/mail.server.ee/auth.log
/log/serverid/www.server.ee/messages
/log/serverid/www.server.ee/mail.log
/log/serverid/www.server.ee/auth.log
/log/serverid/www.server.ee/http_error.log
/log/serverid/www.server.ee/http_access.log

konfifail ise

source net {
        udp();
};

destination remote {
   file("/log/serverid/$FULLHOST/messages.log"
  owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};
 
destination remote_auth {
   file("/log/serverid/$FULLHOST/auth.log"
   owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

destination remote_mail {
   file("/log/serverid/$FULLHOST/mail.log"
   owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

destination remote_http_error {
   file("/log/serverid/$FULLHOST/http_error.log"
   owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

destination remote_http_access {
   file("/log/serverid/$FULLHOST/http_access.log"
   owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};

Logimine MySQLi andmebaasi

Parema ülevaatlikuse saavutamiseks on parem salvestada logisid näiteks mysql serverisse ja kasutada mingit veebipõhist otsimisskripti näiteks php-sysloq'i mis annab suurema eelise kuna võimaldab otsida mitmetest serveritest teateid korraga ja otsinguid kombineerida.

Näidistabeli struktuur

CREATE TABLE IF NOT EXISTS `logs` (
  `host` varchar(128) DEFAULT NULL,
  `facility` varchar(10) DEFAULT NULL,
  `priority` varchar(10) DEFAULT NULL,
  `level` varchar(10) DEFAULT NULL,
  `tag` varchar(10) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `program` varchar(15) DEFAULT NULL,
  `msg` text,
  `seq` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `counter` int(11) NOT NULL DEFAULT '1',
  `fo` datetime DEFAULT NULL,
  `lo` datetime DEFAULT NULL,
  PRIMARY KEY (`seq`),
  KEY `datetime` (`datetime`),
  KEY `priority` (`priority`),
  KEY `facility` (`facility`),
  KEY `program` (`program`),
  KEY `host` (`host`)
) ENGINE=InnoDB  DEFAULT CHARSET=binary;

Syslog-ng ise mysql tuge ei sisalda. Kuid ta lubab startida väliseid käsklusi milledeabil saab ka mysql'i võrgust tulevat logivoogu suunata.

log {
source(net);
destination(d_mysql);
};

destination d_mysql {
program("/usr/local/bin/mysql -ukasutajalog -pparool logbaas"
template("INSERT INTO logstabel (host, facility, priority, level, tag, datetime, program, msg)
VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n")
template-escape(yes));
};

Php-syslog-ng kasutamine

Projekti kodulehe võib leida google juurest http://code.google.com/p/php-syslog-ng/

Installime php koos toega asjadele gd, mysql, xml, zlib ning cli versiooniga. ning php, seadistame vhosti ja aliased.

Hangime ja pakime lahti php-syslog-ng, stardime veebikaudu installi. Soovitatav oleks kasutada firefoxi

Pisut detailsem installi howto http://nms.gdd.net/index.php/Installation_Guide

mysql vajab kindlasti seadistust kuna muidu hakkab liigsest liiklusest tulenevalt blokeerima

Roteerime logiserveris logisid

Selleks ülesandeks sobib hästi logrotate ning järgnev seadistus

/srv/log/serverid/*/*log {
    compress
    dateext
    maxage 365
    rotate 99
    size=+1024k
     notifempty
     missingok
     create 644 root wheel
     postrotate
     find /srv/log/serverid/ -mtime +40 -ls -exec rm {} \;
     endscript
}

Mis pakib kokku kõik megabaidist suuremad logid mis asuvad /srv/log/serverid/ kõigis alamkaustades, nimetab nad kuupäevaliselt, loob uued root kasutaja õigustesse kuuluvad failid ning kustutab varunduskataloogist üle neljakümmne päeva vanused failid.

Selle konfi alusel võib logrotate käivitada kord päevas. Skripti võib täiendada veel syslogi serveri restardiga.

/usr/local/sbin/logrotate /usr/local/etc/logrotate.conf

Endine Php-Syslog-ng nüüdne Logzilla

Tasuta versioon lubab kasutada vaid alla miljoni reaga andmebaase, suuremate serverite puhul jääb sellest väheks.

PHP Log Analyzer

FreeBSD portsumajanduses olemas. Lubab defineerida erinevaid algallikaid (fail, andmebaasid jms)

Splunk

Kiire otsing ja ilus kasutajaliides ning lihtne paigaldada, olemas pordid enimlevinud operatsioonisüsteemidele (sh ka FreeBSDle). Ei vaja eraldi syslogi serverit ning andmebaasi vaid kuulab pordil ja võtab klientide infot ise vastu. Peamiseks probleemiks on kõrge hind ning tasuta versiooni poolt limiteeritud maht 500Mb päevas mis ei pruugi sobida suurema liiklusega serveri jaoks.

Lui vaadata Splunki õppevideosid, siis on näha, et ta võtab vajadusel logi ka kettalt kenasti (näites anti ette kaust /var/log ja splunk indekseeris kogu selle sisu hoobilt ära). Samuti on võimalik ise skriptida sisendeid nt kuskilt andmebaasidest vmt.

Splunki tore omadus tundub olevat ka see, et see pole lihtsalt monitooring tagantjärele, vaid ka lives häirete andmise süsteem. Iga tehtud otsingu (mis nt mingi sissetungi tuvastab) saab salvestada ja panna perioodiliselt käima, tulemused RSS või e-postiga edastada või mingile skriptile ette sööta. Mingit pidi saab ka SNMP kaudu Nagiosile sisse sööta.

Splunki litsents on selline, et jooksva 30päevase akna jooksul võib esineda kuni 5 litsentsi rikkumist. Kui üle selle läheb, siis keeratakse otsing kinni kuniks langeb alla piiri. Logi indekseerimist ei keerata kunagi kinni.

Lingid

http://www.onlamp.com/pub/a/bsd/2001/05/17/Big_Scary_Daemons.html?page=1

http://www.onlamp.com/pub/a/bsd/2001/06/14/Big_Scary_Daemons.html

http://www.campin.net/newlogcheck.html

http://linuxhelp.blogspot.com/2005/09/system-logging-explained-in-linux.html

http://www.campin.net/syslog-ng/faq.html

http://sial.org/howto/logging/syslog-ng/

http://www.loganalysis.org/

http://ristov.users.sourceforge.net/loghound/

https://help.ubuntu.com/community/LinuxLogFiles