BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 24 июн 2025, 03:41

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: 16 май 2013, 14:10 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Доброго дня.

Сегодня возникла проблема получить детализацию трафика по номеру договора (соответсвенно логина DialUp и так далее). Встроенная возможность детализации описанная в http://bgbilling.ru/v5.0/doc/ch03s16s01.html к 5.2 не подошла. Единственный выход это както парсить руками имеющиеся собраные данные вида log_xxx-xx-xx-xx.000.bgdl и log_xxx-xx-xx-xx.000.data.
Стандартный flow-cat тут не помогает (ругается на неверную структуру),
viewtopic.php?f=25&p=54623#p54623 - в 5.2 к сожалению два файла и скрипт не подходит.
Если кто сталкивался с подобной задачей - поделитесь экспой ...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 май 2013, 10:27 
Не в сети

Зарегистрирован: 01 мар 2013, 09:18
Сообщения: 46
Карма: 5
Похоже экспой делиться некому =(

Как решили проблему?

1) Из БД получили данные по сессиям абонента за месяц. Сохранено в файл search_ip.csv
---
select cast(INET_NTOA(l.ipaddr)AS CHAR) as ip,unix_timestamp(session_start),unix_timestamp(session_stop)
from log_session_1_201210 as l,user_login_1 as u,contract as c
where c.id = u.cid AND u.id = l.lid AND session_start>='2012-10-19' AND c.title = <номер договра>
---
2) Поднимаем тестовый биллинг (activemq, mysql, BGBilling server);
3) Копируем куда либо из архива упакованные файлы netflow за нужный период. (за месяц получилось 150Gb упакованного, > 500gb развернутого)
4) Создаем папку netflow_logs в корне.
5) Распаковываем tar xjf <file.tar.bz2> в папку /netflow_logs - должны появиться папки source_x (где х номер ресурса который парсил и упаковывал netflow)
6) Запускаем IPnetflowCollector в папке биллинга.
7) Состряпан getNetflow.pl
---
#!/usr/bin/perl -w

use Data::Dumper;

