Низкая скорость работы traffic2sql

Модуль для подсчета трафика в локальной сети
JohnHaret
Сообщения: 2
Зарегистрирован: Чт май 10, 2012 3:49 am

Низкая скорость работы traffic2sql

Сообщение JohnHaret » Чт май 10, 2012 6:04 am

Добрый день. Досталась в наследство от предшественника связка FreeBSD 8.2 + mysql + ipcat + abills.
С недавнего времени система начала истошно вопить, что серверу недостаточно swap, и ,что "Proccess running PID".
Так как ранее не работал с системой Abills, то в поисках истины пришел на сей форум.
По умолчанию в кроне стоит запуск traffic2sql раз в 5 минут, но если вручную его отправить это делать, то реальное время обработки составило без малого 2 часа.
Буду признателен за Ваши советы, и наводящие вопросы.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Чт май 10, 2012 7:04 am

JohnHaret писал(а):Добрый день. Досталась в наследство от предшественника связка FreeBSD 8.2 + mysql + ipcat + abills.
С недавнего времени система начала истошно вопить, что серверу недостаточно swap, и ,что "Proccess running PID".
Так как ранее не работал с системой Abills, то в поисках истины пришел на сей форум.
По умолчанию в кроне стоит запуск traffic2sql раз в 5 минут, но если вручную его отправить это делать, то реальное время обработки составило без малого 2 часа.
Буду признателен за Ваши советы, и наводящие вопросы.
для начало опишите ресурсы системы

и покажите каталог

ls -l /usr/abilsl/var/log/ipn

JohnHaret
Сообщения: 2
Зарегистрирован: Чт май 10, 2012 3:49 am

Re: Низкая скорость работы traffic2sql

Сообщение JohnHaret » Чт май 10, 2012 7:25 am

Код: Выделить всё

gw#ls -l /usr/local/abills/var/log/ipn/
total 1254
-rw-r--r--  1 root  wheel  199802 May 10 13:55 ft-v05.2012-05-10.135000+0700
-rw-r--r--  1 root  wheel  198948 May 10 14:00 ft-v05.2012-05-10.135501+0700
-rw-r--r--  1 root  wheel  217920 May 10 14:05 ft-v05.2012-05-10.140000+0700
-rw-r--r--  1 root  wheel  209890 May 10 14:10 ft-v05.2012-05-10.140500+0700
-rw-r--r--  1 root  wheel  188273 May 10 14:15 ft-v05.2012-05-10.141001+0700
-rw-r--r--  1 root  wheel  156015 May 10 14:20 ft-v05.2012-05-10.141500+0700
-rw-r--r--  1 root  wheel      88 May 10 14:20 tmp-v05.2012-05-10.142000+0700
-rw-r--r--  1 root  wheel       5 May 10 14:19 traffic2sql.pid

gw#sysctl hw.model
hw.model: Intel(R) Pentium(R) 4 CPU 2.40GHz
gw#sysctl hw.physmem
hw.physmem: 1058766848
gw# sysctl vm.swap_total
vm.swap_total: 2621440000
P.S.
Нашел в таблице dv_calls огромное количесвто задвоения одного и того же объекта(более 8тысяч). после удаления объекта, время работы сократилось до 1 минуты. Так что тему можно закрыть. спасибо за ваши мысленные посылы.

Tesla
Сообщения: 13
Зарегистрирован: Чт апр 12, 2012 12:56 pm

Re: Низкая скорость работы traffic2sql

Сообщение Tesla » Пн сен 17, 2012 11:41 am

У нас тормозит также.
Сейчас такая картина:

ABillS 0.60/20120813

#IPN module flow
$conf{IPN_DETAIL}=0;.
$conf{IPN_USERMENU}=1;.
$conf{IPN_DEPOSIT_OPERATION}=1;
$conf{IPN_STATIC_IP}=0;
$conf{IPN_DETAIL_CLEAN_PERIOD}=180;

Cron

