Erinevus lehekülje "Logi" redaktsioonide vahel
(→Vsftpd logimine) |
(→Splunk) |
||
(ei näidata sama kasutaja 36 vahepealset redaktsiooni) | |||
46. rida: | 46. rida: | ||
ehk siis messages, auth ja mail antud näites | ehk siis messages, auth ja mail antud näites | ||
+ | |||
+ | Terviklik FreeBSD syslog.conf, mis saadab lisaks ka apache access ja error logi, võiks välja näha selline: | ||
+ | |||
+ | *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages | ||
+ | security.* /var/log/security | ||
+ | auth.info;authpriv.info /var/log/auth.log | ||
+ | mail.info /var/log/maillog | ||
+ | ftp.info /var/log/xferlog | ||
+ | cron.* /var/log/cron | ||
+ | *.=debug /var/log/debug.log | ||
+ | *.emerg * | ||
+ | local5.* /var/log/httpd-access.log | ||
+ | local4.* /var/log/httpd-error.log | ||
+ | local5.* @193.40.0.35 | ||
+ | local4.* @193.40.0.35 | ||
+ | *.notice;kern.debug;lpr.info;mail.crit @193.40.0.35 | ||
+ | auth.info;authpriv.info @193.40.0.35 | ||
+ | mail.info @193.40.0.35 | ||
+ | *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err @193.40.0.35 | ||
syslog-ng kasutamisel oleks analoogne seadistus | syslog-ng kasutamisel oleks analoogne seadistus | ||
93. rida: | 112. rida: | ||
log { source(src); filter(f_local4); destination(loghost); }; | 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 | + | Serveris 192.168.1.10 kuhu logi saadetakse peame aga konfiguratsiooni selleks ,et info vastuvõetaks ja test faili lisataks kirjutama. Esiteks tuleb võtta info udp abil vastu |
+ | |||
+ | source net { | ||
+ | udp(); | ||
+ | }; | ||
+ | |||
+ | Teiseks filtreerime net allikalt meid huvitavaid teateid ja suuname neid erinevatesse sihtpunktidesse | ||
+ | |||
+ | log { source(net); filter(f_local4); destination(remote_mail); }; | ||
+ | |||
+ | Kolmandaks kirjutame väljafiltreeritud teated faili. | ||
destination test { | destination test { | ||
100. rida: | 129. rida: | ||
}; | }; | ||
− | ====Apache logimine==== | + | ====Apache logimine läbi syslogi==== |
Apache on üks laialdaselt levinud programmidest mille arendajad | Apache on üks laialdaselt levinud programmidest mille arendajad | ||
126. rida: | 155. rida: | ||
destination loghost { udp("192.168.1.10"); }; | destination loghost { udp("192.168.1.10"); }; | ||
− | + | ||
filter f_local5 { facility(local5); }; | filter f_local5 { facility(local5); }; | ||
filter f_local4 { facility(local4); }; | filter f_local4 { facility(local4); }; | ||
147. rida: | 176. rida: | ||
Syslog on suhteliselt primitiivne vahend | Syslog on suhteliselt primitiivne vahend | ||
nii ,et kui kuskil on defineeritud jaotis märgiga ! syslogi lõpus | 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. | + | siis tuleks oma read kirjutada ENNE seda muidu loetakse lisatud read blokki kuuluvaks. |
+ | |||
+ | ===Nginx näitel kuidas panna eriti jonnakas programm logima=== | ||
− | ====Vsftpd logi logiserverisse==== | + | Nginxi näol on tegemist tarkvaraga, mis on logimistega eriti jonnakas, keeldudes |
+ | täielikult isegi "toru" abil suundumast edasi. | ||
+ | |||
+ | Seega on meie ülesandeks tekitada kettale FIFO nn "torud", kuhu siis failide pähe nginx enda | ||
+ | logid suunab ja kust syslog-ng need üles korjab ning logiserveri poole edasi läkitab. | ||
+ | |||
+ | '''Konf''' | ||
+ | |||
+ | source nginx_access { pipe("/var/log/nginx/access_log" program_override("nginx4")); }; | ||
+ | source nginx_error { pipe("/var/log/nginx/error_log" program_override("nginx5")); }; | ||
+ | |||
+ | filter f_local4 { program(nginx4); }; | ||
+ | filter f_local5 { program(nginx5); }; | ||
+ | |||
+ | log { source(nginx_access); filter(f_local4); destination(loghost); }; | ||
+ | log { source(nginx_access); filter(f_local5); destination(loghost); }; | ||
+ | |||
+ | '''Skript''' | ||
+ | |||
+ | # cat /srv/makefifo.sh | ||
+ | if [ ! -p /var/log/nginx/access_log ]; then | ||
+ | /bin/rm -f /var/log/nginx/access_log | ||
+ | /usr/bin/mkfifo --mode=0640 /var/log/nginx/access_log | ||
+ | fi | ||
+ | |||
+ | if [ ! -p /var/log/nginx/error_log ] ; then | ||
+ | /bin/rm -f /var/log/nginx/error_log | ||
+ | /usr/bin/mkfifo --mode=0640 /var/log/nginx/error_log | ||
+ | fi | ||
+ | |||
+ | /bin/chown nginx:root /var/log/nginx/access_log | ||
+ | /bin/chown nginx:root /var/log/nginx/error_log | ||
+ | |||
+ | '''serveripool''' | ||
+ | |||
+ | log { source(net); filter(f_nginx5); destination(remote_nginx_error); }; | ||
+ | log { source(net); filter(f_nginx4); destination(remote_nginx_access); }; | ||
+ | |||
+ | filter f_nginx4 { program(nginx4); }; | ||
+ | filter f_nginx5 { program(nginx5); }; | ||
+ | |||
+ | destination remote_nginx_error { | ||
+ | file("/srv/log/serverid/$FULLHOST/http_error.log" | ||
+ | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
+ | }; | ||
+ | |||
+ | destination remote_nginx_access { | ||
+ | file("/srv/log/serverid/$FULLHOST/http_access.log" | ||
+ | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
+ | }; | ||
+ | |||
+ | Lisaks vaja täiendada nginxi ja syslog-ng'd järgnevalt. Probleemide vältimiseks | ||
+ | tuleks kindlaks teha, et FIFO torud oleksid kindlasti loodud enne nii syslogi kui nginxi käivitumist. Mõlemal juhul võib vastasel juhul tekkida probleeme. | ||
+ | |||
+ | /etc/init.d/nginx | ||
+ | |||
+ | depend() { | ||
+ | need net | ||
+ | need syslog-ng | ||
+ | use dns logger netmount | ||
+ | } | ||
+ | |||
+ | /etc/init.d/syslog-ng | ||
+ | |||
+ | start() { | ||
+ | checkconfig || return 1 | ||
+ | ebegin "Creating nginx FIFO Pipe" | ||
+ | /scripts/nginxfifo.sh | ||
+ | eend $? "Failed to create nginx FIFO Pipe" | ||
+ | ebegin "Starting syslog-ng" | ||
+ | ... | ||
+ | } | ||
+ | |||
+ | ====Vsftpd logi suunamine logiserverisse==== | ||
vsftpd.conf | vsftpd.conf | ||
199. rida: | 303. rida: | ||
konfifail ise | konfifail ise | ||
+ | <source lang=bash> | ||
+ | # võtame võrgust udp pealt teated vastu ja paneme allika nimeks net | ||
source net { | source net { | ||
udp(); | udp(); | ||
}; | }; | ||
+ | # filtreerime net allikalt meid huvitavaid teateid ja suuname neid erinevatesse sihtpunktidesse | ||
+ | log { source(net); filter(f_mail); destination(remote_mail); }; | ||
+ | log { source(net); filter(f_authpriv); destination(remote_auth); }; | ||
+ | log { source(net); filter(f_messages); destination(remote); }; | ||
+ | log { source(net); filter(f_ftp); destination(remote_ftp); }; | ||
+ | |||
+ | log { source(net); filter(f_local4); destination(remote_http_error); }; | ||
+ | log { source(net); filter(f_local5); destination(remote_http_access); }; | ||
+ | |||
+ | # selleks, et mitte logida failidesse syslog-ng enda teateid nt kuna mingi rida serverisse saabus jne | ||
+ | template t_msgonly { template("$MSGONLY\n"); template_escape(no);}; | ||
+ | |||
+ | # defineerime hulga sihtpunkte, milledele ennist filtreerisime teateid | ||
destination remote { | destination remote { | ||
− | file("/log/serverid/$FULLHOST/messages.log" | + | file("/log/serverid/$FULLHOST/messages.log" template(t_msgonly) |
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
}; | }; | ||
destination remote_auth { | destination remote_auth { | ||
− | file("/log/serverid/$FULLHOST/auth.log" | + | file("/log/serverid/$FULLHOST/auth.log" template(t_msgonly) |
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
}; | }; | ||
destination remote_mail { | destination remote_mail { | ||
− | file("/log/serverid/$FULLHOST/mail.log" | + | file("/log/serverid/$FULLHOST/mail.log" template(t_msgonly) |
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
}; | }; | ||
destination remote_http_error { | destination remote_http_error { | ||
− | file("/log/serverid/$FULLHOST/http_error.log" | + | file("/log/serverid/$FULLHOST/http_error.log" template(t_msgonly) |
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
}; | }; | ||
destination remote_http_access { | destination remote_http_access { | ||
− | file("/log/serverid/$FULLHOST/http_access.log" | + | file("/log/serverid/$FULLHOST/http_access.log" template(t_msgonly) |
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
}; | }; | ||
+ | </source> | ||
− | ===Logimine | + | ===Logimine MySQLi andmebaasi=== |
Parema ülevaatlikuse saavutamiseks on parem salvestada logisid näiteks mysql serverisse | Parema ülevaatlikuse saavutamiseks on parem salvestada logisid näiteks mysql serverisse | ||
ja kasutada mingit veebipõhist otsimisskripti näiteks php-sysloq'i mis annab | 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. | 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 | Syslog-ng ise mysql tuge ei sisalda. Kuid ta lubab startida väliseid käsklusi milledeabil | ||
239. rida: | 382. rida: | ||
log { | log { | ||
source(net); | source(net); | ||
− | destination(d_mysql); | + | destination('''d_mysql'''); |
}; | }; | ||
− | destination d_mysql { | + | destination '''d_mysql''' { |
− | program("/usr/local/bin/mysql - | + | program("/usr/local/bin/mysql -u'''kasutajalog''' -p'''parool''' '''logbaas'''" |
− | template("INSERT INTO | + | 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") | VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n") | ||
template-escape(yes)); | template-escape(yes)); | ||
}; | }; | ||
− | ===Php-syslog-ng=== | + | '''Kindla domeeni eraldi logimine e filtreerimine''' |
+ | |||
+ | ######################### | ||
+ | # Koolielu logi eraldi | ||
+ | ######################### | ||
+ | filter f_koolieluedu { match("koolielu.edu.ee"); }; | ||
+ | destination d_koolieluedu { | ||
+ | file("/srv/log/serverid/$FULLHOST/koolielu.log" template(t_pure_msg) | ||
+ | owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); | ||
+ | }; | ||
+ | log { source(net); filter(f_local5); filter(f_koolieluedu); destination(d_koolieluedu); }; | ||
+ | |||
+ | ===Php-syslog-ng kasutamine=== | ||
Projekti kodulehe võib leida google juurest http://code.google.com/p/php-syslog-ng/ | Projekti kodulehe võib leida google juurest http://code.google.com/p/php-syslog-ng/ | ||
265. rida: | 420. rida: | ||
===Roteerime logiserveris logisid=== | ===Roteerime logiserveris logisid=== | ||
− | Selleks sobib hästi logrotate ning | + | Selleks ülesandeks sobib hästi logrotate ning järgnev seadistus |
/srv/log/serverid/*/*log { | /srv/log/serverid/*/*log { | ||
281. rida: | 436. rida: | ||
} | } | ||
− | Mis pakib kokku kõik megabaidist suuremad logid, nimetab nad kuupäevaliselt, loob | + | 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. |
− | uued root kasutaja õigustesse kuuluvad failid ning kustutab varunduskataloogist | ||
− | üle neljakümmne päeva vanused | ||
Selle konfi alusel võib logrotate käivitada kord päevas. Skripti võib täiendada veel syslogi serveri restardiga. | 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) | |
− | + | * http://loganalyzer.adiscon.com/ | |
− | |||
− | + | ===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. | |
− | |||
− | |||
− | |||
− | |||
− | + | Kui 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=== | ===Lingid=== | ||
336. rida: | 480. rida: | ||
http://www.loganalysis.org/ | http://www.loganalysis.org/ | ||
+ | |||
+ | http://ristov.users.sourceforge.net/loghound/ | ||
+ | |||
+ | https://help.ubuntu.com/community/LinuxLogFiles |
Viimane redaktsioon: 25. november 2014, kell 21:00
Sisukord
- 1 sissejuhatus
- 2 logikliendi seadistus
- 3 Teenuste logimine läbi syslog'i
- 4 Nginx näitel kuidas panna eriti jonnakas programm logima
- 5 logiserveri seadistus
- 6 Logimine MySQLi andmebaasi
- 7 Php-syslog-ng kasutamine
- 8 Roteerime logiserveris logisid
- 9 Endine Php-Syslog-ng nüüdne Logzilla
- 10 PHP Log Analyzer
- 11 Splunk
- 12 Lingid
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
Terviklik FreeBSD syslog.conf, mis saadab lisaks ka apache access ja error logi, võiks välja näha selline:
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security auth.info;authpriv.info /var/log/auth.log mail.info /var/log/maillog ftp.info /var/log/xferlog cron.* /var/log/cron *.=debug /var/log/debug.log *.emerg * local5.* /var/log/httpd-access.log local4.* /var/log/httpd-error.log local5.* @193.40.0.35 local4.* @193.40.0.35 *.notice;kern.debug;lpr.info;mail.crit @193.40.0.35 auth.info;authpriv.info @193.40.0.35 mail.info @193.40.0.35 *.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err @193.40.0.35
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. Esiteks tuleb võtta info udp abil vastu
source net {
udp(); };
Teiseks filtreerime net allikalt meid huvitavaid teateid ja suuname neid erinevatesse sihtpunktidesse
log { source(net); filter(f_local4); destination(remote_mail); };
Kolmandaks kirjutame väljafiltreeritud teated faili.
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.
Nginx näitel kuidas panna eriti jonnakas programm logima
Nginxi näol on tegemist tarkvaraga, mis on logimistega eriti jonnakas, keeldudes täielikult isegi "toru" abil suundumast edasi.
Seega on meie ülesandeks tekitada kettale FIFO nn "torud", kuhu siis failide pähe nginx enda logid suunab ja kust syslog-ng need üles korjab ning logiserveri poole edasi läkitab.
Konf
source nginx_access { pipe("/var/log/nginx/access_log" program_override("nginx4")); }; source nginx_error { pipe("/var/log/nginx/error_log" program_override("nginx5")); }; filter f_local4 { program(nginx4); }; filter f_local5 { program(nginx5); }; log { source(nginx_access); filter(f_local4); destination(loghost); }; log { source(nginx_access); filter(f_local5); destination(loghost); };
Skript
# cat /srv/makefifo.sh if [ ! -p /var/log/nginx/access_log ]; then /bin/rm -f /var/log/nginx/access_log /usr/bin/mkfifo --mode=0640 /var/log/nginx/access_log fi if [ ! -p /var/log/nginx/error_log ] ; then /bin/rm -f /var/log/nginx/error_log /usr/bin/mkfifo --mode=0640 /var/log/nginx/error_log fi /bin/chown nginx:root /var/log/nginx/access_log /bin/chown nginx:root /var/log/nginx/error_log
serveripool
log { source(net); filter(f_nginx5); destination(remote_nginx_error); }; log { source(net); filter(f_nginx4); destination(remote_nginx_access); }; filter f_nginx4 { program(nginx4); }; filter f_nginx5 { program(nginx5); }; destination remote_nginx_error { file("/srv/log/serverid/$FULLHOST/http_error.log" owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); }; destination remote_nginx_access { file("/srv/log/serverid/$FULLHOST/http_access.log" owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); };
Lisaks vaja täiendada nginxi ja syslog-ng'd järgnevalt. Probleemide vältimiseks tuleks kindlaks teha, et FIFO torud oleksid kindlasti loodud enne nii syslogi kui nginxi käivitumist. Mõlemal juhul võib vastasel juhul tekkida probleeme.
/etc/init.d/nginx
depend() { need net need syslog-ng use dns logger netmount }
/etc/init.d/syslog-ng
start() { checkconfig || return 1 ebegin "Creating nginx FIFO Pipe" /scripts/nginxfifo.sh eend $? "Failed to create nginx FIFO Pipe" ebegin "Starting syslog-ng" ... }
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
# võtame võrgust udp pealt teated vastu ja paneme allika nimeks net
source net {
udp();
};
# filtreerime net allikalt meid huvitavaid teateid ja suuname neid erinevatesse sihtpunktidesse
log { source(net); filter(f_mail); destination(remote_mail); };
log { source(net); filter(f_authpriv); destination(remote_auth); };
log { source(net); filter(f_messages); destination(remote); };
log { source(net); filter(f_ftp); destination(remote_ftp); };
log { source(net); filter(f_local4); destination(remote_http_error); };
log { source(net); filter(f_local5); destination(remote_http_access); };
# selleks, et mitte logida failidesse syslog-ng enda teateid nt kuna mingi rida serverisse saabus jne
template t_msgonly { template("$MSGONLY\n"); template_escape(no);};
# defineerime hulga sihtpunkte, milledele ennist filtreerisime teateid
destination remote {
file("/log/serverid/$FULLHOST/messages.log" template(t_msgonly)
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};
destination remote_auth {
file("/log/serverid/$FULLHOST/auth.log" template(t_msgonly)
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};
destination remote_mail {
file("/log/serverid/$FULLHOST/mail.log" template(t_msgonly)
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};
destination remote_http_error {
file("/log/serverid/$FULLHOST/http_error.log" template(t_msgonly)
owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes));
};
destination remote_http_access {
file("/log/serverid/$FULLHOST/http_access.log" template(t_msgonly)
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)); };
Kindla domeeni eraldi logimine e filtreerimine
######################### # Koolielu logi eraldi ######################### filter f_koolieluedu { match("koolielu.edu.ee"); }; destination d_koolieluedu { file("/srv/log/serverid/$FULLHOST/koolielu.log" template(t_pure_msg) owner(root) group(wheel) perm(0600) dir_perm(0700) create_dirs(yes)); }; log { source(net); filter(f_local5); filter(f_koolieluedu); destination(d_koolieluedu); };
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.
Kui 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/