Cacti - The complete RRDTool-based solution

Блог им. dreamhunter
Предыстория: О cacti я слышал много положительных отзывов. Эта статья написана после серии статей «Netflow-искания» поскольку получилось слишком много оффтоп-информации, которая могла бы оказаться полезной.

Возможности:
1) Сбор данных по SNMP, NetFlow, Syslog и ciscoconfigs с устройств сети;
2) Анализ собранных данных и их отображение в виде графиков;
3) Построение карт сетей;
4) Мониторинг доступности устройств.

Задача: Организовать мониторинг сети на основе программного комплекса Cacti.

Имеем: Сервер с установленными FreeBSD 9.1, Apache 2.2, PHP 5.3, MySQL 5.5, Flow-Tools 0.68.

Основной модуль Cacti


Установка

Устанавливать будем цивилизованным способом — из портов:
# whereis cacti
cacti: /usr/ports/net-mgmt/cacti
#cd /usr/ports/net-mgmt/cacti
make install clean

* * * * * * * *

Cacti is now installed. If you intall it for the first time,
you may have to follow this steps to make it work correctly:

1. Create the MySQL database:
# mysqladmin --user=root create cacti
2. Create a mysql user/password for cacti:
   (change user and/or password if required)
# echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser'; FLUSH PRIVILEGES;" | mysql
3. Import the default cacti database:
# mysql cacti < /usr/local/share/cacti/cacti.sql
4. Edit /usr/local/share/cacti/include/config.php.
5. Add the line to cron jobs with the command:
# crontab -u cacti -e
*/5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1
6. Add alias in apache config for the cacti dir:
Alias /cacti "/usr/local/share/cacti/"
7. Be sure apache gives an access to the directory ('Allow from' keywords).
8. Open a cacti login page in your web browser and login with admin/admin.

If you update cacti, open a login page, an updating process
will start automatically.

Веб-содержимое нашего cacti установилось в директорию "/usr/local/share/cacti". Теперь нам необходимо настроить ПО и создать БД.

Настройка Apache
Я настроил работу cacti через SSL. По сути это не важно — тут вам решать.
Минимум для настройки httpd.conf:
LoadModule alias_module libexec/apache22/mod_alias.so
LoadModule dir_module libexec/apache22/mod_dir.so
LoadModule php5_module libexec/apache22/libphp5.so

<IfModule mod_php5.c>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
</IfModule>

Alias /cacti /usr/local/share/cacti

<Directory "/usr/local/share/cacti">
    Order deny,allow
    Allow from all
</Directory>

<IfModule dir_module>
    DirectoryIndex index.php index.htm index.html
</IfModule>

То есть кактус будет доступен на вашем веб-сервере по адресу http(s)://servername/cacti/

Создание базы данных
# mysqladmin --user=root -p create cacti
# echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactiuser'; FLUSH PRIVILEGES;" | mysql -p
# mysql -p cacti < /usr/local/share/cacti/cacti.sql
# crontab -u cacti -e
*/5 * * * * /usr/local/bin/php /usr/local/share/cacti/poller.php > /dev/null 2>&1
:wq

В командах mysql и mysqladmin я пользовался ключом -p (запускать с паролем), поскольку у меня запрещено работать без пароля.

Настройка PHP
Я попытался войти на страничку, которая мне выдала массу предупреждений с руганью на временные зоны. Оказывается требуется прописать временную зону в /usr/local/etc/php.ini
date.timezone = имя_зоны

имя_зоны я скопировал с выданного предупреждения. Также можно попытаться выяснить тут. После поправки мне пришлось перезапустить Апач, потому что иначе ничего не менялось (варны продолжали сыпаться).

Первый запуск
После настройки появился «мастер», который:
1) спросил ставлю ли я систему с нуля или это апгрейд более старой версии?
2) Предложил проверить пути к ресурсам.
Так же он предупредил, что настройки будут сохранены и больше окошко беспокоить не будет (после нажатия кнопки «finish»). Все — видим окно с логином. Пользователь/пароль должны быть admin/admin. После входа сразу попросят сменить пароль. Так что не пугаемся, пишем уже нужный нам.

