rsyslog + shell script
День добрый. Подмагните советом где я делаю не так.
cat /etc/rsyslog.conf | grep -v "#"
...
$template FROMHOSTIP,"%fromhost-ip%"
$template FILENAME,"/var/log/rsyslog/%fromhost-ip%/syslog.log"
$template S324,"S324 syslog %TIMESTAMP:::date-rfc3339% %rawmsg%\n"
$template ZABBIXSERVER,"Zabbix server syslog %TIMESTAMP:::date-rfc3339% %rawmsg%\n"
$template CISTEST,"CISTEST syslog %TIMESTAMP:::date-rfc3339% %rawmsg%\n"
if $fromhost-ip contains '10.85.6.174' then ?FILENAME;S324
& ^/etc/rsyslog/syslog.sh;FROMHOSTIP
if $fromhost-ip contains '127.0.0.1' then ?FILENAME;ZABBIXSERVER
& ^/etc/rsyslog/syslog.sh;FROMHOSTIP
if $fromhost-ip contains '10.85.1.13' then ?FILENAME;CISTEST
& ^/etc/rsyslog/syslog.sh;FROMHOSTIP
поясню. есть 2 обших шаблона FROMHOSTIP - служит для того чтобы средствами rsyslog получать айпи адрес источника сообщения и в дальнейшем передавать этот шаблон как параметр для скрипта к которому будет обращаться rsyslog (^/etc/rsyslog/syslog.sh;FROMHOSTIP) FILENAME - в этот шаблону уходит путь с учётом ip адреса источника сообщения. этим шаблоном мы раскладываем по нужным дирректориям наши логи.
CISTEST,S324,ZABBIXSERVER - это парсящие шаблоны добавляющие некий текст в тело syslog сообщения.
Т.О. когда мы получаем сообщение от одного из известных нам айпишников мы кладём в соответсвующую его айпишнику дирректорию отпарсеный нужным нам образом файл syslog.log и далее обращаемся к скрипту /etc/rsyslog/syslog.sh передав ему в качестве параметра айпишник с которого пришло сообщение.
cat /etc/rsyslog/syslog.sh
#!/bin/bash
FROMHOSTIP=$1
if ! [ -f /var/log/rsyslog/$FROMHOSTIP/syslog.old.log ]
then
echo "123" > /var/log/rsyslog/$FROMHOSTIP/syslog.old.log
diff -a /var/log/rsyslog/$FROMHOSTIP/syslog.log /var/log/rsyslog/$FROMHOSTIP/syslog.old.log | cut -d " " -f2-100 | zabbix_sender -z $FROMHOSTIP -p 10051 -i -
cp /var/log/rsyslog/$FROMHOSTIP/syslog.log /var/log/rsyslog/$FROMHOSTIP/syslog.old.log
fi
diff -a /var/log/rsyslog/$FROMHOSTIP/syslog.log /var/log/rsyslog/$FROMHOSTIP/syslog.old.log | cut -d " " -f2-100 | zabbix_sender -z $FROMHOSTIP -p 10051 -i -
cp /var/log/rsyslog/$FROMHOSTIP/syslog.log /var/log/rsyslog/$FROMHOSTIP/syslog.old.log
суть данного скрипта изначально была в сравнении двух лог файлов, отсылке средствами zabbixsender'a разницы между этими файлами нам на сервер и копированнии новоизменённого лог файла в старый лог файл чтобы в дальнейшем при сравнении вновь поступивших логов мы могли отсылать только разницу между старым и новопришедшим логом. и скрипт прекрасно отрабатывал пока я не попытался добавить в него проверку на существование старого лог файла (syslog.old.log) который при первом приходе логов разумеется отсуствует. if ! [ -f /var/log/rsyslog/$FROMHOSTIP/syslog.old.log ] - «если такого файла не существует» то echo «123» > /var/log/rsyslog/$FROMHOSTIP/syslog.old.log - мы создаём этот файл с любой аброй внутри и дальше уже отрабатываем разницу, отсылаем её на сервер и замещаем старый лог файл новым.
Но увы что-то отрабатывает не так. В резульатте отправки сообщения в syslog получаем в дирректории только старый лог файл с текстом 123. syslog.log вообще не создаётся.