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

Обработка netflow

Кто-то делал "postprocessing" для netflow архивов?

Я запилил на C++, сижу пытаюсь сделать кое-какой статистический анализ(пытаюсь создать статистику по потребителям), но обработка(в основном, но не так уж значительно - время уходит на выдергивание ip в username) - 40 минут на миллиард записей.

Интересно если у кого-то был схожий опыт.

Формат - nfdump+lzo

Share this post


Link to post
Share on other sites

Формат - nfdump+lzo

Используем flowtools. Тоже с компрессией. Самописный обработчик. Классифицирует поток по IP, суммирует и кладет в базу.

Обрабатывается примерно на порядок быстрее.

Share this post


Link to post
Share on other sites

Суперинтересно! :)

 

А какова приблизительно плотность записи и дисковая подсистема?

У меня например тестовые выборки:

12.843.236 записей заняли 600 мбайт в сжатом виде(несжатые 960Mb), т.е. около 46 байт на запись в сжатом виде и ~75 в несжатом(но там сохранен практически полный netflow), сжатие lzo

 

Ориентировочно у меня 20 гиг на миллиард записей, обычный винт - упираюсь в i/o, если не делаю соответствие ip в username (у меня динамика и адреса у юзеров часто меняются из-за перебоев с электричеством).

Т.е. вычитывание 20 гиг со скоростью 90Мбайт в секунду ~511 секунд, по идее быстрее чем 8.51 минут не получится, на порядок разогнатся никак не выходит(у меня).

Ну и плюс т.к. данные в тот же момент пишутся, максимальная скорость чтения ощутимо ниже.

 

Самая главная проблема в том, что надо сделать экономное решение, можно конечно напхать SSD и памяти 128 гиг, но это нерентабельно. Хотя скорость дисковой подсистемы прийдется поднимать.

Share this post


Link to post
Share on other sites

# Записей
$ for arg in ft-*; do flow-header < $arg; done | awk '/capture flows:/{s+=$4}END{print s}'
684362648
# Объем
$ du -sk .
15281288
# Время на чтение
$ time cat * > /dev/null

real	1m58.828s
user	0m0.273s
sys	0m14.857s

Но оно обсчитывается тупо раз в 10 минут. Файло пока в кэше обсчет идет бодренько. :-)

Да, HP Smart Array E200, 128 mBps

Share this post


Link to post
Share on other sites

Ааа.. блин, в кеше. В кеше у меня вообще все со свистом влетает :)

Но кстати надо попробовать сделать preload данных, похоже производительность сильно падает, т.к. программа ждет вычитывания очередного куска данных.

У вас еще похоже записи покороче, ~22 байта на запись, но тут у меня неизбежное зло - надо хранить максимум данных из netflow.

Share this post


Link to post
Share on other sites

Кто-то делал "postprocessing" для netflow архивов?

Я запилил на C++, сижу пытаюсь сделать кое-какой статистический анализ(пытаюсь создать статистику по потребителям), но обработка(в основном, но не так уж значительно - время уходит на выдергивание ip в username) - 40 минут на миллиард записей.

Интересно если у кого-то был схожий опыт.

Формат - nfdump+lzo

а смысл? Записи всеравно перебирать одну за другой приходится, на чем не пиши - быстрее не будет, ибо O(n)

Share this post


Link to post
Share on other sites

Ничуть, nfdump складывает файлами, я уже сделал thread pool по количеству процессоров (заодно подтянул SSD) - скорость выросла раз в 5.

Если конечно алгоритм позволяет разбить обработку (у меня позволяет).

Share this post


Link to post
Share on other sites

Угу, Clickhouse рулит. Мы его в FastNetMon Advanced используем :) Запросы за последние месяцы выполняются мгновенно :)

Share this post


Link to post
Share on other sites

Я пока заливаю так:

nfdump -x ch_netflow.sh

cat ch_netflow.sh
#!/bin/bash
nfdump -R /backup/nfdump/$1 -q -o pipe | /bin/sed 's/|/ /g' | /usr/bin/awk '{print strftime ("%F", $2)","strftime ("%F %T", $2)","$10","$11","$15","$16","$24","$6}' | clickhouse-client --host 127.0.0.1 --query="INSERT INTO netflow FORMAT CSV" && nfdump -r /backup/nfdump/$1 -bzw /backup/nfdump/$1-agg && rm /backup/nfdump/$1

 

Так же находил проект https://github.com/filonov-a/simplenat

Share this post


Link to post
Share on other sites

Есть ли живые коллекторы Netflow в Clickhouse кроме упомянутого выше FastNetMon ? 

Share this post


Link to post
Share on other sites

Нашел кое что современное.
Enterprise level Netflow collector как они себя называют от Verizon: https://github.com/VerizonDigital/vflow

 

Пишет в очередь сообщений Kafka, из которой можно лить в Clickhouse 
 

Похожая штука от ClowdFlare: https://github.com/cloudflare/goflow

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