Обзор UI
Итак мы имеем вполне себе дружественный веб-интерфейс. Если честно, когда я добавил один из своих маршрутизаторов и увидел, что начали рисоваться красивые графики, меня это повергло в дикий восторг. Базовая часть работает правильно и особых проблем с установкой и настройкой не возникло. Это значит, что cacti доступен практически любому администратору, который владеет базовыми навыками в области FreeBSD и сетевых технологий.
Начальная конфигурация включает в себя сбор и отображение данных по SNMP. Если мы хотим чего то большего — необходимо установить plugins.

Plugins

Cacti — модульное решение, которое вы можете «заточить» под свои нужды. Список доступных модулей вы можете посмотреть здесь. Мы рассмотрим основные.

Plugin architecture
Что бы вообще можно было устанавливать какие-либо модули cacti, нам необходимо установить PluginArchitecture.

# fetch http://www.cacti.net/downloads/pia/cacti-plugin-0.8.7h-PA-v3.0.tar.gz
# tar -xf cacti-plugin-0.8.7h-PA-v3.0.tar.gz
# cp cacti-plugin-arch/* /usr/local/share/cacti
# cd /usr/local/share/cacti
# patch -p1 -N < cacti-plugin-0.8.7h-PA-v3.0.diff
# mysql -p cacti < pa.sql

Мы выполнили действия прописанные в инструкциях по установке. Что характерно, у меня скрипт ругнулся на то, что таблицы уже все есть. Проверил — и правда так.
Далее редактируем файл конфигурации: /usr/local/share/cacti/include/config.php
/* make sure these values refect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactiuser";
$database_port = "3306";
$database_ssl = false;

/* load up old style plugins here */

$plugins = array();
$plugins[] = 'flowview';

Все, ниже мы можем прописывать наши модули. $plugins[] = 'flowview'; — пример подключения плагина.

plugin:flowview

Cacti имеет в своем арсенале plugin — flowviwer. Качаем и смотрим:
# fetch http://docs.cacti.net/_media/plugin:flowview-v1.1-1.tgz
# tar -xf plugin:flowview-v1.1-1.tgz -C /usr/local/share/cacti/plugins
# less /usr/local/share/cacti/plugins/flowview/README
видим в папке два sql скрипта flowview.sql и plugin_flowview_ports.sql
первый почему то ставится автоматом, а второй - нет. На всякий случай поставим:
# mysql -p cacti < plugin_flowview_ports.sql

В выводе нас интересует:
----[ Installation

    First, make sure you have the plugin architecture installed.

    http://cactiusers.org/wiki/PluginArchitectureInstall

    Install just like any other plugin, just throw it in the plugin directory,
    in a folder called flowview.
    Edit your includes/config.php and add it to your $plugins list, and you are rolling

    http://cactiusers.org/wiki/PluginsInstall


Смотрим на web-интерфейсе появилась секция «Plugin Management» (вкладка Console). Открыв, видим плагин и статус «Not installed». В левой части сточки видим значок со стрелочкой. Наводим — появляется подсказка «Install» — это оно. Жмем — статус меняестся и появляется еще один значок — Enable (lol). Жмем — появляется вкладка «flows». Похоже мы на верном пути.

Грабли

Грабли, которые меня ждали — неправильно указанные пути. После добавления устройства и попытки посмотреть данные, мне сказали что неправильно указан путь к бинарникам flow-tools. Вместо /usr/bin они лежат в /usr/local/bin; плюс ко всему пришлось поменять путь к файлам коллектора netflow. У меня они в /var/db/flows
В общем то это не большие проблемы. Большие проблемы пошли потом, когда я попытался воспользоваться этим благом…
Поскольку это всего лишь плагин и делал его судя по всему один человек (Jimmy Conner), полезли косячки:
1) Последней версии flow-tools не нравится синтаксис скрипта для запуска flow-capture, который лежит в папке плагина «flowview», а именно:
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 ");

То есть необходимо было поменять местами параметры. Чей косяк — наверное все же создателя плагина. Потому что он по сути пользуется flow-tools, а не наоборот, потому должен чтить синтаксис.
Еще следует отметить то, что этот скрипт вам не сможет остановить процессы, а значит и перезапустить.
Все это происходит из-за строчки:
shell_exec('killall -9 ' . $tools_path . '/flow-capture');

Опять же не соблюден синтаксис. Меняем на:
shell_exec('killall -9 flow-capture');

