Не ругайте сильно, сделал так у себя мониторинг exim в zabbix
Коменты и поправки приветствуются.
1) Скрипт который парсит лог exim из крона (у меня 1 раз в час ), запоминает позицию
и грепает нужные мне данные выкладывая результат в файлики в /tmp
2) дописываем в zabbix /etc/zabbix/zabbix_agentd.conf
3) сам темплайт заббикса
приложил файлом
жду комменты
Коменты и поправки приветствуются.

1) Скрипт который парсит лог exim из крона (у меня 1 раз в час ), запоминает позицию
и грепает нужные мне данные выкладывая результат в файлики в /tmp
#!/bin/bash
position=`cat /tmp/position.txt` #читаем последнюю позицию
pos_file=/tmp/position.txt
main_log=/var/log/exim/main.log
tmp_log=/tmp/exim_log_pars.txt
tmp_log2=/tmp/exim_log_pars1.txt
tail -10000 $main_log > $tmp_log # берем последнии 10000 строк из лога, думаю что в лог за 1h больше строк не напишется,
# если у вас пишется больше, увеличте кол-во строк или в место tail -10000
# подставьте cat
if [ "$position" = "" ] # проверяем не пуста ли позиция
then
#echo Null position!!!
tail -1 $main_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
#echo `cat /tmp/position.txt` "Now!"
exit 1
else
cat $tmp_log |sed 1,/"$position"/d | sed /"$position"/d > $tmp_log2 # удаляем все
# строчки до, затем удаляем все строчки содержащие,
#тем самым оставляя только не читанные даныне с послежней позиции.
tail -1 $tmp_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
cat $tmp_log2 |grep -c -- "[-=]>" > /tmp/delivery.txt
cat $tmp_log2 |grep -c -- "<=" > /tmp/arrival.txt
cat $tmp_log2 |grep -c -- " \*\* " > /tmp/error.txt
cat $tmp_log2 |grep -c local_delivery > /tmp/local_delivery.txt
cat $tmp_log2 |grep -c Completed > /tmp/completed.txt
cat $tmp_log2 |grep -ic rejected > /tmp/rejected.txt
fi
exit 0
position=`cat /tmp/position.txt` #читаем последнюю позицию
pos_file=/tmp/position.txt
main_log=/var/log/exim/main.log
tmp_log=/tmp/exim_log_pars.txt
tmp_log2=/tmp/exim_log_pars1.txt
tail -10000 $main_log > $tmp_log # берем последнии 10000 строк из лога, думаю что в лог за 1h больше строк не напишется,
# если у вас пишется больше, увеличте кол-во строк или в место tail -10000
# подставьте cat
if [ "$position" = "" ] # проверяем не пуста ли позиция
then
#echo Null position!!!
tail -1 $main_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
#echo `cat /tmp/position.txt` "Now!"
exit 1
else
cat $tmp_log |sed 1,/"$position"/d | sed /"$position"/d > $tmp_log2 # удаляем все
# строчки до, затем удаляем все строчки содержащие,
#тем самым оставляя только не читанные даныне с послежней позиции.
tail -1 $tmp_log |cut -d' ' -f1,2 > $pos_file # записываем последнюю позицию
cat $tmp_log2 |grep -c -- "[-=]>" > /tmp/delivery.txt
cat $tmp_log2 |grep -c -- "<=" > /tmp/arrival.txt
cat $tmp_log2 |grep -c -- " \*\* " > /tmp/error.txt
cat $tmp_log2 |grep -c local_delivery > /tmp/local_delivery.txt
cat $tmp_log2 |grep -c Completed > /tmp/completed.txt
cat $tmp_log2 |grep -ic rejected > /tmp/rejected.txt
fi
exit 0
UserParameter=exim.delivery,cat /tmp/delivery.txt
UserParameter=exim.arrival,cat /tmp/arrival.txt
UserParameter=exim.error,cat /tmp/error.txt
UserParameter=exim.local_delivery,cat /tmp/local_delivery.txt
UserParameter=exim.completed,cat /tmp/completed.txt
UserParameter=exim.rejected,cat /tmp/rejected.txt
UserParameter=exim.arrival,cat /tmp/arrival.txt
UserParameter=exim.error,cat /tmp/error.txt
UserParameter=exim.local_delivery,cat /tmp/local_delivery.txt
UserParameter=exim.completed,cat /tmp/completed.txt
UserParameter=exim.rejected,cat /tmp/rejected.txt
3) сам темплайт заббикса
приложил файлом
жду комменты
Comment