LINUX.ORG.RU
решено ФорумAdmin

Парсинг логов с нотификаицей по почте


0

1

Нужно выкусывать строки с ошибками по паттерну из системного лога и высылать сообщение на email. Вариант с grep + mail не подходит, потому что нужно хотя бы сохранять последнюю позицию в логе с прошлого просмотра. Проверять лог нужно раз в несколько минут. Ротация происходит раз в сутки.

Подскажите название тулзы с необходимым функционалом.

★★★

ossim, хотя это как гвозди микроскопом

lazyklimm ★★★★★
()

>Вариант с grep + mail не подходит, потому что нужно хотя бы

сохранять последнюю позицию в логе с прошлого просмотра.


У меня все мониторящие скрипты учитывают последние строки с прошлого просмотра на основе вот этого блока (сорри за многословность скрипта - нет времени убрать ненужное для вас)

scriptn=mynet_abuse

echo «=============================»
date
echo «=============================»

[ -s /var/lock/scripts/$scriptn.lock ] && {
echo Ooooooooops, /var/lock/scripts/$scriptn.lock is present.
exit
}

Hour=`date +%H%M`
echo $Hour
[ «$Hour» -eq «0402» ] && sleep 20

echo 1 > /var/lock/scripts/$scriptn.lock
PTH=/var/log
PTHS=/var/log/scrip

[ -f $PTHS/tmp_$scriptn-tail ] && rm -v $PTHS/tmp_$scriptn*
[ -f $PTHS/$scriptn.rep ] && rm -v $PTHS/$scriptn.rep

# Если файл, содержащий номер последней обработанной строки, существует, заполняем из него wcl_old
if [ -s «$PTHS/$scriptn.wcl» ] ; then
wcl_old=`cat $PTHS/$scriptn.wcl`
else
wcl_old=0
fi
echo wcl old is $wcl_old

# Определяем номер последней на данный момент строки исследуемого файла и записываем его для послед. использования
wcl_new=`wc -l $filename|awk '{print $1}'`
echo $wcl_new >$PTHS/$scriptn.wcl
echo wcl new is $wcl_new

# Вот столько последних строк исслед. файла будет обработано
let wcl=$wcl_new-$wcl_old
echo $wcl

if [ «$wcl» -le «0» ] ; then echo «$PTHS/$scriptn.sh: wcl is anavailable: $wcl=$wcl_new-$wcl_old»
date; rm -v /var/lock/scripts/$scriptn.lock; echo Exit.; exit ; fi

# Формируем временный рабочий файл для исследования
if [ «$wcl_old» = «0» ] ; then cp -v $filename $PTHS/tmp_$scriptn-tail
else tail -$wcl $filename >$PTHS/tmp_$scriptn-tail; fi

# Собственно поиск в полученном фрагменте файла
string0=«ruleset=»
string=«1\.2\.3\.4»
egrep «$string0» $PTHS/tmp_$scriptn-tail|egrep «$string» >$PTHS/tmp_$scriptn-work
и т.д.

Если исследуемый файл ротируется ежедневно,
/etc/crontab
02 4 * * * root run-parts /etc/cron.daily

то в /etc/cron.daily/wcl.sh
PTHS=«/var/log/scrip»
# Clearing strings counter for scripts
rm $PTHS/mynet_abuse.wcl

Sciurus
()
Ответ на: комментарий от Yur4eg

Спасибо! Действительно в rsyslog уже есть все что нужно.

BigAlex ★★★
() автор топика
Ответ на: комментарий от Sciurus

Плюс один. Действую так же. Зачем сохранять место последнего просмотра, если в логе есть дата?

dumal ★★
()

man bash

man grep

man sed

man awk

man mail

Led ★★★☆☆
()

Кому интересно - правильный ответ был logcheck.

BigAlex ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.