и все работает.
Так же мне по глазам резануло то, что скрипт запуска, который я должен запулить в автозапуск написан на PHP. Это хороший язык, но для запускающего скрипта можно было выбрать другой. Стоит отметить, что в README плагина так и написано «bug: flow-capture script incomplete», так что будем считать, что пишу я это для истории и автор очень скоро исправится.
2) В установке по умолчанию не работает правильно генерация отчетов. Вероятней всего опять по той же причине, что и в первом пункте — синтаксис.
Смотрим…
Пока я тренировался с flow-tools, я имел большие проблемы с указанием интервалов во flow-cat. Ну что ж, видимо судьба мне с этим разобраться. После долгих исканий выяснилось, что правильный и нужный синтаксис такой:
flow-cat -t "mm/dd/YYYY hh:mm:ss" -T "mm/dd/YYYY HH:mm:ss" /var/db/flows/r1/2013/2013-01/* |  flow-print -f5 > temp

Вооружившись знаниями смотрим и видим, что отчет «изымается» в подключаемом модуле "%cacti%/plugins/flowview/functions.php" в функции «function createfilter(&$sessionid='')». Если в краце, то там сперва генерируется строка из трех китов «flow-cat», «flow-nfilter» (ухты, оказывается два вида фильтрации есть!) и «flow-stat».
Я нашел (да и вы можете, если интересно) место, где сформированная строка выполняется:
/* Run the command */
$output = shell_exec($flow_command);

допишем чуть ниже:
echo ($output);
echo ($flow_command);

и видим, что $flow_command сгенерирована правильно, а вот на выходе ничего нет. После долгих раздумий и поисков пришел к выводу, что таки апач, а точней пользователь www не может выполнить поставленную задачу.
Окунаемся в проблему с головой и видим, что есть намек на два пути развития событий:
Apache mod_suexec — модуль Apache, который запускает нужный виртуалхост под нужным пользователем. В общем намек на песочницу.
suPHP — порт для запуска PHP с намеком на ту же самую песочницу.
Я не буду вам рассказывать, какие дикие оргии были у меня с этими двумя «решениями». Опишу только в общих чертах:
Apache mod_suexec не совсем песочница. Может он и запускает виртуалхост в ней, но все остальные он запустит там же. Грубо говоря с этим решением можно заточить ваш сервер под сугубо определенную задачу, но пилить вам его придется долго и метод сбора и компиляции весьма не тривиален для простого админа. И в итоге вы не сможете создать еще один виртуалхост с другим пользователем, который сможет выполнять какие то другие задачи. Дело в том, что mod_suexec пользуется едиными переменными, такими как например корневой каталог. В неумелых руках вы как минимум поимеете брешь в безопасности. (хотя она и так у вас будет)
suPHP — этот порт можно заточить. Ключевой момент — собрать в режиме paranoid, иначе вы не сможете указать пользователя-владельца переменной suPHP_UserGroup. В результате кроме гемора и радикулита вы получите более менее вменяемое подобие виртуалхоста с некоторыми правами. Это опять же чревато проблемами безопасности. Увы, но с этим мы будем сталкиваться все время.

Итак:
Если честно я уже отчаялся, когда разобрался со всей темой. Меня не радовал выбор: Либо я лишаю свой сервер универсальности, либо ставлю suPHP, у которого между прочим тоже свои проблемы. В любом случае гемор я уже поимел, а это печально, товарищи.

И тут я вспомнил про sudo...
# whereis sudo
sudo: /usr/local/bin/sudo
# cd /usr/local/bin/sudo
# make install clean
echo "www имяхоста = (flowtools) NOPASSWD: EXEC: /bin/sh -c /usr/local/bin/flow-cat -t * | /usr/local/bin/flow-nfilter -f * | /usr/local/bin/flow-*" >> /usr/local/etc/sudoers

также добавляем строчку в файл %cacti%/plugins/flowview/functions.php:

/* Run the command */
$flow_command = "sudo -u flowtools sh -c '" . $flow_command . "'"; //<<<----- вот эта строчка
$output = shell_exec($flow_command);

