tm

FlowView. Плагин который показывает погоду, но предназначенный для анализа NetFlow. Тем не менее он у меня установлен. Общую картину он создать может, поэтому начнём. Для настройки в первую очередь создаём директорию, куда будет падать flow. У меня всё льётся в /var/netflow/flows/completed. Создаём директорию:

mkdir -p /var/netflow/flows/completed/

 Для того, что бы плагин заработал нужно установить библиотеку FlowTools:

apt-get install flow-tools

 И вот тут у нас есть возможность ощутить всю корявость плагина. Часть скрипта которая отвечает за создание таблицы в БД имела тип MEMORY, что приводило к потере данных после рестарта MySQL или перезагрузке сервера.

nano /usr/share/cacti/site/plugins/flowview/flowview.sql

CREATE TABLE plugin_flowview_dnscache (
    ip varchar(32) NOT NULL default '',
    host varchar(255) NOT NULL default '',
    `time` int(20) NOT NULL default '0',
    KEY ip (ip)
) TYPE=MEMORY;

CREATE TABLE plugin_flowview_devices (
    id int(12) NOT NULL auto_increment,
    name varchar(64) NOT NULL,
    folder varchar(64) NOT NULL,
    allowfrom varchar(32) NOT NULL default '0',
    port int(12) NOT NULL,
    nesting varchar(4) NOT NULL default '-1',
    version varchar(12) NOT NULL default '5',
    rotation int(12) NOT NULL default '1439',
    expire int(3) NOT NULL default '7',
    compression int(1) NOT NULL default '0',
    PRIMARY KEY  (id),
    KEY folder (folder)
) ENGINE=MyISAM;

INSERT INTO plugin_flowview_devices (name, folder, port) VALUES ('Default', 'Router', 2055);

CREATE TABLE `plugin_flowview_queries` (
    `id` int(12) NOT NULL auto_increment,
    `name` varchar(255) NOT NULL,
    `device` varchar(32) NOT NULL,
    `startdate` varchar(32) NOT NULL,
    `starttime` varchar(32) NOT NULL,
    `enddate` varchar(32) NOT NULL,
    `endtime` varchar(32) NOT NULL,
    `tosfields` varchar(32) NOT NULL,
    `tcpflags` varchar(32) NOT NULL,
    `protocols` varchar(8) NOT NULL,
    `sourceip` varchar(255) NOT NULL,
    `sourceport` varchar(255) NOT NULL,
    `sourceinterface` varchar(64) NOT NULL,
    `sourceas` varchar(64) NOT NULL,
    `destip` varchar(255) NOT NULL,
    `destport` varchar(255) NOT NULL,
    `destinterface` varchar(64) NOT NULL,
    `destas` varchar(64) NOT NULL,
    `statistics` int(3) NOT NULL,
    `printed` int(3) NOT NULL,
    `includeif` int(2) NOT NULL,
    `sortfield` int(2) NOT NULL,
    `cutofflines` int(4) NOT NULL,
    `cutoffoctets` varchar(8) NOT NULL,
    `resolve` varchar(2) NOT NULL,
    PRIMARY KEY  (`id`),
    KEY `name` (`name`)
) ENGINE=MyISAM;

CREATE TABLE `plugin_flowview_schedules` (
    `id` int(12) NOT NULL auto_increment,
    `enabled` varchar(3) NOT NULL default 'on',
    `sendinterval` int(20) NOT NULL,
    `lastsent` int(20) NOT NULL,
    `start` datetime NOT NULL,
    `email` text NOT NULL,
    `savedquery` int(12) NOT NULL,
    PRIMARY KEY  (`id`),
    KEY `savedquery` (`savedquery`)
) ENGINE=MyISAM;

 

По большому счёту до установки плагина, нужно было изменить тип на ENGINE=MyISAM, но поскольку я этого не сделал, пришлось менять это уже в самой БД, через PHPmyAdmin.

 

 

Первый косяк удалён. Плывём дальше - Console -> Cacti Settings во вкладку Misc:

Тут меняем только Flows Directory и  DNS Server. Обращу внимание на то, что ВСЕ параметры должны быть заполнены правильно. Без этого работать плагин не будет. Сам лично столкнулся с не прописанным DNS Server. Процесс flow-tools не запускался.

Следующий шаг - это копирование скрипта из директории с плагином в /etc/init.d/ 

cp /usr/share/cacti/site/plugins/flowview/flow-capture /etc/init.d/

 Если Вы скачивали архив с плагином у меня, то исправлять в этом скрипте ничего не нужно. Если брали на сайте CACTI, то файл /usr/share/cacti/site/plugins/flowview/flow-capture (/etc/init.d/ flow-capture) нужно доработать. Выложу готовый вариант с исправлениями. Весь ошибочный код не удалён, а закомментирован:

