disappointed Posted July 14, 2006 Posted July 14, 2006 Коллектор ipcad, мемори стоит в конфиге 2кб, в остальном по дефолту всё. Собираю данные таким скриптом в фоне. #!/usr/bin/perl # Netflow dumping program by evgen use IO::Socket; use Mysql; use DBI; $port = 12000; $min_input_data = 0; $dsn='DBI:mysql:netflow:localhost'; $dbhost = "localhost"; $dbuser = "netflow"; $dbpasswd = "*****"; $dbbase = "netflow"; $table = "netflow_data"; CONNECT: print "Triyng connect to database\n"; sleep(1); $dbh = DBI->connect($dsn, $dbuser, $dbpasswd) or goto CONNECT; $sock= IO::Socket::INET->new(LocalPort=>$port, Proto=>'udp') or die "socket: $@"; print "Start netflow dumper\n"; while ($sock->recv($data, 4096)) { PROCESS_NETFLOW($data); } ###################################################### sub PROCESS_NETFLOW { my($data) = shift @_; ($ver, $count, $uptime, $unix_secs, $unix_nsecs, $flow_seq, $data) = unpack("n n N N N N a*",$data); if ($ver == 5) { ($reserved, $data) = unpack("a4 a*", $data); for ($i = 0; $i < $count; $i++) { ($src_ip_addr, $dst_ip_addr, $next_hop, $mib_in, $mib_out, $pkts, $bytes, $u_start, $u_last, $src_port, $dst_port, $flags, $src_as, $dst_as, $_, $data) = unpack ("a4 a4 a4 n n N N N N n n N n n a4 a*", $data); $src_ip_addr_ = inet_ntoa($src_ip_addr); $dst_ip_addr_ = inet_ntoa($dst_ip_addr); $next_hop = inet_ntoa($next_hop); if ($bytes > $min_input_data) { print "+++ NETFLOW DATA _DUMPED_: $unix_secs $src_ip_addr_:$src_port > $dst_ip_addr_:$dst_port, $bytes bytes, $pkts packets\n"; INSERT_INTO_DATABASE($unix_secs, $src_ip_addr_, $dst_ip_addr_, $src_port, $dst_port, $bytes); } else { print "--- NETFLOW DATA _IGNORED_: $unix_secs $src_ip_addr_:$src_port > $dst_ip_addr_:$dst_port, $bytes bytes, $pkts packets\n"; } } } } ###################################################### ###################################################### sub INSERT_INTO_DATABASE { $query = "INSERT INTO $table (unix_secs, src_ip_addr, dst_ip_addr, src_port, dst_port, bytes) VALUES ('$unix_secs', inet_aton('$src_ip_addr_'), inet_aton('$dst_ip_addr_'), '$src_port', '$dst_port', '$bytes') "; print "DATABASE QUERY: $query\n"; $dbh->do($query); } ###################################################### $dbh->disconnect(); В итоге в БД ложится процентов на 25 меньше чем считается на ppp+ нетфлау только для детальки. Где копать? Тестирую всё ок, скачиваю файл сравниваю всё нормально, но в реальных условия расхождение большое, юзеры начинаю задавать вопросы не кидаем ли мы их. Биллинг небольшой сети, на базе ядра от фринибса. Вставить ник Quote
UglyAdmin Posted July 14, 2006 Posted July 14, 2006 (edited) Скорее всего на PPP считается ВСЁ, как и на Ethernet-порту. Т.е. со всеми заголовками и служебными полями. А netflow может и теряться. Может, в этом дело? Edited July 14, 2006 by UglyAdmin Вставить ник Quote
ShumBor Posted July 14, 2006 Posted July 14, 2006 (edited) А как ipcad считает? у нас на связке ipcad (ipq метод,buffers = 1024k) - flow-tools - самописные скрипты для заноса в базу вроде бы не замечал различий. статистика за 5 минут <***erBot> shumbor: Interface ipq: 5 m average 309044 bytes/sec, 686 pkts/sec <***erBot> shumbor: Flow entries made: 599187 <***erBot> shumbor: NetFlow cached flows: 2250 <***erBot> shumbor: Memory usage: 36% (67108944 from 67108864) <***erBot> shumbor: uptime is 217 days 19:32 <***erBot> shumbor: host uptime is 218 days 19:40 Edited July 14, 2006 by ShumBor Вставить ник Quote
disappointed Posted July 14, 2006 Author Posted July 14, 2006 хм, служебные поля, врядли, тут что-то глубже. А netflow может и теряться.Нет, это одна машина, нетфлау падает на локалхост а перловый скрипт всё инсертит в mysql Вставить ник Quote
ShumBor Posted July 14, 2006 Posted July 14, 2006 (edited) 1. теряться может из за загрузки проца (правда если ipcad считает через ipq то упадет скорость прокачки специально проверяли) 2. пропасть может и на локалхосте, например на время импорта скрит чуть подвис и труба. 3. смотреть последовательности потока. если пиршла последовательность 5 а за ней 7 то 6 потеряли. Вот пример потери в flow-tools flow-capture[678]: ftpdu_seq_check(): src_ip=192.168.1.130 dst_ip=192.168.1.129 d_version=5 expecting=35 442927 received=35443088 lost=161 Edited July 14, 2006 by ShumBor Вставить ник Quote
disappointed Posted July 14, 2006 Author Posted July 14, 2006 теряться может из за загрузки процаЗагрузка менее 10% в пиктайм.Скрипт не виснет, проверял соотвествие падающих юдп пакетов tcpdump и инсертов в БД. Вставить ник Quote
ShumBor Posted July 15, 2006 Posted July 15, 2006 (edited) ipcad всетаки через что считает ulog/ipq? Поставить flow-tools и посмотреть что будет говрит коллектор Edited July 15, 2006 by ShumBor Вставить ник Quote
disappointed Posted July 15, 2006 Author Posted July 15, 2006 (edited) Проблему решил установкой memory_limit в 256k было 2k. Ставил 2 не подумав головой по чьему-то мануалу. Теперь всё 1 в 1. У кого есть наработки по агрегации данных? Чтобы не класть всё в сыром виде хотелось бы писать в временный файл, или в массив, и по 5-и минутным интервалам смотреть совпадающие ip складывя кол-во данных потоков, порты я выброшу тогда. Edited July 15, 2006 by disappointed Вставить ник Quote
ShumBor Posted July 16, 2006 Posted July 16, 2006 (edited) У нас есть наработка такого плана: Коллектор из flow-tools собирает все в свою базу, а самописный скрипт потом загоняет его в базу с переодичностью в 20 минут. Если нужна выборка по сессиям прошлись по архиву комбинацией flow-cat/flow-print. небольшое описание есть тут http://tula.bofh.ru/articles/383 http://tula.bofh.ru/articles/393 Edited July 16, 2006 by ShumBor Вставить ник Quote
disappointed Posted July 16, 2006 Author Posted July 16, 2006 ммм.... не хочется флаутулсы использовать, сделаю на перле, потом брошу в эту ветку готовый коллектор с агрегацией. Вставить ник Quote
ShumBor Posted July 17, 2006 Posted July 17, 2006 Хм. А смысл гордить велосипед когда есть готовое решение? Вставить ник Quote
disappointed Posted July 17, 2006 Author Posted July 17, 2006 Так готов уже велосипед, чего ж его не доделать чуток. Тем более что на него ушло час два чтения док. Вставить ник 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.