Jump to content
Калькуляторы

flow-tools

Блин помогите с нетфлоу. Колектор работает нормально флоу валится в файлы - проблема с фильтрами.

Помогите с примером фильтра выдернуть статистику по определеному ип за определенное время.

Просто раньше такую статистику с билинга выдавали.

Share this post


Link to post
Share on other sites

#!/usr/bin/perl -w
use strict;
if ($#ARGV == -1){
       print "Usage ./catdetails <netflow_file> <IP>\n";
exit 1;
}

my %count = ();
open (CMD, '/usr/bin/flow-cat '."$ARGV[0]".' | /usr/bin/flow-export -f2|') or die "Can't open flows: $!\n";
           while (<CMD>){
                       my @array = (split /,/, $_);
                                   if ($array[11] eq $ARGV[1]) {
                                               #11dst, 10 -src
                                               my $time = localtime($array[0]);
                                               print "$time\t$array[10]\t\t$array[5]\tdstport\t$array[15]\n";
                                               $count{$array[10]} += $array[5];
                                   }
           }
print "Detail statistic by source in bits:\n";
foreach(sort {$count{$b} <=> $count{$a}} keys %count) {
           print "$_\t\t$count{$_}\n";
}

 

Как пример привожу свой скрипт по вытаскиванию детальной статистики.

Share this post


Link to post
Share on other sites

не спец в перле но не работает

/1.prl /var/log/flow/2011/2011-05/2011-05-09/ft-v05.2011-05-09.000001+0800 *.*.*.*

/usr/bin/flow-export: Exported 211235 records

Detail statistic by source in bits:

Share this post


Link to post
Share on other sites

не спец в перле но не работает

/1.prl /var/log/flow/2011/2011-05/2011-05-09/ft-v05.2011-05-09.000001+0800 *.*.*.*

/usr/bin/flow-export: Exported 211235 records

Detail statistic by source in bits:

 

К сожалению я за вас не могу разбираться. Скрипт рабочий, проверить пути и все должно работать, так как сам его использовал на нескольких системах.

 

Вы уверены что скрипт вам выдал ошибку? А не просто отработал и не найдя нужно информации вывел вам пустую строку?

Share this post


Link to post
Share on other sites

не спец в перле но не работает

/1.prl /var/log/flow/2011/2011-05/2011-05-09/ft-v05.2011-05-09.000001+0800 *.*.*.*

/usr/bin/flow-export: Exported 211235 records

Detail statistic by source in bits:

 

К сожалению я за вас не могу разбираться. Скрипт рабочий, проверить пути и все должно работать, так как сам его использовал на нескольких системах.

 

Вы уверены что скрипт вам выдал ошибку? А не просто отработал и не найдя нужно информации вывел вам пустую строку?

Что выдал я написал - то есть ничего

Share this post


Link to post
Share on other sites

Мой вариант: http://sources.homelink.ru/flowfilter/flowfilter.pl.txt

Подразумевается, что свежие ft-файлы и старые архивы, перепакованные в bz2, лежат в /var/db/netflow.

Большое спасибо Илья отработало все на ура великолепно - сейчас чуть помаракую как юникстайм в нормальное время перевести.

Share this post


Link to post
Share on other sites

Может проще всё в базу писать сразу постгреса или мускула? от туда и выборку делать проще сукильными запросами. Да и в том же мускуле есть тип таблиц arh.

Edited by gavru

Share this post


Link to post
Share on other sites

Может проще всё в базу писать сразу постгреса или мускула? от туда и выборку делать проще сукильными запросами. Да и в том же мускуле есть тип таблиц arh.

У меня гиг нетфлоу в день - как ты думаешь выдержит база ? Что-то с юникстаймом плохо там в прямую в файл пишется из экспорта строки - буду думать о парсере.

Share this post


Link to post
Share on other sites

А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200.

Хозяин барин, я просто предложил.

Edited by gavru

Share this post


Link to post
Share on other sites

Да и в том же мускуле есть тип таблиц arh.

Вообще-то archive.

В любом случае, затея сомнительная.

flow-tools-ng и nfdump пишут в файлы, то есть для прямой записи в sql пришлось бы либо дописывать их, либо сочинять собственный сборщик.

Ядро SQL создаст лишнюю нагрузку.

Данные нужны редко - хранить их в базе незачем.

 

А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа?

Это не может служить заменой детальной статистике. По договору нужно хранить сырые flows.

Для биллинга такие кучерявые отчёты тоже ни к чему, для него достаточно записей tstamp-userid-trafclass-sumbytes каждые несколько минут.

Share this post


Link to post
Share on other sites
flow-tools-ng и nfdump пишут в файлы, то есть для прямой записи в sql пришлось бы либо дописывать их, либо сочинять собственный сборщик.

Ядро SQL создаст лишнюю нагрузку.

Данные нужны редко - хранить их в базе незачем

 

Ну в какой то степени согласен, перелопачивать готовые не имеет смысла.

Share this post


Link to post
Share on other sites

А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200.

Хозяин барин, я просто предложил.

А прокурору как отдавать ? Им желательно поточнее.

Share this post


Link to post
Share on other sites

как юникстайм в нормальное время перевести.

http://perldoc.perl.org/POSIX.html -- strftime

я в перле вообще почти никак, но мне показалось там тупо с вывода flow-export строка пишется на прямую в файл

как ее там разобрать парсером я хз. Сможете помочь ?

Share this post


Link to post
Share on other sites

я в перле вообще почти никак, но мне показалось там тупо с вывода flow-export строка пишется на прямую в файл

как ее там разобрать парсером я хз.

Примерно так:

perl -MPOSIX -ne 'chomp my @w = split(/,/, $_); $w[0] = POSIX::strftime("%Y-%m-%d %H:%M:%S", localtime($w[0])); print join(",", @w), "\n"' < /tmp/detailed_*.txt

Share this post


Link to post
Share on other sites

Яснее не стало =) Но спасибо за помощь буду рыть в ту сторону

next unless /^\d/;

print $_;

my @w = split(/,/, $_); $w[0] = strftime("%Y-%m-%d %H:%M:%S", localtime($w[0])); print join(",", @w), "\n";

#print R $_;

$nlines++;

 

Кусок принял такой вид но есть ошибка Undefined subroutine &main::strftime called at ./flowfilter.pl.txt line 88, <F> line 2.

При использовании use POSIX; Вылетает ошибка Can't use string ("/tmp/filew8Krjr") as a symbol ref while "strict refs" in use at. Еще раз я в перле 0 =)

Edited by Gunner

Share this post


Link to post
Share on other sites

А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200.

Хозяин барин, я просто предложил.

А прокурору как отдавать ? Им желательно поточнее.

пофиг как отдавать, нет конкретного описания.

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this