nano /usr/share/cacti/site/plugins/flowview/flow-capture
#!/usr/bin/php
<?php
/*
# description: Start Flow-Capture
# chkconfig: 2345 95 00
*/
$cacti_base = '/usr/share/cacti/site';
include_once($cacti_base . '/include/global.php');
$tools_path = read_config_option("path_flowtools");
if (isset($_SERVER['argv'][1])) {
    switch (strtolower($_SERVER['argv'][1])) {
    case 'start':
        start();
        break;
    case 'stop':
        stop();
        break;
    case 'restart':
        restart();
        break;
    default:
        echo "Usage: /etc/init.d/flow-capture {start|stop|restart}\n";
        break;
    }
}
function start() {
    global $tools_path, $cacti_base;;
    echo "NOTE: Starting Flow Tools\n";
    $devices = db_fetch_assoc("SELECT * FROM plugin_flowview_devices");
    if (!empty($devices)) {
        $path = db_fetch_cell("SELECT value FROM `settings` WHERE name = 'path_flows_dir'");
        if ($path == '')
            break;
        if (substr($path, -1) == '/') {
            $path = substr($path, 0, -1);
        }
        foreach ($devices as $device) {
            $port   = $device['port'];
            $folder = $device['folder'];
            $nest   = $device['nesting'];
            $v      = $device['version'];
            $from   = $device['allowfrom'];
            $comp   = $device['compression'];
            $rotate = $device['rotation'];
            $expire = $device['expire'] * ($rotate + 1);
            if (!is_dir("$path/$folder")) {
                echo "NOTE: Making directory '$path/$folder'\n";
                mkdir("$path/$folder");
            }
            if (is_dir("$path/$folder")) {
#                echo "NOTE: Launching flow-capture as '$tools_path/flow-capture -w $path/$folder 0/$from/$port -S5 -V$v -z $comp -n $rotate -e $expire -N $nest'\n";
#                shell_exec($tools_path . "/flow-capture -w $path/$folder 0/$from/$port -S5 -V$v -z $comp -n $rotate -e $expire -N $nest");
echo "NOTE: Launching flow-capture as '$tools_path/flow-capture -S5 -V$v -z $comp -n $rotate -e $expire -N $nest -w $path/$folder 0/$from/$port'\n";
shell_exec($tools_path . "/flow-capture -S5 -V$v -z $comp -n $rotate -e $expire -N $nest -w $path/$folder 0/$from/$port ");            
}
        }
    }else{
        echo "WARNING: No flows configured\n";
    }            
}
function stop() {
    global $tools_path, $cacti_base;;

    echo "NOTE: Stopping Flow Tools\n";
    $devices = db_fetch_assoc("SELECT * FROM plugin_flowview_devices");
    if (!empty($devices)) {
#        shell_exec('killall -9 ' . $tools_path . '/flow-capture');
shell_exec('killall -9 flow-capture');
    }            
}
function restart() {
    stop();
    start();

 

Дальше переходим к конфигурации самой библиотеки flow-tools:

nano /etc/flow-tools/flow-capture.conf

Для каждого устройства с которого снимается netflow нужно добавлять свою строку конфигурации.

Суть параметров в моём примере -w /var/netflow/flows/completed/zentyal -n 275 -N 3 0/192.168.50.1/2255

-w - куда пишем,

-n -  количество ротаций файлов с записями о соединениях в сутки,

-N - структура директорий которая будет создаваться при записи файлов с соединениями. В моём случае YYYY/YYYY-MM/YYYY-MM-DD/flow-file.

Вроде бы всё... Идём в

 

 

Пишем имя устройства, директорию в /var/netflow/flows/completed/  в которой создастся папка с датой и flow-файлом, IP адрес устройства, порт на котором принимается netflow, формат вложенных папок с датами, уровень сжатия файлов, как часто создавать flow-файл и за какой период хранить flow-файлы. Сохраняем. Если Вы видите такую картину:


я про кавычки в которые взяты некоторые параметры, то удалить их можно в БД.

 

Как-то в процессе изучения установки этого плагина у меня получалось сделать так, что бы устройства создавались без кавычек, но я этого не запомнил. Если кто знает, напишите в коментариях. Осталось только запустить скрипт, который создаст соответствующие директории и начнёт принимать netflow.

/etc/init.d/flow-capture start

В идеале должны получить сообщение:

NOTE: Starting Flow Tools
NOTE: Launching flow-capture as '/usr/bin/flow-capture -S5 -V5 -z 0 -n 1439 -e 525600 -N -1 -w /var/netflow/flows/completed/zentyal 0/192.168.50.1/2255'

В этом случае можно смело идти в директорию в netflow и проверить наличие flow-файлов. Если файлы есть, то можно идти:


 

 

В этом разделе выбираем устройство, протоколы, адреса источников и назначения и др. параметры и нажимаем View. Результат:

 

 

Комментарии  
0 # artem 10.10.2016 11:39
добрый день, подскажите где взять таблицу plugin_flowview_port s в архиве ее нет
Сообщить модератору
-2 # Admin 18.10.2016 17:44
Добрый! Таблица в файле plugin_flowview_port s.sql.
Сообщить модератору

Комментарии отключены