URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 13377
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Подсчет exim трафика с разделением на локальный и мировой"

Отправлено auto_tips , 24-Янв-06 15:54 
В файле конфигурации exim пишем:

   log_file_path = /var/log/exim/exim-%s-%D.log
   log_selector = +delivery_size +sender_on_delivery +received_recipients

В файл /var/db/ukr_net ложим список украинских сетей

И собствено скрипт для подсчета трафика с разделением на украинский и мировой:

#!/usr/bin/perl -w

my ($nmin, $nmax) = (32,0);

open UKRNETS, "/var/db/ukr_net";
while (<UKRNETS>) {
  s/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/([0-9]+)$//;
  $UkrIPs{substr(substr(unpack("B32", pack("N", $1)),24).substr(unpack("B32", pack("N", $2)),24).substr(unpack("B32", pack("N", $3)),24).substr(unpack("B32", pack("N", $4)),24),0,$5)}="$1.$2.$3.$4\/$5";
  $nmin = $5 if $5 < $nmin;
  $nmax = $5 if $5 > $nmax;
}
close UKRNETS;

open TRAFF, '/var/log/exim/exim-main-20060122.log';
while (<TRAFF>) {
  my ($mail_from,$mail_to,$ip,$bytes_in,$bytes_out);
  if      (/^[0-9-]+ [0-9:]+ [A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2} <= ([^\@]+@[A-Za-z0-9-.]+).* H=.*\[([0-9.]+)\].* S=([0-9]+).* for ([^\@]+@[A-Za-z0-9-.]+)$/) {
    $mail_1=$1;
    $mail_2=$4;
    $ip=$2;
    $bytes_in=$3;
    $bytes_out=0;
  } elsif (/^[0-9-]+ [0-9:]+ [A-Za-z0-9]{6}-[A-Za-z0-9]{6}-[A-Za-z0-9]{2} [\=\-\*]\> ([^\@]+@[A-Za-z0-9-.]+).* F=\<([^\@]+@[A-Za-z0-9-.]+)\>.* T=remote_smtp S=([0-9]+).* H=.*\[([0-9.]+)\].*/) {
    $mail_1=$2;
    $mail_2=$1;
    $ip=$4;
    $bytes_in=0;
    $bytes_out=$3;
  }
  if ((defined($ip)) and ($ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)) {
    my $ipB=substr(unpack("B32", pack("N", $1)),24)."".substr(unpack("B32", pack("N", $2)),24)."".substr(unpack("B32", pack("N", $3)),24)."".substr(unpack("B32", pack("N", $4)),24);
    for ($Ne=$nmax; $Ne>=$nmin; $Ne--) {
      my $ipBin=substr($ipB,0,$Ne);
      if ($UkrIPs{$ipBin}) {
        $m_from{$mail_1}{ukr}{in} +=$bytes_in;
        $m_from{$mail_2}{ukr}{in} +=$bytes_in;
        $m_from{$mail_1}{ukr}{out}+=$bytes_out;

        $m_from{$mail_1}{mir}{in} -=$bytes_in;
        $m_from{$mail_2}{mir}{in} -=$bytes_in;
        $m_from{$mail_1}{mir}{out}-=$bytes_out;
        last;
      }
    }
    $m_from{$mail_1}{mir}{in} +=$bytes_in;
    $m_from{$mail_2}{mir}{in} +=$bytes_in;
    $m_from{$mail_1}{mir}{out}+=$bytes_out;
  }
}
close TRAFF;

my $i=0;
foreach $mails (keys %m_from) {
  $i++;
  print "$i $mails
  in  ukr $m_from{$mails}{ukr}{in}
  out ukr $m_from{$mails}{ukr}{out}
  in  mir $m_from{$mails}{mir}{in}
  out mir $m_from{$mails}{mir}{out}
";
}

URL:
Обсуждается: http://www.opennet.me/tips/info/971.shtml


Содержание

Сообщения в этом обсуждении
"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Незнайка , 24-Янв-06 15:54 
А что-нить подобное для postfix есть?

"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Антонио , 05-Фев-06 16:52 
Нет, exim рулит

"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Eagla , 08-Фев-06 13:41 
а какая разница у постфикса тоже файл лога есть
только не лучше ли по нормальному трафик считать
приходящий с локальных ип и не с локальных
например ipacctd или ipcad кому что
мона киской еще

"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Horol , 08-Фев-06 14:55 
а считать  отдельно UA-IX UkrTel-IX локальный по сетке и остальной мировой по каждому почтовому ящику можно?

сомневаюсь


"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено vvvua , 13-Фев-06 11:05 
легче написать патч и писать это в базу

"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено vgray , 13-Фев-06 12:20 
>легче написать патч и писать это в базу


а чем встроенный perl не подходит?


"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено vgray , 12-Фев-06 18:51 
вот только лог файл будет раздуваться лишними данными, те становится чуть менее читаемым

мне больше по душе идея сделать unseen роутер,у которого в транспорте будет вызываться перловый скрипт который куда надо уложит размера письма


"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Paladin , 03-Мрт-06 19:40 
А можно пример конфигурации такого роутера?

"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено vgray , 05-Мрт-06 07:48 
>А можно пример конфигурации такого роутера?


logs:
  driver = pipe
    command = "/usr/local/etc/exim/size.pl ${return_path} ${local_part}
    ${domain} ${tod_log}  ${message_size}"
    current_directory = /usr/local/etc/exim/
    user = mailnull
    group = mail
    no_return_output
    no_return_path_add

log_router:
    driver = accept
    unseen = true
    transport = logs
    retry_use_local_part


"Подсчет exim трафика с разделением на локальный и мировой"
Отправлено Серж , 05-Дек-06 12:58 
Еще существует проект ExiBomb Mail Statistics & Logging.

http://sourceforge.net/projects/exibomb/

ExiBomb is a system designd to monitor mail traffic on the Exim based MTA server. The interface is developed in PHP. It reads the maillogs in a tail method and stores all relevant data in a MYSQL Database.The script reading the logs was developed in PERL.