*/5 * * * * root /usr/abills/libexec/traffic2sql 2
flowdir=/flows/ FLOWTOOLS_IP_AGGREGATION=1 FLOW_CAT=/usr/bin/flow-cat FLOW_PRINT=/usr/bin/flow-print LOG_FILE=/usr/abills/var/log/ipn/ipn_log.log

Виртульная машина поднята на Citrix Xen Server 6.0

2 cpu – 47% общей загрузки по top при работе traff2sql
1024 мб ОЗУ – загрузка 300мб при работе traff2sql
Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz

1800 клиентов

Flow-capture.conf

-w /flows 0/0/9997 -V 5 -n 287 -N 0 -z 9

Отрабатывает за 20-30 минут где-то. Специально торможу netflow и подсовываю только 1 файлик.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Пн сен 17, 2012 5:57 pm

Tesla писал(а):У нас тормозит также.
Сейчас такая картина:

ABillS 0.60/20120813

#IPN module flow
$conf{IPN_DETAIL}=0;.
$conf{IPN_USERMENU}=1;.
$conf{IPN_DEPOSIT_OPERATION}=1;
$conf{IPN_STATIC_IP}=0;
$conf{IPN_DETAIL_CLEAN_PERIOD}=180;

Cron

*/5 * * * * root /usr/abills/libexec/traffic2sql 2
flowdir=/flows/ FLOWTOOLS_IP_AGGREGATION=1 FLOW_CAT=/usr/bin/flow-cat FLOW_PRINT=/usr/bin/flow-print LOG_FILE=/usr/abills/var/log/ipn/ipn_log.log

Виртульная машина поднята на Citrix Xen Server 6.0

2 cpu – 47% общей загрузки по top при работе traff2sql
1024 мб ОЗУ – загрузка 300мб при работе traff2sql
Intel(R) Core(TM)2 Quad CPU Q9400 @ 2.66GHz

1800 клиентов

Flow-capture.conf

-w /flows 0/0/9997 -V 5 -n 287 -N 0 -z 9

Отрабатывает за 20-30 минут где-то. Специально торможу netflow и подсовываю только 1 файлик.

есть ли разделение на классы трафика, сколько записей в файле ?

Tesla
Сообщения: 13
Зарегистрирован: Чт апр 12, 2012 12:56 pm

Re: Низкая скорость работы traffic2sql

Сообщение Tesla » Вт сен 18, 2012 4:55 am

~AsmodeuS~ писал(а): есть ли разделение на классы трафика, сколько записей в файле ?
/ Система/ Internet/ Тарифные планы/ Классы трафика/
Global 0.0.0.0/0

5 минутный файлик netflow весом 30 мб - 2023192 строк если обработать flow-cat + flow-print.

Причем вручную flow-cat + flow-print обрабатывает его за 5 сек.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Вт сен 18, 2012 9:18 am

Tesla писал(а):
~AsmodeuS~ писал(а): есть ли разделение на классы трафика, сколько записей в файле ?
/ Система/ Internet/ Тарифные планы/ Классы трафика/
Global 0.0.0.0/0

5 минутный файлик netflow весом 30 мб - 2023192 строк если обработать flow-cat + flow-print.

Причем вручную flow-cat + flow-print обрабатывает его за 5 сек.
правильно flow-cat + flow-print просто віводят данные, а traffic2sql сравнивает каждую запись с данными в билинге, но все равно довольно медленно работает что то у Вас

у Вас случайно предоплаченого трафика нету ?

Tesla
Сообщения: 13
Зарегистрирован: Чт апр 12, 2012 12:56 pm

Re: Низкая скорость работы traffic2sql

Сообщение Tesla » Вт сен 18, 2012 9:51 am

~AsmodeuS~ писал(а):
Tesla писал(а):
~AsmodeuS~ писал(а): есть ли разделение на классы трафика, сколько записей в файле ?
/ Система/ Internet/ Тарифные планы/ Классы трафика/
Global 0.0.0.0/0

5 минутный файлик netflow весом 30 мб - 2023192 строк если обработать flow-cat + flow-print.

