Друзья, кто пользовался на практике flow-export для перевода данных flows в mysql, помогите определиться с синтаксисом, желательно конечно примеры на практике.
согласно man: flow-export -f3 -mSRCADDR,DSTADDR,DOCTETS -u "user:password:host:port:name:table" < flows
Я решил попробовать: flow-export -f3 -mSRCADDR,DSTADDR,DOCTETS -u "user:password:host:port:name:table" < flows
где user - root
password - он самый
host - написал ip
port - 3306
name - flow (имя базы)
table - test (созданная мной таблица с соответствующими полями)
flows - путь к файлу
Ругается следующим образом:
flow-tools: format not supported
flow-tools: exported 0 records
Понятно что не нравится фомат, но что не так не понятно. Вроде бы простая команда, а не хотит....
Ps: И flow-tools и mysql на одной машине (FreeBSD)
<?php
$workdir="/var/flow/router/";
$dh=dir($workdir);
while ($entry=$dh->read()) {
if ($entry[0]=='f')
{
echo("Processing NetFlow File:".$entry."\n");
$strtoexecute='flow-export -f3 -mDOCTETS,SRCADDR,DSTADDR -u "DBNAME:PASSWD:IP.IP.IP.IP:PORT:DBNAME:TABLENAME" <'.$workdir.$entry;
exec($strtoexecute);
$filetodelete=$workdir.$entry;
unlink($filetodelete);
};
};
$dh->close;
?>Скрипт выгребает все flow файлы из workdir и запихивает их в базу. Работает 100%. Прописываешь его в крон например раз в час. Удачи.
Спасибо за отзывчивость.
Но прошу немного подкорректировать мои действия.
С PHP вплотную не занимался....
Установил php-4-4.3.6,запустил скрипт сл. образом...
#!/usr/local/bin/php -q
<?php
$workdir="/usr/flow/php/ft-v05.2005-01-31"; (я для теста поместил одну 15-ти минутку в отдельный каталог)
$dh=dir($workdir);
while ($entry=$dh->read()) {
if ($entry[0]=='f')
{
echo("Processing NetFlow File:".$entry."\n");
$strtoexecute='flow-export -f3 -mDOCTETS,SRCADDR,DSTADDR -u
"root::(пароль):(IP лок машины):3306:flow:test" <'.$workdir.$entry;
exec($strtoexecute);
$filetodelete=$workdir.$entry;
unlink($filetodelete);
};
};
$dh->close;
?>
В ответ следующее ..
Warning: dir(/usr/flow/php/ft-v05.2005-01-31.181501+0000): failed to open dir: Not a directory in /usr/flow/php/flow-exp.php on line 4
Fatal error: Call to a member function on a non-object in /usr/flow/php/flow-exp.php on line 5
Если можно прошу пояснить в чем могут быть еще особенности (). Спасибо.
Проверь, может в этом
$workdir="/usr/flow/php/ft-v05.2005-01-31"; - это запись, вероятно должно быть
$workdir="/usr/flow/php/";
>Проверь, может в этом
>$workdir="/usr/flow/php/ft-v05.2005-01-31"; - это запись, вероятно должно быть
>$workdir="/usr/flow/php/";Странно ...
flow-tools version 0.67: built by simps@router on Fri Jun 18 14:34:14 MSD 2004В этих исходниках был нерабочий flow-export точнее та часть что пихала в mysql мне пришлось исходники править
>Странно ...
>flow-tools version 0.67: built by simps@router on Fri Jun 18 14:34:14 MSD
>2004
>
>В этих исходниках был нерабочий flow-export точнее та часть что пихала в
>mysql мне пришлось исходники правитьЧестно говоря не скажу какой у меня билд, но я наступил на те же грабли, что и автор топика - просто не соблюден порядок полей. Он их может экспортить только в "естественном" порядке, так как они в потоке идут.
>>Странно ...
>>flow-tools version 0.67: built by simps@router on Fri Jun 18 14:34:14 MSD
>>2004
>>
>>В этих исходниках был нерабочий flow-export точнее та часть что пихала в
>>mysql мне пришлось исходники править
>
>Честно говоря не скажу какой у меня билд, но я наступил на
>те же грабли, что и автор топика - просто не соблюден
>порядок полей. Он их может экспортить только в "естественном" порядке, так
>как они в потоке идут.Да да да что то похожее на правду =) Только походу я сходу полез без разбора в дебри =)
Я так понимаю, что порядок DOCTETS,SRCADDR,DSTADDR правильный.
Кстати, у меня версия 0.66 - какие-нибудь мнения есть?
>Проверь, может в этом
>$workdir="/usr/flow/php/ft-v05.2005-01-31"; - это запись, вероятно должно быть
>$workdir="/usr/flow/php/";Да, это имя директории, не файла. Скрипт выгребает все файлы из этой директории. Извините, долго не отвечаю - разница во времени 8 часов :(
Да, друзья, вы правы, внес изменения.... (убрал лишнее)
Теперь при запуске ни на что не ругается, но и вообще ничего не выдает.
Ведь должен отображать то что посылает echo...
Да кстати еще один вопрос - отдельно пользователя обязательно нужно создавать на БД (у меня сейчас root как был по умолчанию) Я имею не вообще (это и так понятно что нужно), а именно для этой операции.
я пускал его просто /scriptdir/php4 flowtosql.php, и echo работало. На счет пользователя в БД это скорее вопрос безопасности чем функциональности :) В идеале ты должен иметь юзера с правами на работу с таблицей куда ты вставляешь свои данные и не больше. Желательно что бы был отдельный конечно, рута рискованно оставлять.
А вообще root может делать все что угодно ;)
Дело в том, что файл из директории удаляет.....
Значит скрипт отрабатывается до конца... но что-то видно еще нужно подправить....
>Дело в том, что файл из директории удаляет.....
>Значит скрипт отрабатывается до конца... но что-то видно еще нужно подправить....Это на счет того что echo не работает? да может у него стандартный вывод куда ни будь в другое место чем на активную консоль по дефолту :) честно говоря не знаю :) Да и кроме того это echo тут как зайцу стоп-сигнал :)
>[оверквотинг удален]
> exec($strtoexecute);
> $filetodelete=$workdir.$entry;
> unlink($filetodelete);
> };
>};
>$dh->close;
>?>
>
>Скрипт выгребает все flow файлы из workdir и запихивает их в базу.
>Работает 100%. Прописываешь его в крон например раз в час. Удачи.Хочу поднять тему!!!
пишу для биллинга,
написал shell скрипт для экспорта притом он файлы (5мин-ки) разбивает по дням и кладет в таблицы типа nf20071218 (я думал это ускорит) хотелось бы узнать два вопроса:
Если лить все в одну таблицу хотяб на три месяца как это повлияет на скорость;?
Или все таки обрабатывать допустим дневную таблицу или вообще 5-мин-ку но так чтоб в новой таблице был не сырой трафик netflow в формате1.1.1.1 2.2.2.2 srcport dstport octets <-in пакет
2.2.2.2 1.1.1.1 srcport dstport octets -> out пакета в нормальном виде 1.1.1.1 2.2.2.2 srcport dstport !in !out .
Не могу такой sql запрос собрать - голову уже сломал, отдельно по входящему и исходящему могу выводить причем уже с посчитаными байтами на одинаковых dstip , а надо чтоб красиво было ip remip in out.
Я уже решил другой вариант пробовать, снчала flow-export ом в ascii а оттуда пхп или shellом агрегировать и закидывать в скуль уже нормальные таблицы в нормальном формате!!!
Если есть у кого наработки поделитесь чтоб велосипед не изобретать!! Очень буду рад всем ответившим!!
Мужик, я тебе отвечу как человек который сам мучался с этим геммороем, и который мучался этим геммороем вместе со своим коллегой. Работать удалось заставить версию Flow-Tools 0.67 (Ставили на FreeBSD 4.7, 5.3 и 5.4) теоритически поможет и с другими версиями.Итак есть несколько вариантов развития событий, но фишка в чем:
ставим Flow-Tools, предположим следуя пути меньшей гемморойности с портов
(#/usr/ports/net-mgmt/flow-tools/make install), - бинарники соотвественно свалились в /usr/local/bin, нам это по барабану (но потом пригодится, точнее надо запомнить потому что оттуда запускать мы нифига не будем), заходим в порты ищем этот порт (net-mgmt/flow-tools) и в нем директорию work, и там заходим в директорию исходников, затем даем команду:
#./configure --with-mysql=/usr/local/lib/mysql
где /usr/local/lib/mysql - путь к библиотэкам MySQL (у вас может быть не там!)
соотвественно тут два варианта развития сюжета, которые наступают после команды make
1) команда make отработала без ошибок
2) команда make отработала с ошибкой на файле flow-export (бла-бла-бла flow-export.c: In function 'format3': бла-бла-бла или потерялся файл заголовков mysql.h)В первом случае уважаемый configure по каким-то собственным причинам решил с MySQL воопче не работать, делаем так:
открываем *configure
ищем строку
ac_cv_lib_mysqlclient_my_init=no
ставим yes
но эт еще не все
теперь надо
#./configure --with-mysql=/usr/local
спросите куда пропала /lib/mysql ? Скрипт сам допишет, поэтому если у вас библиотеки не там то гемор будет полный разбирайтесь с путями в скрипте *configure
ну соотвественно пишем #make
и снова ГЕМОР! но ГЕМОР втрого варианта который собсвенно мы и ожидали с таким нетерпением и дрожью в рукахитак второй вариант
файл flow-export.c идет с ошибками... как минимум с двумя.Ошибка номер 1: там стоит строка в начале include <mysql.h>
меняем на то место, где у вас находится файл заголовков mysql.h
у нас например это </usr/local/include/mysql/mysql.h>Ошибка номер 2: в файле flow-export.c есть переменная init debug, она прописана не там где надо, а надо чтобы она была прописана перед функцией int main(int arc, char **argv)
а она там неправильно прописана в ТЕЛЕ функции, т.е. после - это неправильно, она должна быть глобальной, или прописывать ее надо везде где она используется!Вообщем, все поправили, и делаем
#make install
не забыли где ищет бинарники FreeBSD?
правильно на /usr/local/bin/ а make install все закинуло в /usr/local/netflow/bin
все сделалось, но в другом месте...
теперь пробуем экспорт в mysql...
ну там команда
#/usr/local/netflow/bin/flow-export -f3 m-чего-то там...
я дословно писать не буду... вся фишка в том,
ЧТО СНОВА МОЖЕТ НЕ ЗАРАБОТАТЬ!!!
скажет потерялась библиотэка libmysqlclient.so.14
ну тут все зависит от того как ставился mysql, можно по-тупому скопировать его библиотеки в /usr/libэто есть неправильно, т.е. файл flow-export он собирал с библиотэками из /usr/local/lib/mysq, а работает из /usr/lib, чес слово это кривой configure, хотите доводите до ума и сохраните для потомков...
Destroer & Zliden
супер помогли мужики