Назад | Перейти на главную страницу

rsyslog вложенные правила для отслеживания

В настоящее время у меня есть правило rsyslog для разделения всех журналов из любопытный в файл для каждого пользователя

~$ cat /etc/rsyslog.d/10-snoopy.conf
$template DYNsnoopy,"/var/log/snoopy/uid.%msg:R,ERE,1,BLANK:uid:([0-9]*)--end%.log"
:programname, isequal, "snoopy" ?DYNsnoopy
& ~

пример вывода:

~$ tail /var/log/snoopy/uid.1000.log
Feb 13 10:17:38 box snoopy[32108]: [uid:1000 sid:2781 tty: cwd:/home/user filename:/usr/bin/cut]: cut -d   -f 1-3 /proc/loadavg 
Feb 13 10:17:57 box snoopy[32158]: [uid:1000 sid:27176 tty:/dev/pts/2 cwd:/home/user filename:/usr/bin/colortail]: colortail /var/log/snoopy/uid.1000.log 

Я хочу изменить правило, чтобы, если команда была запущена на терминале, она перешла в отдельный файл - таким образом я могу хранить полную историю команд, которые я выполнил, и чередовать команды, выполняемые cron и т. Д.

Однако я не уверен в синтаксисе вложенных операторов if и в том, можно ли это вообще сделать.

if $programname == 'snoopy' then
  $template DYNsnoopy,"/var/log/snoopy/uid.%msg:R,ERE,1,BLANK:uid:([0-9]*)--end%.log"

  # if msg contains tty:/dev/pts/2 write to tty.log, else write to uid.xxx.log
  if $msg ereregex "tty:([A-z0-9/]*) cwd" then /var/log/snoopy/tty.log
  *.* ?DYNsnoopy
  & ~

Не на 100% счастлив, но это будет регистрировать только сообщения, захваченные на tty, в каталог snoopy log

$template DYNsnoopy,"/var/log/snoopy/uid.%msg:R,ERE,1,BLANK:uid:([0-9]*)--end%.log"
if $programname == 'snoopy' and not ($msg contains 'tty: cwd') then -?DYNsnoopy                                                                                                                    
& ~