Причем вручную flow-cat + flow-print обрабатывает его за 5 сек.
правильно flow-cat + flow-print просто віводят данные, а traffic2sql сравнивает каждую запись с данными в билинге, но все равно довольно медленно работает что то у Вас

у Вас случайно предоплаченого трафика нету ?

Есть всякие тарифы. И просто безлимитные и к примеру 500 мб по 1.60.
А есть еще и более сложные тарифы, но пока экспериментируем на простых.
Юрики безлимитчики и юрики с предоплаченным трафиком.

А есть какие-то подводные камни здесь?

Еще интересное поставили в Traff2sql вывод времени в начале конце и в середине кода.
В середине кода после # Delete log file
И до
#**********************************************************
# Processin by traffic
#**********************************************************

97 тестовых клиентов. Что увидели в логах:

Start script is Tue Sep 18 15:31:35 2012 - начало стало быть
End flow is Tue Sep 18 15:32:09 2012 - середина
Stop srcipt is Tue Sep 18 15:32:09 2012 - конец скрипта

Получается тормоза в секции отработки netflow.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Вт сен 18, 2012 1:13 pm

если Вы используете предоплаченый трафик нужно использовать опцию PREPAID_STORE она существенно ускоряет работу

Tesla
Сообщения: 13
Зарегистрирован: Чт апр 12, 2012 12:56 pm

Re: Низкая скорость работы traffic2sql

Сообщение Tesla » Ср сен 19, 2012 5:14 am

~AsmodeuS~ писал(а):если Вы используете предоплаченый трафик нужно использовать опцию PREPAID_STORE она существенно ускоряет работу
Не помогло. Заметили еще вот что, все 30 минут висят следующие процессы:

Код: Выделить всё

/usr/bin/perl -w /usr/abills/libexec/traffic2sql 2 flowdir=/flows/ \
FLOWTOOLS_IP_AGGREGATION=1 PREPAID_STORE FLOW_CAT=/usr/bin/flow-cat \
FLOW_PRINT=/usr/bin/flow-print  LOG_FILE=/usr/abills/var/log/ipn/ipn_log.log

sh -c /usr/bin/flow-cat /flows//ft-v05.2012-09-18.175000+0400 | \
/usr/bin/flow-print | awk 'BEGIN { ip1=0 };  { ips[$1"  "$2]+=$6 }; END { for (i in ips) { print i" "1" "0" "0" "ips[i]" "0; } }' 


awk BEGIN { ip1=0 };  { ips[$1"  "$2]+=$6 }; END { for (i in ips) { print i" "1" "0" "0" "ips[i]" "0; } }
Один проц постоянно загружен на 100% первым процессом traffic2sql. Не вижу загруженности mysql.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Пт сен 28, 2012 6:51 am

попробуйте без FLOWTOOLS_IP_AGGREGATION=1 запустить команду и сообщите результат

vitalek
Сообщения: 2
Зарегистрирован: Пт сен 28, 2012 9:05 am

Re: Низкая скорость работы traffic2sql

Сообщение vitalek » Пт сен 28, 2012 9:24 am

~AsmodeuS~ писал(а):попробуйте без FLOWTOOLS_IP_AGGREGATION=1 запустить команду и сообщите результат
Добрый день! Разобрались в чем проблема. У нас практически всем Юридическим лицам выдан не один IP а подсеть. Код соотнесения netflow строки под клиента у которого заведена подсеть работает весьма медленно. У вас заполняется хэш %ip_range который представляет из себя структуру типа {UID}=>pack('N4N4', $ip, $count). По которому путем полного перебора в функции traffic_agregate_users происходит поиск соответствия строки netflow и пользователя:

