Столкнулся с потребностью парсера maillog файла. Порыскав решил написать сам на перле. Но тут меня постигла трудность. А именно, при изучении глазами лога я не нашел ни одной записи по исходящей почты от моих пользователей. То есть записи об отправке писем от моего домена отсутствуют. Видимо нужно что то дописать в master.cf, например -v напротив smtpd. Но я не уверен, может кто поможет подсказать поточнее или кинуть ссылочкой. Все исходящие, передаются на релей провайдера.Заранее спасибо!
>Столкнулся с потребностью парсера maillog файла. Порыскав решил написать сам на перле.
>Но тут меня постигла трудность. А именно, при изучении глазами лога
>я не нашел ни одной записи по исходящей почты от моих
>пользователей. То есть записи об отправке писем от моего домена отсутствуют.
>Видимо нужно что то дописать в master.cf, например -v напротив smtpd.
>Но я не уверен, может кто поможет подсказать поточнее или кинуть
>ссылочкой. Все исходящие, передаются на релей провайдера.
>
>Заранее спасибо!
Все уже написано. http://www.postfix.org/addon.html Например, pflogsumm. Дописывать ничего не надо. Все и так должно в логи сыпаться.
Я тоже так думаю что все должно сыпаться, но ведь не сыпется. Таких строчек как from=user@mydomain.ru не нахожу. Pflogsumm я смотрел - разочарование полное. То что он рисует годно лишь для админа но никак не для шефа. Нужна тиблица типа | пользователь | адресат | время отправки | размер письма | - все больше ничего не надо.
Спасибо за ответ!
>Я тоже так думаю что все должно сыпаться, но ведь не сыпется.
>Таких строчек как from=user@mydomain.ru не нахожу. Pflogsumm я смотрел - разочарование
>полное. То что он рисует годно лишь для админа но никак
>не для шефа. Нужна тиблица типа | пользователь | адресат |
>время отправки | размер письма | - все больше ничего не
>надо.
>
>
>Спасибо за ответ!
Ну так вроде pflogsumm все это и выдает. Юзер объем, время и т.д. Там еще разные утилиты есть. В любом случае - это не статистика... Так не считают. Отправит юзер одно письмо размером в 1 мегабайт на 10 адресов и все. Юзер отправил 1 мегабайт на сервер, а сервер отправил 10 мегов. А теперь представим, что с некоторыми серверами в мухосранске плохой коннект и передача письма происходитв течение нескольких часов с постоянными таймаутами... Там и 50 и 100 набежит... Что в этом случае покажет скрипт статистики ... мне неизвестно.... да и возможно ли тут как-либо посчитать... думаю, что нет... Только на 25 порту считать без разделения по пользователям.
>Я тоже так думаю что все должно сыпаться, но ведь не сыпется.
>Таких строчек как from=user@mydomain.ru не нахожу.
Извини за наивный вопрос - а у тебя юзверги отправляют почту через твой сервер или сразу через релейный напрямую, мимо твоего постфикса?
Отправляют конечно через мой smtp, а он в свою очередь уже на релей провайдера. Я уже нашел где взять from и to. У меня проверка идет через amavis, в его логе все видно.
#!/usr/local/bin/bashemails=" ДядяВася@МойДомен "
logfile="/var/log/postfix.log"# Создаём цикл для почтовыйх ящиков в списке emails
for myemail in ${emails}
do
# Непринятая почта
cat $logfile | grep "$myemail" | grep "NOQUEUE" | awk '{ for (i=NF;i>0;--i) {{a=$i} if ( a~"from=" ) {print $1,$2,$3,a}}}' > ./tmp/noqueue.$myemail# Кто присылал почту
cat /dev/null > ./tmp/who-is-send.$myemail
id=$(cat $logfile | grep "$myemail" | grep "postfix/virtual" | awk '{print $6}' | cut -d\: -f1)for myid in ${id}
do
cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g >> ./tmp/who-is-send.$myemail
done# Кому посылали почту
cat /dev/null > ./tmp/$myemail.send-to
id=$(cat $logfile | grep "$myemail" | grep "postfix/qmgr" | awk '{print $6}' | cut -d\: -f1)
for myid in ${id}
do
kol=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g | wc -l | awk '{print $1}')
if [ $kol != 0 ]
then
firstlog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7}' | sed s/","/""/g)
traflog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $8}' | sed s/","/""/g | sed s/"size="/""/g)
secondlog=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $7}' | sed s/","/""/g)
echo "$firstlog $secondlog $traflog" >> ./tmp/$myemail.send-to
fi
done
traf=$(cat ./tmp/who-is-send.$myemail | awk '{s+=$5} END {print s}')
echo "$myemail (Входящий траффик) -- $traf Байт"
doneВ директории куда положишь скрипт, нужно создать папку tmp
Большое спасибо за скрипт. Но если чесно на перле он будет менее громоздким.
#!/usr/local/bin/bashemails=" ДядяВася@МойДомен "
logfile="/var/log/postfix.log"# Создаём цикл для почтовыйх ящиков в списке emails
for myemail in ${emails}
do
# Непринятая почта
cat $logfile | grep "$myemail" | grep "NOQUEUE" | awk '{ for (i=NF;i>0;--i) {{a=$i} if ( a~"from=" ) {print $1,$2,$3,a}}}' > ./tmp/noqueue.$myemail# Кто присылал почту
cat /dev/null > ./tmp/who-is-send.$myemail
id=$(cat $logfile | grep "$myemail" | grep "postfix/virtual" | awk '{print $6}' | cut -d\: -f1)for myid in ${id}
do
cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g >> ./tmp/who-is-send.$myemail
done# Кому посылали почту
cat /dev/null > ./tmp/$myemail.send-to
id=$(cat $logfile | grep "$myemail" | grep "postfix/qmgr" | awk '{print $6}' | cut -d\: -f1)
for myid in ${id}
do
kol=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g | wc -l | awk '{print $1}')
if [ $kol != 0 ]
then
firstlog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7}' | sed s/","/""/g)
traflog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $8}' | sed s/","/""/g | sed s/"size="/""/g)
secondlog=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $7}' | sed s/","/""/g)
echo "$firstlog $secondlog $traflog" >> ./tmp/$myemail.send-to
fi
done
traf=$(cat ./tmp/who-is-send.$myemail | awk '{s+=$5} END {print s}')
echo "$myemail (Входящий траффик) -- $traf Байт"
doneСоздай папку tmp, там куда положишь скрипт.
#!/usr/local/bin/bashemails=" ДядяВася@ТвойДомен "
logfile="/var/log/postfix.log"# Создаём цикл для почтовыйх ящиков в списке emails
for myemail in ${emails}
do
# Непринятая почта
cat $logfile | grep "$myemail" | grep "NOQUEUE" | awk '{ for (i=NF;i>0;--i) {{a=$i} if ( a~"from=" ) {print $1,$2,$3,a}}}' > ./tmp/noqueue.$myemail# Кто присылал почту
cat /dev/null > ./tmp/who-is-send.$myemail
id=$(cat $logfile | grep "$myemail" | grep "postfix/virtual" | awk '{print $6}' | cut -d\: -f1)for myid in ${id}
do
cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g >> ./tmp/who-is-send.$myemail
done# Кому посылали почту
cat /dev/null > ./tmp/$myemail.send-to
id=$(cat $logfile | grep "$myemail" | grep "postfix/qmgr" | awk '{print $6}' | cut -d\: -f1)
for myid in ${id}
do
kol=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $1,$2,$3,$7,$8}' | sed s/","/""/g | sed s/"size="/""/g | wc -l | awk '{print $1}')
if [ $kol != 0 ]
then
firstlog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $1,$2,$3,$7}' | sed s/","/""/g)
traflog=$(cat $logfile | grep "$myid" | grep "from" | awk '{print $8}' | sed s/","/""/g | sed s/"size="/""/g)
secondlog=$(cat $logfile | grep "$myid" | grep "relay" | grep -v "127.0.0.1" | awk '{print $7}' | sed s/","/""/g)
echo "$firstlog $secondlog $traflog" >> ./tmp/$myemail.send-to
fi
done
traf=$(cat ./tmp/who-is-send.$myemail | awk '{s+=$5} END {print s}')
echo "$myemail (Входящий траффик) -- $traf Байт"
doneПапку tmp создай.