From: Кропачев Артемий <neon@insysnet.ru.>
Newsgroups: email
Date: Mon, 1 Sep 2006 14:31:37 +0000 (UTC)
Subject: Мониторинг интерфейсов в сети с помощью netmond и rrdtool
Введение
С ростом размера компьютерной сети, увеличением количества работающих
серверов и сервисов, увеличением числа обслуживаемых клиентов и
пользователей, а так же увеличением их критичности всё более актуальной
задачей является необходимость своевременного устранения сбоев, а,
следовательно, своевременного их нахождения, другими словами -
мониторинг сети.
На мой взгляд, наиболее часто встречающимися задачами мониторинга
локальной сети являются:
* определение доступности/недоступности оборудования, серверов и сервисов
* проверка каналов передачи данных (доступность, загруженность)
* сохранение и просмотр статистики на интерфейсах коммутаторов и серверов (байты, пакеты и ошибки)
* сохранение и просмотр различных параметров сервисов и объектов
(например, загрузка CPU маршрутизаторов, размер свободного дискового
пространства на файловых серверах, количество подключённых модемных
пользователей на Cisco и другие).
Существует большое количество уже готовых систем мониторинга: nagios,
mrtg, zabbix,cacti. Настройка "полной" системы мониторинга является
достаточно сложной задачей и выходит за рамки данной статьи. Любой
системный администратор рано или поздно и ввиду различных задач
сталкивается с необходимостью анализа закономерностей сетевого трафика в
течении часов, суток, месяцев и т.п. Пожалуй, наиболее удобным способом
является просмотр графиков пакетных и байтовых нагрузок на каналах.
Данная статья ставит своей задачей донести до читателя мой личный опыт
по отображению статистики на интерфейсах серверов и оборудования в
наглядном виде (графики). Эта проблема может быть решена большим
количеством способов (например cacti, mrtg), но я реализовал именно
этот, чем и хочу поделиться.
Используемое программное обеспечение
Для решения поставленной задачи потребуются:
- netmond - сердце системы, выполняет опрос объектов
Домашняя страница производителя RINET Software Team находится по адресу http://soft.risp.ru/ ,
там имеется очень хорошая документация о продукте на русском языке.
Netmond представляет из себя некий серверный инструмент, позволяющий
собирать данные со всех объектов и сервисов сети в одном месте (сервере
мониторинга) и в удобном для использования виде (в нашем случае это
rrdtool, возможно хранить данные в SQL базах данных)
- rrdtool - средство сохранения (база данных) и отображения статистики (утилиты построения изображений)
За информацией о rrdtool можно обращаться на сайт http://www.rrdtool.org.
Есть очень неплохая статья про работу с этой базой http://www.bog.pp.ru/work/rrdtool.html
на русском языке. В man страницах подробно описаны все утилиты работы
см. man rrdtool. Стоит более подробно ознакомится с man страницами по
rrdcreate, rrdupdate, rrdgraph.
- Perl - скрипты для сохранения и отображения данных
- Apache - веб сервер
- Пакет Net-SNMP - для удобства проверки работы протокола snmp
Netmond будет выполнять роль системы получения данных по протоколу SNMP,
а так же будет сохранять данные загрузки интерфейсов в базу rrdtool
через внешний скрипт на Perl. Работа с сохранёнными данными возможна из
командной строки и средствами скриптов. Для удобства использования
написан скрипт отображения результатов в Web интерфейсе.
Настройка системы мониторинга производилась на базе операционной системы
FreeBSD (4.x, 5.x, 6.x), но всё ниже написанное, думаю, можно будет
перенести на Linux (изменится в основном способ установки ПО и место
размещения конфигурационных файлов).
Установка
Чтобы приступить к настройке системы ставим необходимое программное
обеспечение. Вся установка велась из портов FreeBSD. Если у кого-то есть
желание ставить из исходников или пакетов - пожалуйста.
Perl:
# cd /usr/ports/lang/perl5.8 && make install clean
Ставим rrdtool (на момент написания статьи версия 1.2.15):
# cd /usr/ports/net/rrdtool && make install clean
Ставим netmond:
# cd /usr/ports/net-mgmt/netmond && make install clean
Пакет Net-SNMP:
# cd /usr/ports/net-mgmt/net-snmp && make install clean
Ставим, настраиваем и запускаем www сервер apache.
Настройка netmond
------------------
Конфигурационный файл netmond лежит в файле
/usr/local/etc/netmon.conf.sample. Переименовываем его в netmon.conf и
редактируем:
# mv /usr/local/etc/netmon.conf.sample /usr/local/etc/netmon.conf
# vi /usr/local/etc/netmon.conf
Ниже будет дан пример конфигурационного файла с описанием.
RootDir "/var/netmon" # Каталог для сохранения данных
Polling 60 # Время опроса объектов мониторинга (в секундах)
Timeout 2 # Время ожидания ответа на запрос (в секундах)
Retries 3 # Количество переповторов
Saving 60 # Интервал периодического сохранения данных(60 секунд)
TimeFmt "%H:%M:%S" # Формат времени
# Группы доступа к netstate
Group "local" {
Permit "^localhost$"
Permit "^127\.0\.0\.1$"
Deny ".*"
}
Group "remote" {
Permit "^172\.21\.81\."
}
NetState {
Port 3333
# Порт netstate сервера
Timeout 30
Group "local"
Group "remote"
}
Save "make_dir" {
# метод сохранения для создания каталога
File ""
When "0" 0
}
Save "save_rrd_if" {
# Определяем метод сохранения статистики интерфейсов в rrd базу
Pipe "/usr/local/sbin/rrdsave"
# Вызываем скрипт /usr/local/sbin/rrdsave и передаём ему данные на стандартный вход (директива Pipe)
# Возможен вариант с Exec тогда данные будут переданы в командной строке
# После директивы Data идут данные, можно писать с новой строки в кавычках
# Передаём разницу показателей счётчиков байт, много- и моноадресных пакетов, ошибок, дропов на
# интерфейсе, для которого данный метод сохранения прописан в разделе объектов мониторинга
Data
"$DATADIR/rrdintn"
"60n"
"RRA:AVERAGE:0.5:1:10080 RRA:AVERAGE:0.5:5:10080 RRA:AVERAGE:0.5:60:10080 RRA:AVERAGE:0.5:3600:10080n"
"${ifOperStatus}:ifoperstatus:GAUGE:600:0:1.25n"
"${ifInOctets.delta}:ifinoctets:GAUGE:600:0:Un"
"${ifOutOctets.delta}:ifoutoctets:GAUGE:600:0:Un"
"${ifInErrors.delta}:ifinerrors:GAUGE:600:0:Un"
"${ifOutErrors.delta}:ifouterrors:GAUGE:600:0:Un"
"${ifInDrops.delta}:ifindrops:GAUGE:600:0:Un"
"${ifOutDrops.delta}:ifoutdrops:GAUGE:600:0:Un"
"${ifInUcastPkts.delta}:ifinucastpkts:GAUGE:600:0:Un"
"${ifOutUcastPkts.delta}:ifoutucastpkts:GAUGE:600:0:Un"
"${ifInNUcastPkts.delta}:ifinncastpkts:GAUGE:600:0:Un"
"${ifOutNUcastPkts.delta}:ifoutncastpkts:GAUGE:600:0:U"
}
# ****Здесь начинается раздел описания объектов мониторинга********
Object "Cisco_catalyst" {
# Определяем объект мониторинга - коммутатор Cisco
Address "172.21.80.11" # Адрес, по которому будем опрашивать
Method router "public"
# Определяем стандартный метод опроса router с известной строкой community
Save "make_dir"
Interface "FastEthernet0/1" {
# Определяем интерфейс на коммутаторе по его ifName
# Предопределяем методы сохранения данных на данном интерфейсе
# первый метод нужен для определения переменной DATATDIR
# Второй выполняет сохранение данных
Save "make_dir"
Save "save_rrd_if"
}
Interface 2 {
# Определяем интерфейс по значению ifIndex (по номеру)
Save "make_dir"
Save "save_rrd_if"
}
}
Object "Server" {
Address "172.21.8.1"
Method router "mysnmpcommunity"
Save "make_dir"
Interface "fxp0" {
Save "make_dir"
Save "save_rrd_if"
}
Interface "fxp1"{
Save "make_dir"
Save "save_rrd_if"
}
Interface "em0"{
Save "make_dir"
Save "save_rrd_if"
}
}
Структура конфигурационного файла подробно описана на сайте
производителя, я остановлюсь лишь на нескольких важных деталях. Весь
конфигурационный файл состоит из 5 основных частей:
1. Установка глобальных переменных.
2. Параметры работы netstate протокола.
3. Пользовательские методы опроса объектов и сервисов (в приведённом конфигурационном файле не используются)
4. Пользовательские методы сохранения данных.
5. Раздел описания объектов, сервисов и интерфейсов мониторинга.
Параметр Saving изменён с 300 на 60. Необходимо для правильного
сохранения минутных статистик в базу rrdtool. Переменная RootDir
содержит путь до каталога куда netmond будет сохранять полученные данные
прописанными методами сохранения. Следует предусмотреть достаточный
объём свободного места на разделе (Файл rrdtool для одного интерфейса в
нашем случае будет занимать порядка 3,5 Мб).
В примере конфига добавлено для примера два объекта мониторинга:
коммутатор Cisco и сервер на базе FreeBSD. В свойствах объекта
мониторинга задаётся его IP адрес, метод опроса, и методы сохранения
данных. Мы используем встроенный метод опроса router, который считывает
по SNMP статистику с интерфейсов и некоторую другую информацию. Методу
передаётся 1 параметр (выражение в кавычках после названия метода)-
строка community (что то типа пароля для доступа к данным по SNMP).
В параметрах объектов описано так несколько интерфейсов: один по
названию (по IfName), второй по номеру (по IfIndex). Кому как удобнее
пользоваться. Например, при установке службы SNMP в MS Windows у
интерфейсов вообще ifName отсутствует, так что приходится пользоваться
только вторым способом.
Для каждого интерфейса прописано 2 метода сохранения данных: "make_dir"
и "save_rrd_if".
Метод сохранения данных "save_rrd_if" передаёт данные собранные
встроенным методом опроса "router" (показатели счётчиков байт, пакетов,
дропов, ошибок), имя файла rrdtool базы куда надо данные поместить
(берётся из переменной netmond "DATADIR"), а так же параметры базы
rrdtool необходимые для её создания и последующего обновления на вход
скрипта /usr/local/sbin/rrdsave. Если файл базы не существует скрипт его
создаёт, если существует - то добавляет/обновляет в нём данные.
Опишу подробнее строки с данными (после директивы Data):
- "$DATADIR/rrdintn"
путь до файла, в нашем случае rrdint, переменная
DATADIR содержит путь до каталога, где хранятся данные данного
объекта/сервиса/интерфейса (в нашем случае для интерфейса).
- "60n"
время в секундах, как часто будет обновляется база. Параметр
необходим при создании базы.
Функции консолидации определяют как и какие отсчёты группировать в одну
ячейку (у нас методом усреднения, возможны так же MAX, MIN, TOTAL,
LAST). Создаём 10080 ячеек под минутные отчёты (1 отсчёт по 60 секунд),
10080 ячеек под 5 минутные (5 отсчётов), сколько же под часовые (60
отсчётов) и т.д.. Если кому жалко место на диске, можно без проблем
значительно уменьшить количество ячеек. Например вот так:
Метод "make_dir" необходимо вызывать до метода "save_rrd_if" для того
лишь, чтобы определить переменную DATADIR. В противном случае без вызова
метода File она будет не определена.
Скрипт для сохранения данных в rrdtool
Далее необходимо создать скрипт сохранения данных в базу rrd
/usr/local/sbin/rrdsave. Вот его листинг:
#!/usr/local/bin/perl
my (@ds,$line,$exe);
my $FileName=<STDIN>;
my $TimeStep=<STDIN>;
my $RRAString=<STDIN>;
chomp($RRAString,$TimeStep,$FileName);
$FileName=~s/"//g;
my $rrdtoolpath='/usr/local/bin/rrdtool';
my $num=-1;
while ( defined( $line=<STDIN> ) ) {
chomp($line); $num++; $ds[$num]=$line;
};
if( -e($FileName) ) {
$exe=$rrdtoolpath.' update '.$FileName.' --template';
my $dsname=''; my $value='';
foreach my $ds1 (@ds) {
my @prom=split/:/,$ds1;
$dsname=$dsname.$prom[1].':';
$value=$value.$prom[0].':';
};
$value=~s/:$//; $dsname=~s/:$//;
$exe=$exe.' '.$dsname.' N:'.$value;
system($exe);
} else {
$exe=$rrdtoolpath.' create '.$FileName.' --step '.$TimeStep;
foreach my $ds1 (@ds) {
$ds1=~s/^.+?://;
$exe=$exe.' DS:'.$ds1;
};
$exe=$exe.' '.$RRAString;
system($exe);
system('/bin/chmod 644 '.$FileName);
};
Изменим права доступа на данный скрипт:
# chmod 755 /usr/local/sbin/rrdsave
Запуск приложения
Приложение готово к запуску, запускаем кому как удобно:
(предварительно добавив в rc.conf 'netmond_enable="YES"')
# /usr/local/sbin/netmondctl start
Проверяем наличие процесса в памяти (# ps auxw|grep netmond), отсутствие
ошибок в /var/log/messages, а так же наличие каталогов в RootDir:
# cd /var/netmon && ls
Единственный минусом можно назвать факт, что каталоги создались с
правами 750. Для возможности работы системы отображения необходима
возможность пользователю www иметь доступ к файлам, хранящимся в
каталогах в /var/netmon. Для этого необходимо сменить права доступа на
все подкаталоги, находящиеся в /var/netmon на 755. Самый быстрый (но не
самый правильный) вариант:
# chmod -R 755 /var/netmon
Следует отметить, что все скрипты вызываемые из методов сохранения
запускаются с правами пользователя netmon, так что необходимо
предусмотреть возможность записи в каталоги с интерфейсами:
# cd /var/netmon
# chown -R netmon *
Через пару минут после запуска netmond можно проверить наличие файлов
rrdint в подкаталогах интерфейсов. При желании можно посмотреть
содержимое фалов следующим образом:
# rrdtool fetch rrdint AVERAGE[[/CODE]], где rrdfilename - имя созданного файла.
Вот часть результат вывода данной команды:
ifoperstatus ifinoctets ifoutoctets ifinerrors ifouterrors ifindrops ifoutdrops ifinucastpkts ifoutucastpkts ifinncastpkts ifoutncastpkts
1156826040: nan nan nan nan nan nan nan nan nan nan nan
1156826100: nan nan nan nan nan nan nan nan nan nan nan
1156826160: nan nan nan nan nan nan nan nan nan nan nan
1156826220: nan nan nan nan nan nan nan nan nan nan nan
1156826280: nan nan nan nan nan nan nan nan nan nan nan
Приведу немного изменённую цитату с http://soft.risp.ru :
Netmond хранит все накопленные данные о текущем состоянии сети у себя в
памяти, в специально предназначенных контейнерах - переменных VARIABLE.
Значения VARIABLE могут вводиться в программу по результатам работы
системы сбора данных, а выводиться с помощью разнообразных методов
сохранения SAVE. Однако вывод данных с помощью SAVE выполняется только
по инициативе самого Netmond (периодически или в зависимости от каких-то
условий) совершенно конкретных значений, предусмотренных конфигурацией
программы. Что может быть очень удобно при решении задач накопления и
долговременного хранения данных, но, например, практически не пригодно
для задачи получения мгновенной актуальной картины состояния всей сети в
реальном времени. Для решения задачи вывода любых данных в произвольные
моменты времени в Netmond встроен специальный сервер NetState, который
обеспечивает авторизованным сетевым клиентам асинхронный доступ ко всему
массиву переменных VARIABLE на чтение.
Весь массив переменных VARIABLE представляется в виде иерархии имен
переменных и их владельцев, разделенных специальным символом `!':
Обьект!Подобьект!Переменная = Значение
Возможно получение текущих и предыдущих значений переменных, а также
выбор интересующих переменных по REGEX-маскам на их имена.
Netstate сервер удобен для проверки правильности работы программы, а так
же получения всех текущих переменных, например текущее показание
счётчика байт на интерфейсе, состояние объекта (UP,DOWN), значение
пользовательских переменных и т.п.
Подключение к netstate выполняется по команде:
# telnet 127.0.0.1 3333
В результате отобразится окно приветствия и сервер готов в выполнению
команд пользователя:
NetState server ready (timeout 30 sec.)
Compress: ZLIB 1.2.2
!
В процессе отладки системы неплохо бы узнать основные команды. Приведу
их в примерах
Any ;* - покажет все переменные которые держит в памяти netmond.
Object NAME - покажет имена всех объектов. Приведу часть вывода сервера
на эту команду:
Interface STATUS - покажет статус интерфейсов (DOWN,UP)
Object Cisco - покажет переменные которые есть у объекта "Cisco"
Interface Cisco!1 - покажет данные по интерфейсу "1" у объекта "Cisco"
Any Cisco!1!IfIndex - покажет значение переменной IfIndex на
интерфейсе/сервисе "1" объекта "Cisco".
Настройка агентов SNMP
Еще хотелось бы отметить, что для работы процесса съёма статистики с
сетевого оборудования (сервера, коммутаторы, маршрутизаторы) необходимо
настроить их SNMP программное обеспечение и определить comminuty string,
которым уже будет пользоваться Method router. Приведу примеры
минимальной настройки для оборудования и некоторых сервисов для снятия
статистики по SNMP.
Маршрутизаторы и коммутаторы Cisco:
# conf t
(config)# snmp-server enable informs
(config)# snmp-server community public ro (public доступ на чтение ?ro?)
Cisco PIX Firewall:
# conf t
(config)# snmp-server enable
(config)# snmp-server community public
Утилита bsnmpd из состава FreeBSD 5-STABLE и 6-STABLE:
Настраиваем файл /etc/snmpd.conf.
Добавляем в rc.conf строку bsnmpd_enable="YES" и запускаем:
# /etc/rc.d/bsnmpd start
Проверяем /var/log/messages на наличие/отсутствие ошибок.
Пакет Net-SNMP из портов:
Правим файл /usr/local/share/snmp/snmpd.conf, оставляем/добавляем запись
про community string:
rocommunity public 172.21.81.3
Добавляем в rc.conf строку snmpd_enable="YES" и запускаем:
# /usr/local/etc/rc.d/snmpd.sh start
Служба SNMP в Microsoft Windows
Для начала устанавливаем службу: Пуск(Start)/ Настройка(Settings)/
Панель Управления (Control Panel)/ Установка удаление программ (Add or
remove programs)/ Установка компонентов Windows (Add/remove Windows
Components)/ Средства управления и наблюдения (Management and Monitoring
Tools)/ Протокол SNMP (Simple Network Management Protocol). После
установки необходимо выполнить настройку службы Пуск/ Настройка/ Панель
управления/ Администрирование/ Службы. Находим службу "Служба SNMP"
("SNMP Service"), можно сразу выполнить переход на закладку
"Безопасность". Добавляем новое имя сообщества (community string) по
кнопке "Добавить" для чтения.
Проверка работы SNMP агентов
После запуска агентов SNMP необходимо выполнить проверку работы. Я делаю
это через snmpwalk из пакета Net-SNMP вот так:
% snmpwalk -v версия_протокола cc communitystring IP
% snmpwalk -v 1 -c public 172.21.81.3
Если данные идут (на экране появится моного информации), значит служба
работает как надо. Если не идут: либо не правильно задана community
string, либо агент snmp не запущен, либо данному хосту нельзя забирать
данные по SNMP.
Для того чтобы определить IfIndex для интерфейсов, например в MS
Windows, я делаю следующее: читаю ifTable (кому удобнее можете все
данные по snmp прочитать) нахожу там что-то вроде:
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.65539 = INTEGER: 65539
IF-MIB::ifDescr.1 = STRING: MS TCP Loopback interface
IF-MIB::ifDescr.65539 = STRING: Realtek RTL8139 Family PCI FastEthernet NIC
Тут видно что имеется 2 интерфейса - Loopback и rl, имеющие ifIndex=1 и
65539 соответственно.
Мониторинг интерфейсов, имеющих IfIndex больше 65535
-----------------------------------------------------
С такой задачей я столкнулся только при мониторинге серверов MS Windows.
Причина в том, что netmond отказывается принимать интерфейсы в
конфигурационном файле, имеющие IfIndex больше 65535, узнать об этом
можно будет после запуска в файле /var/log/messages будет строка вроде
"interface index out of range". Лекарство нашлось только маленькой
правкой кода netmond в файле parseconf.y. Находим там поиском 2 строки
содержащие "interface index out of range" и правим в условиях:
if ($2 < 1 || $2 > 65535) цифру 65535 на что то вроде 655350 (может не совсем
правильно, но я сделал так).
После этого пересобираем netmond.
# cd /usr/ports/net-mgmt/netmond
# make patch
# cd work/netmond-2.2-b6
# vi parseconf.y
# cd /usr/ports/net-mgmt/netmond
# make install clean
Сохранение в rrdtool других числовых значений
Для того чтобы сохранять какие-то другие числовые параметры (загрузка
CPU Cisco маршрутизаторов, свободная память, количество процессов и
т.п.) в rrdtool необходимо сначала их получать, то есть написать
соответствующий метод опроса (см. http://soft.risp.ru), чтобы определить
переменную в netmond. Если числовое значение считывается по SNMP через
известный идентификатор, то можно в конфигурационном файле netmond
прописать:
Save "save_var" {
# Создаём новый пользовательский метод сохранения данных в rrdtool
# метод принимает 2 аргумента, первый имя создаваемого файла
# второй строка с сохраняемыми данными
# количество ячеек RRA определено в методе сохранения
Pipe "/usr/local/sbin/rrdsave"
Data
"$DATADIR/$1n"
"60n"
"RRA:AVERAGE:0.5:1:10080 RRA:AVERAGE:0.5:60:10080n"
"$2"
}
Object "Cisco" {
Address "10.1.1.1"
Method router "public"
Save "make_dir"
Interface 1 { Save "make_dir" Save "save_rrd_if" }
Interface 2 { Save "make_dir" Save "save_rrd_if" }
# Прописываем переменную которую нам надо считать по SNMP
# ВНИМАНИЕ ЭТО ВСЕГО ЛИШЬ ПРИМЕР ИДЕНТИФИКАТОРА
$testvar 1.3.6.1.2.1.2.1.0
# Получаем значение переменной
Method SNMP "public" {$testvar}
# Вызываем метод сохранения, передав ему 2 параметра через пробел
# имя файла лучше давать такое же как название переменой
# строка ${testvar}:testvar:GAUGE:600:0:U уже была рассмотрена выше
Save "save_var" "testvar ${testvar}:testvar:GAUGE:600:0:U"
}
После запуска netmond должен будет создать файл testvar в каталоге
объекта "Cisco".Можно будет просмотреть какие данные будут положены в
файл:
# rrdtool fetch testvar AVERAGE
Построение графиков из командной строки
Таким образом, мы имеем систему сбора числовых параметров и сохранения
их в rrdtool базу. Теперь самое дело отобразить полученные значения.
Отображение можно сделать средствами командной строки (подробнее man
rrdgraph). Я приведу пример скрипта для построения графиков байтовой
загрузки для файлов интерфейсов, созданных методом "save_rrd_if":
Время задаётся в формате, который воспринимает rrdtool. Я пользуюсь
временем в таком виде: -1m (минуту назад), -54m (54 минуты назад), -12d
(12 дней назад), now (текущий момент) и т.п. Пример использования
данного скрипта:
% script /tmp/graph.png /var/netmon/Cisco/Interface1/rrdint -1d now
Первым параметром скрипт принимает имя создаваемого файла изображения,
вторым - путь до файла содержащего rrd данные, 3 и 4 параметры
определяют время, за которое будет построен график.
Чтобы построить график, например, по моноадресным пакетом, достаточно
будет поменять 2 строки, задать другой источник данных (другой столбец в
нашем случае):
Параметры скрипта те же самые, только изменены несколько параметров
подписи данных на графике. Думаю, по данным примерам легко написать
скрипты под другие задачи.
Пример Web оболочки для работы с графиками
Описанный выше способ построения графиков не всегда удобен. Некоторые
задачи администрирования требуют просмотра многих графических
зависимостей за короткий промежуток времени, поэтому мне пришлось
написать под свои нужды некоторый web интерфейс на Perl для удобной
работы с графиками загрузки интерфейсов сети. Скачать пример можно вот с
http://neon.heavennet.ru/shownetmon.tar.gz (~13 Kb). Данный архив
содержит 2 каталога (cgi-bin,data) и описание по установке. Принцип
работы скрипта сводится к следующему: получив запрос от пользователя
скрипт подключается к netstate порту у netmond и считывает имена всех
интерфейсов, объектов и сервисов, а так же DATADIR для них. Скрипт на
основании этих данных строит дерево объктов мониторинга с интерфейсами и
пользователю остаётся лишь выбрать требуемый интерфейс для просмотр
графика. Скиншот смотреть Здесь (~80 Кб).
Настройка скрипта отображения данных:
Копируем содержимое каталога cgi-bin (файл shownetmon) в соответствующий
каталог web сервера.
Даём право на запуск пользователю www:
# chmod 755 /usr/local/www/cgi-bin/shownetmon
В скрипте shownetmon устанавливаем адрес netstate порта у netmond:
Устанавливаем в скрипе каталог куда будут скаладыватся созданные изображения:
$main::config{'imgdir'} = "/usr/local/www/data/img"; # Путь до создаваемых изображений
$main::config{'webimgdir'} = "/img"; # Путь до изображений в www
Создаём каталог /usr/local/www/data/img. Даём пользователю www
возможность записи в него:
В заключении хотел бы отметить нагрузку на компьютер, создаваемую
созданной системой. Данная система разворачивалась на компьютерах с
различной тактовой частотой CPU.Как показал опыт Intel Pentium 166 мог
сохранять и отображать статистику примерно по 200 интерфейсам. Компьютер
на базе Intel 867 Мгц справляется без труда с 500 интерфейсами (больше
просто не было), не нагружая систему больше 1%. Лишь на момент
сохранения нагрузка слегка возрастает на 1-5 секунд. Если учесть, что
обновление данных в базах rrdtool идёт раз в минуту, можно сказать, что
полученная система требует куда меньше ресурсов системы, чем старушка
mrtg.
P.S.: Текст статьи находится по ссылке http://neon.heavennet.ru/netmond_rrdtool.html
518 Прочтений • [Мониторинг интерфейсов в сети с помощью netmond и rrdtool (rrdtool monitor statistic snmp)] [08.05.2012] [Комментариев: 0]