- while (my ($uid, $ip_count) = each %ip_range) {
- my ($ip, $count) = unpack('N4N4', $ip_count);
- my $last_ip = $ip + $count;
-
- if ($ip <= $DATA->{DST_IP} && $DATA->{DST_IP} <= $last_ip) {



Причем поиск происходит два раза по SRC_IP и по DST_IP. Т.е. если мы имеем 500 пользователей 2 направления и ~810000 строк netflow за 5 мин. то в худщем случае это соответствует 8,1e8 операций.
Добавили еще один хеш вида IP->UID и переписали соотнесения строки netflow. Теперь наш netflow обрабатывается приблизительно за 2 мин. Учитывая не очень быструю машину и диски, это вполне приемлемо.
Полный patch в приложении. Пока еще проводим тестирование. Но вроде все ок.

P.S.
Чет не могу прекрепить файл.
Вот текст патча:
Index: Ipn_Collector.pm
===================================================================
--- Ipn_Collector.pm (old)
+++ Ipn_Collector.pm (new)
@@ -43,6 +43,7 @@
my %intervals = ();
my %tp_interval = ();
my %ip_range = ();
+my %ip_user_hash = ();
my @zoneids;
my %ip_class_tables = ();

@@ -193,8 +194,12 @@
#Get IP/mask
if ($line->{netmask} && $line->{netmask} < 4294967295) {
my $count = 4294967295 - $line->{netmask};
+ my $ip2hash = $ip;
$ip = pack('N4N4', $ip, $count);
$ip_range{ $line->{uid} } = $ip;
+ for (my $i =0; $i <= $count; $i++) {
+ $ip_user_hash{$ip2hash+$i} = $line->{uid};
+ }
}
$ips{$ip} = $line->{uid};

@@ -229,7 +234,6 @@
$users_info{BILL_ID}{ $line->{uid} } = $line->{bill_id};
$users_info{JOIN_SERVICE}{ $line->{uid} } = $line->{join_service} if ( $line->{join_service} );
}
-
$self->{USERS_IPS} = \%ips;
$self->{USERS_INFO} = \%users_info;
$self->{SESSIONS_ID} = \%session_ids;
@@ -273,17 +277,13 @@
$y++;
}
else {
- while (my ($uid, $ip_count) = each %ip_range) {
- my ($ip, $count) = unpack('N4N4', $ip_count);
- my $last_ip = $ip + $count;
-
- if ($ip <= $DATA->{SRC_IP} && $DATA->{SRC_IP} <= $last_ip) {
+
+ if ($ip_user_hash{$DATA->{SRC_IP}}) {
+ my $uid = $ip_user_hash{$DATA->{SRC_IP}};
push @{ $self->{AGREGATE_USERS}{$uid}{OUT} }, {%$DATA};
$DATA->{UID} = $uid;
$y++;
- last;
}
- }
}

if (defined($users_ips->{ $DATA->{DST_IP} })) {
@@ -298,18 +298,13 @@
$y++;
}
else {
- while (my ($uid, $ip_count) = each %ip_range) {
- my ($ip, $count) = unpack('N4N4', $ip_count);
- my $last_ip = $ip + $count;
-
- if ($ip <= $DATA->{DST_IP} && $DATA->{DST_IP} <= $last_ip) {
+ if (defined($ip_user_hash{$DATA->{DST_IP}})) {
+ my $uid = $ip_user_hash{$DATA->{DST_IP}};
push @{ $self->{AGREGATE_USERS}{$uid}{IN} }, {%$DATA};
$DATA->{UID} = $uid;
$y++;
- last;
}
- }
-
+
#Unknown Ips
if ($y < 1) {
$DATA->{UID} = 0;

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Вс сен 30, 2012 6:05 am

сообщите какая у Вас версия abills ?

vitalek
Сообщения: 2
Зарегистрирован: Пт сен 28, 2012 9:05 am

Re: Низкая скорость работы traffic2sql

Сообщение vitalek » Пн окт 01, 2012 5:14 am

Версия 0.61 Недавно до нее обновлялись.

~AsmodeuS~
Site Admin
Сообщения: 5688
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: Низкая скорость работы traffic2sql

Сообщение ~AsmodeuS~ » Ср окт 03, 2012 11:17 am

спасибо поправленно

Ответить