$dir_to_NF='/usr/local/BGIPNetflowCollector/netflow.sh';
$dir_to_save='/netflow_logs/data';
@source = (3,4,5);
$start_time=time();
open(IP,'search_ip.csv') or die ("Cant open IP list\n");
open(DUMP,">>$dir_to_save/dump.csv") or die ("Cant save DUMP file\n");
$num=0;
while($line = <IP>){
chomp $line;
my($ip,$stime,$etime)=split(/,/,$line);
my @sdate = localtime($stime);
my @edate = localtime($etime);
$sdate5 = 1900;
$sdate4 += 1;
$sdate4 = &addNull($sdate4);
$sdate3 = &addNull($sdate3);
$sdate2 = &addNull($sdate2);
$edate5 += 1900;
$edate4 += 1;
$edate4 = &addNull($edate4);
$edate3 = &addNull($edate3);
$edate2 = &addNull($edate2);
#$stime = $sdate5."-".$sdate4."-".$sdate3."-".$sdate2;
#$etime = $edate5."-".$edate4."-".$edate3."-".$edate2;
$count = ($edate5-$sdate5)*262800($edate4-$sdate4)*720+($edate3-$sdate3)*24+($edate2-$sdate2);
#if ($count == 0){$count=1;}
$count++;
print "===\n";
print "Start Get_netflow ".(($edate4-$sdate4)*720)." mon ".(($edate3-$sdate3)*24)." day ".($edate2-$sdate2)."\n";
for($n=0;$n<$count;$n++){
foreach $sd (@source){
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($stime+($n*3600));
$year = &addNull($year+1900);
$mon = &addNull($mon+1);
$mday = &addNull($mday);
$hour = &addNull($hour);
print $dir_to_NF." save $sd $year-$mon-$mday-$hour $dir_to_save/s$sd.csv\n";
$line = `$dir_to_NF save $sd $year-$mon-$mday-$hour $dir_to_save/s$sd.csv`;
sleep(1);
}
$num=0;
$timer=0;
undef @ldata;
my @ldata;
$end=0;
while($end==0){
foreach $sd (@source){
if ((-s "$dir_to_save/s$sd.csv") $ldata[$sd]){
$num++;
}
if ($num3){$end=1;}
$ldata[$sd]=(-s "$dir_to_save/s$sd.csv");
}
print $timer++."\n";
sleep(1);
}
sleep(20);
print "\nGetdump from netflow\n";
open(S3,"$dir_to_save/s3.csv") or die ("Cant open S3 dump\n");
undef $ss3 if ($ss3);
undef $ss4 if ($ss4);
undef $ss5 if ($ss5);
while($raw = <S3>){
chomp $raw;
if($raw =~ /$ip/){
$raw =~ s/\s+/ /;
my ($e_date,$e_sip,$e_sport,$e_dip,$e_dport,$e_byte,$tail)=split(" ",$raw);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(substr($e_date,0,10));
if(substr($e_date,0,10) > $stime && substr($e_date,0,10) < $etime){
$year = &addNull($year+1900);
$mon = &addNull($mon+1);
$mday = &addNull($mday);
$hour = &addNull($hour);
$min = &addNull($min);
$sec = &addNull($min);
print DUMP $mday.".".$mon.".".$year." ".$hour.":".$min.":".$sec."\t$e_sip\t$e_sport\t$e_dip\t$e_dport\t$e_byte\n";
$ss3 = "$ip S3 Catch\n" if (!$ss3);
}
}
}
close(S3);
open(S4,"$dir_to_save/s4.csv") or die ("Cant open S4 dump\n");
while($raw = <S4>){
chomp $raw;
if($raw =~ /$ip/){
$raw =~ s/\s+/ /;
my ($e_date,$e_sip,$e_sport,$e_dip,$e_dport,$e_byte,$tail)=split(" ",$raw);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(substr($e_date,0,10));
if(substr($e_date,0,10) > $stime && substr($e_date,0,10) < $etime){
$year = &addNull($year+1900);
$mon = &addNull($mon+1);
$mday = &addNull($mday);
$hour = &addNull($hour);
$min = &addNull($min);
$sec = &addNull($min);
print DUMP $mday.".".$mon.".".$year." ".$hour.":".$min.":".$sec."\t$e_sip\t$e_sport\t$e_dip\t$e_dport\t$e_byte\n";
$ss4 = "$ip S4 Catch\n" if (!$ss4);
}
}
}
close(S4);
open(S5,"$dir_to_save/s5.csv") or die ("Cant open S5 dump\n");
while($raw = <S5>){
chomp $raw;
if($raw =~ /$ip/){
$raw =~ s/\s+/ /;
my ($e_date,$e_sip,$e_sport,$e_dip,$e_dport,$e_byte,$tail)=split(" ",$raw);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(substr($e_date,0,10));
if(substr($e_date,0,10) > $stime && substr($e_date,0,10) < $etime){
$year = &addNull($year+1900);
$mon = &addNull($mon+1);
$mday = &addNull($mday);
$hour = &addNull($hour);
$min = &addNull($min);
print DUMP $mday.".".$mon.".".$year." ".$hour.":".$min.":".$sec."\t$e_sip\t$e_sport\t$e_dip\t$e_dport\t$e_byte\n";
$ss5 = "$ip S5 Catch\n" if (!$ss5);
}
}
}
close(S5);
print "$ss3" if ($ss3);
print "$ss4" if ($ss4);
print "$ss5" if ($ss5);
print "\n";
print "===\n";
}
}
close(IP);

sub addNull(){
my $num = shift(@_);
if ($num < 10){
$num = '0'.$num;
}
return $num;
}
$end_time=time();
print "Execute from ".($end_time-$start_time)." sec\n";
---
Скрипт парсит распакованные логи и складывает в папку $dir_to_save dump.csv даныне вида:
<Дата Время> <Source_ip> <Source_port> <Destination_ip> <Desctination_port> <Send_byte>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 май 2013, 08:13 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
а почему не подошла 16.1.1. Детализация трафика за сессию

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.032s | 21 Queries | GZIP : On ]