Теперь наш плагин будет работать. Этим строчкам я посвятил несколько часов своей жизни. Буду рад если ваши часы будут сэкономлены.
Лично у меня есть много нареканий в области безопасности и работы модуля в целом:
1) Генерация отчета занимает много ресурсов, потому я советовал бы прикрутить капчу. Иначе радостные админы запросто могут устроить DDOS.
2) В версии Flowview 1.1 рисовалка графиков врет и показывает показания в 10 раз больше. Судя по всему проблема в скомпилированном .swf файле. В любом случае неприятно и ненаглядно.
3) Я хоть и постарался ограничить sudo, но все-же проблема безопасности остается. Кстати это стало модно «сваливать» ответственность на службы безопасности. Я вас уверяю, это все равно что понадеяться на русский авось. Они проходят курсы, работают, изображают из себя строгих парней, но по сути мало что могут сделать. Кроме того sudo они точно не учат.
4) Нужен напильник. make install clean все еще недопилен.
5) Проблемы с потребляемыми ресурсами. Я не буду вспоминать, что протокол NetFlow сам по себе очень прожорливый и требует много места на диске. Анализатор потребляет действительно много ресурсов. Причем каждый раз когда вам необходимо сгенерировать отчет, он будет генерироваться заново.

plugin:weathermap
Это модуль для рисования красивых карт вашей сети. К сожалению во многих местах не допилена и не снабжена комментариями. Но… Почему бы не попробовать? Мы и так далеко зашли.


# fetch http://www.network-weathermap.com/files/php-weathermap-0.97a.zip
# unzip php-weathermap-0.97a.zip
# cp weathermap %cacti%/plugins


добавляем в %cacti%/include/config.php строчку $plugins[] = 'weathermap'; (в списке плагинов).
Входим в консоль управления cacti — plugins, видим наш плагин. Включаем — появляется вкладка.
При переходе на вкладку сразу видим ошибку «Warning: Invalid argument supplied for foreach() in %cacti%/plugins/weathermap/weathermap-cacti-plugin.php on line 824»
При детальном осмотре страницы так же видим ссылочку на редактор. Если пытаемся ей воспользоваться, выдастся предупреждение, что необходимо поправить параметр в файле "%cacti%/plugins/weathermap/editor.php" $ENABLED=false; => $ENABLED=true;
Пробуем обновить страничку редактора — похоже что то заработало. Сразу же видим предупреждение, что папка с конфигами недоступна для записи.
# chown -R www:www %cacti%/plugins/weathermap/configs

Смотрим дальше: после создания проекта появляется страничка с ошибкой «Deprecated: Function split() is deprecated in %cacti%/plugins/weathermap/editor.php on line 32». Googlим и видим, что рекоммендуют заменить split на explode. Делаем — вроде продвигается дело. Появилось поле для рисования. Но увы на этом дело не кончается. Нарисовать кое-что мы можем, но как выяснится скорей всего плагин не умеет правильно устанавливаться и нам придется допиливать его ручками.
Для начала из setup.php выколупываем SQL скрипт для создания таблиц базы данных:
CREATE TABLE weathermap_maps (
 id int(11) NOT NULL auto_increment,
 sortorder int(11) NOT NULL default 0,
 group_id int(11) NOT NULL default 1,
 active set('on','off') NOT NULL default 'on',
 configfile text NOT NULL,
 imagefile text NOT NULL,
 htmlfile text NOT NULL,
 titlecache text NOT NULL,
 filehash varchar (40) NOT NULL default '',
 warncount int(11) NOT NULL default 0,
 config text NOT NULL default '',
 thumb_width int(11) NOT NULL default 0,
 thumb_height int(11) NOT NULL default 0,
 schedule varchar(32) NOT NULL default '*',
 archiving set('on','off') NOT NULL default 'off',
 PRIMARY KEY  (id)
) ENGINE=MyISAM;

CREATE TABLE weathermap_auth (
 userid mediumint(9) NOT NULL default '0',
 mapid int(11) NOT NULL default '0'
) ENGINE=MyISAM;

CREATE TABLE  weathermap_groups (
 `id` INT(11) NOT NULL auto_increment,
 `name` VARCHAR( 128 ) NOT NULL default '',
 `sortorder` INT(11) NOT NULL default 0,
 PRIMARY KEY (id)
) ENGINE=MyISAM;

INSERT INTO weathermap_groups (id,name,sortorder) VALUES (1,'Weathermaps',1);

