Jump to content

Recommended Posts

Posted

Коллектор 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+ нетфлау только для детальки.

Где копать? Тестирую всё ок, скачиваю файл сравниваю всё нормально, но в реальных условия расхождение большое, юзеры начинаю задавать вопросы не кидаем ли мы их.

Биллинг небольшой сети, на базе ядра от фринибса.

Posted (edited)

Скорее всего на PPP считается ВСЁ, как и на Ethernet-порту. Т.е. со всеми заголовками и служебными полями.

А netflow может и теряться.

Может, в этом дело?

Edited by UglyAdmin
Posted (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 by ShumBor
Posted

хм, служебные поля, врядли, тут что-то глубже.

А netflow может и теряться.
Нет, это одна машина, нетфлау падает на локалхост а перловый скрипт всё инсертит в mysql
Posted (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 by ShumBor
Posted
теряться может из за загрузки проца
Загрузка менее 10% в пиктайм.

Скрипт не виснет, проверял соотвествие падающих юдп пакетов tcpdump и инсертов в БД.

Posted (edited)

ipcad всетаки через что считает ulog/ipq?

Поставить flow-tools и посмотреть что будет говрит коллектор

Edited by ShumBor
Posted (edited)

Проблему решил установкой memory_limit в 256k было 2k.

Ставил 2 не подумав головой по чьему-то мануалу.

Теперь всё 1 в 1.

У кого есть наработки по агрегации данных? Чтобы не класть всё в сыром виде хотелось бы писать в временный файл, или в массив, и по 5-и минутным интервалам смотреть совпадающие ip складывя кол-во данных потоков, порты я выброшу тогда.

Edited by disappointed
Posted (edited)

У нас есть наработка такого плана:

Коллектор из flow-tools собирает все в свою базу, а самописный скрипт потом загоняет его в базу с переодичностью в 20 минут.

Если нужна выборка по сессиям прошлись по архиву комбинацией flow-cat/flow-print. небольшое описание есть тут http://tula.bofh.ru/articles/383 http://tula.bofh.ru/articles/393

Edited by ShumBor

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.