Похоже экспой делиться некому =(
Как решили проблему?
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>
|