Gunner Posted May 11, 2011 Posted May 11, 2011 Блин помогите с нетфлоу. Колектор работает нормально флоу валится в файлы - проблема с фильтрами. Помогите с примером фильтра выдернуть статистику по определеному ип за определенное время. Просто раньше такую статистику с билинга выдавали. Вставить ник Quote
fedusia Posted May 11, 2011 Posted May 11, 2011 #!/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"; } Как пример привожу свой скрипт по вытаскиванию детальной статистики. Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 не спец в перле но не работает /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: Вставить ник Quote
fedusia Posted May 11, 2011 Posted May 11, 2011 не спец в перле но не работает /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: К сожалению я за вас не могу разбираться. Скрипт рабочий, проверить пути и все должно работать, так как сам его использовал на нескольких системах. Вы уверены что скрипт вам выдал ошибку? А не просто отработал и не найдя нужно информации вывел вам пустую строку? Вставить ник Quote
Ilya Evseev Posted May 11, 2011 Posted May 11, 2011 Мой вариант: http://sources.homelink.ru/flowfilter/flowfilter.pl.txt Подразумевается, что свежие ft-файлы и старые архивы, перепакованные в bz2, лежат в /var/db/netflow. Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 не спец в перле но не работает /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: К сожалению я за вас не могу разбираться. Скрипт рабочий, проверить пути и все должно работать, так как сам его использовал на нескольких системах. Вы уверены что скрипт вам выдал ошибку? А не просто отработал и не найдя нужно информации вывел вам пустую строку? Что выдал я написал - то есть ничего Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 Мой вариант: http://sources.homelink.ru/flowfilter/flowfilter.pl.txt Подразумевается, что свежие ft-файлы и старые архивы, перепакованные в bz2, лежат в /var/db/netflow. Большое спасибо Илья отработало все на ура великолепно - сейчас чуть помаракую как юникстайм в нормальное время перевести. Вставить ник Quote
gavru Posted May 11, 2011 Posted May 11, 2011 (edited) Может проще всё в базу писать сразу постгреса или мускула? от туда и выборку делать проще сукильными запросами. Да и в том же мускуле есть тип таблиц arh. Edited May 11, 2011 by gavru Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 Может проще всё в базу писать сразу постгреса или мускула? от туда и выборку делать проще сукильными запросами. Да и в том же мускуле есть тип таблиц arh. У меня гиг нетфлоу в день - как ты думаешь выдержит база ? Что-то с юникстаймом плохо там в прямую в файл пишется из экспорта строки - буду думать о парсере. Вставить ник Quote
Ilya Evseev Posted May 11, 2011 Posted May 11, 2011 как юникстайм в нормальное время перевести. http://perldoc.perl.org/POSIX.html -- strftime Вставить ник Quote
gavru Posted May 11, 2011 Posted May 11, 2011 (edited) А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200. Хозяин барин, я просто предложил. Edited May 11, 2011 by gavru Вставить ник Quote
Ilya Evseev Posted May 11, 2011 Posted May 11, 2011 Да и в том же мускуле есть тип таблиц arh. Вообще-то archive. В любом случае, затея сомнительная. flow-tools-ng и nfdump пишут в файлы, то есть для прямой записи в sql пришлось бы либо дописывать их, либо сочинять собственный сборщик. Ядро SQL создаст лишнюю нагрузку. Данные нужны редко - хранить их в базе незачем. А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Это не может служить заменой детальной статистике. По договору нужно хранить сырые flows. Для биллинга такие кучерявые отчёты тоже ни к чему, для него достаточно записей tstamp-userid-trafclass-sumbytes каждые несколько минут. Вставить ник Quote
gavru Posted May 11, 2011 Posted May 11, 2011 flow-tools-ng и nfdump пишут в файлы, то есть для прямой записи в sql пришлось бы либо дописывать их, либо сочинять собственный сборщик.Ядро SQL создаст лишнюю нагрузку. Данные нужны редко - хранить их в базе незачем Ну в какой то степени согласен, перелопачивать готовые не имеет смысла. Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200. Хозяин барин, я просто предложил. А прокурору как отдавать ? Им желательно поточнее. Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 как юникстайм в нормальное время перевести. http://perldoc.perl.org/POSIX.html -- strftime я в перле вообще почти никак, но мне показалось там тупо с вывода flow-export строка пишется на прямую в файл как ее там разобрать парсером я хз. Сможете помочь ? Вставить ник Quote
Ilya Evseev Posted May 11, 2011 Posted May 11, 2011 я в перле вообще почти никак, но мне показалось там тупо с вывода 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 Вставить ник Quote
Gunner Posted May 11, 2011 Author Posted May 11, 2011 (edited) Яснее не стало =) Но спасибо за помощь буду рыть в ту сторону 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 May 12, 2011 by Gunner Вставить ник Quote
Giga-Byte Posted May 12, 2011 Posted May 12, 2011 А если применить агрегацию например суточную по посещённым ресурсам и группировать их со сложением трафа? Думаю после этого гиг в сутки превратится в метров 200. Хозяин барин, я просто предложил. А прокурору как отдавать ? Им желательно поточнее. пофиг как отдавать, нет конкретного описания. без аггрегации оператору проще разобраться в проблеме, но тяжелее хранить, только диски нынче дешевые, рейд не нужен, там данные тупо пишутся Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.