CREATE TABLE weathermap_settings (
 id int(11) NOT NULL auto_increment,
 mapid int(11) NOT NULL default '0',
 groupid int(11) NOT NULL default '0',
 optname varchar(128) NOT NULL default '',
 optvalue varchar(128) NOT NULL default '',
 PRIMARY KEY  (id)
) ENGINE=MyISAM;

CREATE TABLE IF NOT EXISTS weathermap_data (
 id int(11) NOT NULL auto_increment,
 rrdfile varchar(255) NOT NULL,
 data_source_name varchar(19) NOT NULL,
 last_time int(11) NOT NULL,
 last_value varchar(255) NOT NULL,
 last_calc varchar(255) NOT NULL,
 sequence int(11) NOT NULL,
 local_data_id int(11) NOT NULL DEFAULT 0,
 PRIMARY KEY  (id),
 KEY rrdfile (rrdfile),
 KEY local_data_id (local_data_id),
 KEY data_source_name (data_source_name)
) ENGINE=MyISAM;

И сохраняем его например под именем weathermap.sql
Далее скармливаем его самому MySQLу:
# mysql -p cacti < weathermap.sql

После этого на консоли пропадают ошибки (не все, но самые нехорошие). К сожалению этого все еще мало.
Выдаем права:
# chown -R cacti:www %cacti%/plugins/weathermap/output
# chmod -R 777 %cacti%/plugins/weathermap/output

Вот теперь мы можем слегка успокоиться. Все остальные ошибки вы найдете в Console->System Utilities->View Cacti Log File. У вас будут проблемы с «легендой карт». Я советую вот такую:
KEYPOS DEFAULT 0 0 Traffic Load
KEYTEXTCOLOR 0 0 0
KEYOUTLINECOLOR 0 0 0
KEYBGCOLOR 255 255 255
BGCOLOR 255 255 255
TITLECOLOR 0 0 0
TIMECOLOR 0 0 0
SCALE DEFAULT 0 1   255 255 255
SCALE DEFAULT 1 25   220 255 255
SCALE DEFAULT 25 60   180 255 180
SCALE DEFAULT 60 75   240 240 0
SCALE DEFAULT 75 85   255 192 0
SCALE DEFAULT 85 105   255 0 0


plugin:routerconfigs
Этот плагин необходим для резервного копирования конфигов ваших устройств Cisco (коммутаторов/маршрутизаторов). Вся суть сводится к подаче команды о резервном копировании с устройства на tftp сервер. Оттуда конфиг укладывается в базу. Опять же мне не очень нравится брешь в безопасности, но об этом позже.

Для начала настроим tftp. Я предпочитаю такие вещи делать через inetd:
# echo 'inetd_enable="YES"' >> /etc/rc.conf
# echo 'tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -w -s /usr/home/tftpboot' >> /etc/inetd.conf
# mkdir /usr/home/tftpboot
# killall -1 inetd
No matching processes were found 
процесс не запущен, значит выполняем:
# inetd


Теперь установим сам плагин:
# fetch plugin:routerconfigs-v0.3-1.tgz
# tar -xf plugin:routerconfigs-v0.3-1.tgz -C /usr/local/share/cacti/plugins

