У меня есть сервер rsyslog под управлением v7.4.3, получающий поток в формате:
<PRI>Date hostname app: name=VALUE message
Что мне нужно сделать, так это вытащить ЗНАЧЕНИЕ из сообщения и зарегистрировать его в файле, например /var/log/VALUE/syslog.log.
Я могу получить «name = VALUE» из сообщения с помощью регулярного выражения, но понятия не имею, как вырезать «name =» или перевести его в путь. Любые идеи?
Итак, вот как. Обратите внимание, что вам нужно использовать rsyslog 7.4.5 или выше, поскольку в предыдущих версиях есть неприятная ошибка, которая вызывает сбой rsyslog при использовании re_extract.
set $!namevalstr = re_extract($msg, "name=([a-zA-Z0-9])+", 0, 0, "name=unknown");
set $!valstr = field($!namevalstr, "=", 2);
$template PerHostSyslog,"/var/log/%$!valstr%/syslog.log
*.* -?PerHostSyslog
И это, похоже, работает.