Hi!
Lészen wheezy-n egy samba, a megosztások hozzáférései full_audit-al logolva imigyen:
full_audit:prefix = %S|%u|%I|%m
full_audit:success = chdir mkdir open opendir pread pwrite read rename rmdir write link unlink
full_audit:failure = chdir mkdir open opendir pread pwrite read rename rmdir write link unlink
full_audit:facility = LOCAL7
full_audit:priority = NOTICE
rsyslog.conf-ban pedig eme sorok találhatóak:
# Samba
if $syslogfacility-text == 'local7' and $programname == 'smbd' then /var/log/samba/audit/log.audit
& ~
Szépen képződnek a következőhöz hasonló sorok:
Feb 18 00:05:14 as-samba smbd[12547]: informatika|szistvan|192.168.1.155|x2|chdir|ok|chdir|/data/samba/informatika
Feb 18 00:05:14 as-samba smbd[12547]: informatika|szistvan|192.168.1.155|x2|opendir|ok|./
Feb 18 00:25:40 as-samba smbd[12547]: informatika|szistvan|192.168.1.155|x2|chdir|ok|chdir|/
Feb 18 00:25:50 as-samba smbd[12679]: informatika|szistvan|192.168.1.155|x2|chdir|ok|chdir|/data/samba/informatika
Feb 18 00:25:51 as-samba smbd[12679]: informatika|szistvan|192.168.1.155|x2|opendir|ok|./
Feb 18 00:26:50 as-samba smbd[12679]: informatika|szistvan|192.168.1.155|x2|chdir|ok|chdir|/
Feb 18 00:45:44 as-samba smbd[12547]: kepek|szistvan|192.168.1.155|x2|chdir|ok|chdir|/data/samba/kepek
Feb 18 00:45:44 as-samba smbd[12547]: kepek|szistvan|192.168.1.155|x2|opendir|ok|./
Így most egyetlen logfileba (/var/log/samba/audit/log.audit) gyűri az összes sort, szeretném megosztásonként különszedni pl. kepek.log.audit, informatika.log.audit.
Tehát a kérdés: az rsyslog-al tudom -e külön filek-ba küldeni a log sorait attól függően, hogy az adott sor tartalmaz -e egy adott karaktersorozatot?
Tudna esetleg valaki ebben segíteni, merre nézelődjek?
Előre is köszönöm a segítséget!!
- 3810 megtekintés
Hozzászólások
Nem használok rsyslogot, de a kérdésre bekíváncsultam, és ezt találtam: http://www.rsyslog.com/doc/rsyslog_conf_filter.html
- A hozzászóláshoz be kell jelentkezni
Köszönöm!
Nem "szép", de működik:
if $syslogfacility-text == 'local7' and $programname == 'smbd' and $msg contains 'informatika' then /var/log/samba/audit/informatika.audit.log
if $syslogfacility-text == 'local7' and $programname == 'smbd' and $msg contains 'kepek' then /var/log/samba/audit/kepek.audit.log
if $syslogfacility-text == 'local7' and $programname == 'smbd' then ~
Valahogy a case típusú vizsgálatot nem találtam.
- A hozzászóláshoz be kell jelentkezni
case nincs kimondottan, RuleSet-tel lehetne setleg játszani;
de ha úgyis fel kell venni a share neveket, amikor változás történik, akkor én megelégednék ezzel a redundás if-ezéssel.
$msg contains helyett viszont $msg startswith -et javaslok!
- A hozzászóláshoz be kell jelentkezni
Jó ötlet, este megnézem.
Köszönöm!
Viszont elgondolkodtam, hogy meg lehetne -e azt csinálni, hogy a logsor elején a megosztás neve szerepel és ezt kiszedni a log sorból, majd ezt felhasználni a logfile nevénél.
Pl.:
Feb 18 00:45:44 as-samba smbd[12547]: kepek|szistvan|192.168.1.155|x2|opendir|ok|./
Megoldható lenne, hogy a sor így kezdődjön: |kepek| ebből kivágni a két | jel közül a szöveget és ezt a szöveget felhasználni a logfile szeparálásához.
Esetleg valaki tudna egy regexp-el segíteni, hogy a || között lévő szöveget hogyan tudnám "kiszedni"?
Előre is köszönök minden további segytséget!
- A hozzászóláshoz be kell jelentkezni
Esetleg egy időzítetten futó shellscript, ami az eredeti logfájlt tetszés szerint szétszedi és akár sqlbe importálja ? :) (Nekem mindenről ez jut eszembe...)
\o\ |o| /o/
- A hozzászóláshoz be kell jelentkezni
rsyslognak elég macerás a regexp kiszedõje.
nxlog syslog daemonnal már könnyebb lenne.
ha feltétel az rsyslog, azzal is megoldható,
én meg kihívásnak vettem :)
- A hozzászóláshoz be kell jelentkezni
$template SambaShare,"/var/log/samba/audit/%msg:R,ERE,0,DFLT:[^|]+--end%.log"
if $syslogfacility-text == 'local7' and $programname == 'smbd' ?SambaShare
és az audit prefix a share nevével kezdõdjön: "%S|%U|..."
[^|]+
ez az elsõ pipe jelig fogja illeszteni
hmm, ezt lehet hogy magamnál is implementálom...
- A hozzászóláshoz be kell jelentkezni
Remek!!! Köszönöm!!
A második sor végefelé kimaradt a "then" szócska:
if $syslogfacility-text == 'local7' and $programname == 'smbd' then ?SambaShare
Egy "aprócska" javításra lenne még szükségem, ugyanis a logfile neve szóközzel kezdődik pl.: " Kepek.log". Ezt a bevezető szóközt hogyan lehetne leszedni?
A doksit megtaláltam, de nem egy egyszerű olvasmány nekem ;-)
Előre is köszönöm!
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Meglepetten tapasztalom, hogy a syslog-ba a következő sor(ok) jelennek meg:
Feb 19 11:15:25 as-samba smbd_audit[8718]: Kepek|mbeata|192.168.1.18|iroda8|open|ok|r|Magosne/ALAPTABLA.jpg
Feb 19 11:15:25 as-samba smbd_audit[8718]: Kepek|mbeata|192.168.1.18|iroda8|pread|ok|Magosne/ALAPTABLA.jpg
Ezek szerint erre nem illeszkedik a "$programname == 'smbd'". :-(
Most akkor a "$programname == 'smbd_audit'"-ot kellene írni?
- A hozzászóláshoz be kell jelentkezni