По логике мы должны создать базу данных, воспользовавшись SQL скриптом routerconfigs.sql в каталоге плагина. Но как всегда все ровно не проходит и мы сталкиваемся с неправильным синтаксисом в последней таблице:
CREATE TABLE plugin_routerconfigs_devicetypes (
  id int(12) NOT NULL auto_increment,
  `name` varchar(128) NOT NULL,
  username varchar(64) NOT NULL default 'sername:',
  `password` varchar(128) NOT NULL default 'assword:',
  copytftp varchar(64) NOT NULL default 'copy tftp run',
  version varchar(64) NOT NULL default 'show version',
  confirm varchar(64) NOT NULL default '',
  forceconfirm int(1) NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Редактируем и меняем TYPE=MyISAM; на ENGINE=MyISAM; Теперь мы можем выполнить скрипт.
# mysql -p cacti < routerconfigs.sql


После активации плагина в консоли cacti вы увидите новую секцию «Router Configs» (в этой же консоли). Войдя в нее вы найдете все необходимое для создания backup-в ваших конфигураций. Так же не забудьте войти в Settings консоли для того, что бы указать путь, куда будут складываться файлы (Вкладка Misc).

Безопасность

Проблема:
Мне не очень нравится tftp протокол. Во-первых к tftp имеют доступ все, кому не лень. То есть ваши конфиги можно с легкостью утянуть для дальнейшего анализа Во вторых tftp это протокол с негарантированной доставкой. То есть будут проблемы с целостностью информации.

Мое решение:
Современное оборудование отлично работает через ftp. Я решил «научить» систему работать через ftp с авторизацией.
Сперва на основе routerconfigs.sql создадим новый ftpaddon.sql скрипт:
INSERT INTO plugin_routerconfigs_devicetypes (id, name, username, password, copytftp, version, confirm, forceconfirm)
VALUES (3, 'Cisco IOS (ftp)', 'sername:', 'assword:', 'copy run ftp://ftpbackup:back@', 'show version', 'y', 0);

Затем «скормим» его нашему MySQL:
# mysql -p cacti < ftpaddon.sql

Теперь наш plugin сможет направлять правильные команды нашему оборудованию что бы отправлять конфиги с пользователем ftpbackup и паролем back. Осталось установить и настроить ftp сервер. Мое личное предпочтение — proftpd через inetd.
# whereis proftpd
proftpd: /usr/local/sbin/proftpd
# cd /usr/local/sbin/proftpd
# make install clean

Добавим/заменим строчки в /usr/local/etc/proftpd.conf
ServerType    inetd

<Anonymous ~ftpbackup>
   User                 ftpbackup
   Group                ftp

  MaxClients                    20

  RequireValidShell             off
  AnonRequirePassword           off

  ### Limit WRITE everywhere in the anonymous chroot
   <Limit WRITE>
     AllowAll
   </Limit>
</Anonymous>

Добавляем в inetd
# echo "ftp     stream  tcp     nowait  root    /usr/local/sbin/proftpd proftpd -c /usr/local/etc/proftpd.conf" >> /etc/inetd.conf
# killall -SIGHUP inetd

Осталось добавить пользователя ftpbackup и задать его пароль:
# pw useradd -n ftpbackup -g frp -d /usr/home/tftpboot -s /sbin/nologin

… да, мы указали ту же папку что и для tftp. Отключать сервер tftp или нет — ваше дело, а вот плагину важно что бы все было в одном каталоге.
Ну вот видите, как все было просто?

Выводы:


Cacti — бесплатный пакет программ, который имеет отличный инструментарий для мониторинга и диагностики сети. К сожалению это решение, которое нельзя просто так взять и установить. Вам придется потратить время на его доработку, а если быть точнее — на доработку плагинов (ибо, еще раз повторюсь, базовая часть работает без проблем). С другой стороны — а вдруг начальство премию даст?

P.S. Уважаемые читатели! Я вас очень прошу оценивать мои статьи. Причем мне очень важна ваша конструктивная критика. Если вы поставите отрицательную оценку, то я вас прошу, обязательно напишите в комментариях ваши замечания по статье. Если же вы хотите меня похвалить — достаточно просто нажать лайк.

P.S.P.S. Это оригинальная статья и может быть источником для репостов. Просьба делать пометку со сылкой на источник.

Галерея:
Основной модуль graphs
FlowViwer
Weathermap

10 комментариев

avatar
Dude, you are awesome. I followed the part about the followview plugin and it… worked. Almost in my case. Something you might want to add. If you have active SELINUX (as it is in my case) the whole thing is not going to work unless:

My system is CentOS 6.3 and the flow directory there is /var/flow-tools but whatever it is will have to make that change in order to start working.

In order the plugin to be able to be installed have to be changed to

[root@blah var]# ls -Z /usr/share/cacti/plugins
drwxr-xr-x. root root unconfined_u:object_r:httpd_cache_t:s0 flowview

The flow directory to

[root@blah var]# ls -lZ
drwxr-xr-x. flow-tools flow-tools system_u:object_r:httpd_sys_content_t:s0 flow-tools

otherwise there is nothing on the screen.

Again, thank you for all you spent time, researched and wrote down. No one did that or at least I can't find any normal instruction of «how the h*** to install that plugin».

I can read, speak and write in russian, I am just not that good, so I use English. If you don't mind I rather translate your guide in English and post it but it is up to you.
avatar
lol. You're welcome.
avatar
btw: Of course you can repost it in English. My articles are free for everyone.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.