MRTG (Multi Router Traffic Grapher) – программа для мониторинга различных ресурсов устройств, компьютеров и даже программ через протокол SNMP.
Для работы программы требуется, чтобы на устройстве был включен протокол SNMP, а если собираемся мониторить данные получаемые с компьютера, то на компьютере должен работать демон программы SNMP.
У меня стояла задача посмотреть насколько загружен узловой коммутатор сети, но данная статья применима ко всем сетевым устройствам, умеющим SNMP протокол. Так что можно следить за загрузкой каналов Lan или Wi-Fi у роутеров, ADSL модемов и прочей домашней техники.
Первым делом проверяем, чтобы на устройстве за который хотим следить
- был включен протокол SNMP
- если там есть фаерволл, то разрешаем доступ нашей мониторящей машине (открыть на устройстве UDP 161 порт)
- рекомендуется изменить строку доступа на чтение параметров SNMP (по умолчанию строка доступа – “public”)
Установка MRTG
MRTG имеет следующие зависимости
- HTTP web сервер
- perl-SNMP_Session
- GD библиотека
- Libpng библиотека
- zlib библиотека
HTTP web сервер требуется только для просмотра графиков на машине с MRTG. Я рекомендую использовать web сервер apache.
Для установки в Ubuntu (Debian) выполним команду
sudo aptitude install mrtg
После инсталляции конфиг MRTG будет находиться /etc/mrtg, а рабочая директория HTTPсервера в /var/www/mrtg
В FreeBSD инсталляцию пакета лучше всего проводить из портов. От root или sudo выполняем
# cd /usr/ports/net-mgmt/mrtg
# make config && make install clean
Для инсталляции из исходников скачиваем программу со страницы загрузки и конфигурируем с опциями
./configure --prefix=/usr/local/mrtg2 \
--with-gd-lib \
--with-gd-inc \
--with-png-inc=/usr/local/include \
--with-png-lib=/usr/local/lib
Затем стандартные
#make
#make install
Создание конфигов MRTG
В MRTG пакете есть утилита cfgmaker для содания конфигов устройств. Создаем конфиг для нашего устройства (команда пишется в одну строку)
#cfgmaker --global 'WorkDir: /usr/local/apache/htdocs/stat/mrtg/' public@m254 \
--output /usr/local/mrtg2/etc/m254.cfg
здесь
–global ‘WorkDir: /usr/local/apache/htdocs/stat/mrtg/’ – рабочий каталог для mrtg, где будут хранится графики загрузки каналов и конфиг
public@m254 – строка доступа для чтения параметров устройства и имя устройства в сети (можно задавать ip адрес)
–output /usr/local/mrtg2/etc/m254.cfg – куда сохраняем наш конфиг для устройства
Я перечислил только самые необходимые переменные для cfgmaker, полный список команд можно посмотреть по команде
cfgmaker --man
Теперь по полученному конфигу устройства сгенерим страничку html для вывода картинок загрузки портов устройства. Это делается через команду indexmaker.
#indexmaker /usr/local/mrtg2/etc/m254.cfg > /usr/local/apache/htdocs/stat/mrtg/index.html
Убедимся что MRTG и наш конфиг устройства с index.html работают. Выполняем
#mrtg /usr/local/mrtg2/etc/m254.cfg
В рабочей директории /usr/local/apache/htdocs/stat/mrtg/ должны появиться файлы картинок *.png , *.log файлы и вспомогательные html файлы.
Можно набирать в браузере http://сервер/stat/mrtg/ и увидеть пока пустые картинки на портах устройства.
Если снимать статистику раз в 5 минут, то через пол дня увидим примерно следующее:
По умолчанию порты комутатора просто пронумерована или имеют свои специфические обозначения. Эти обозначения можно исправить отредактировав вручную файл index.html в рабочей директории.
Для автоматического сбора статистики в /etc/crontab добавляем строку
*/5 * * * * root /usr/local/mrtg2/bin/mrtg /usr/local/mrtg2/etc/m254.cfg 1> /dev/null 2>&1
Ввел команду #cfgmaker –global ‘WorkDir: /usr/local/apache/htdocs/stat/mrtg/’ public@m254 \ –output /usr/local/mrtg2/etc/m254.cfg
Эффект ноль. Убрал с начала # – что это за символ и зачем он нужен?
Вывод дал много ошибок
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1385.
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1386.
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1387.
Use of uninitialized value $fs in pattern match (m//) at /usr/bin/cfgmaker line 1392.
Use of uninitialized value $t in hash element at /usr/bin/cfgmaker line 1393.
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1385.
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1386.
Use of uninitialized value $t in substitution (s///) at /usr/bin/cfgmaker line 1387.
Use of uninitialized value $fs in pattern match (m//) at /usr/bin/cfgmaker line 1392.
Use of uninitialized value $t in hash element at /usr/bin/cfgmaker line 1393.
–base: Get Device Info on public@m254:
Error:
can’t resolve “m254″ to IP address
at /usr/share/perl5/SNMP_util.pm line 430.
SNMPWALK Problem for public@m254::::::v4only
at /usr/bin/cfgmaker line 960.
WARNING: Skipping public@m254: as no info could be retrieved
–base: Get Device Info on public@ –output:
Error:
can’t resolve ” –output” to IP address
at /usr/share/perl5/SNMP_util.pm line 430.
SNMPWALK Problem for public@ –output::::::v4only
at /usr/bin/cfgmaker line 960.
WARNING: Skipping public@ –output: as no info could be retrieved
–base: Get Device Info on public@/usr/local/mrtg2/etc/m254.cfg:
Error:
can’t resolve “/usr/local/mrtg2/etc/m254.cfg” to IP address
at /usr/share/perl5/SNMP_util.pm line 430.
SNMPWALK Problem for public@/usr/local/mrtg2/etc/m254.cfg::::::v4only
at /usr/bin/cfgmaker line 960.
WARNING: Skipping public@/usr/local/mrtg2/etc/m254.cfg: as no info could be retrieved
Use of uninitialized value $comment_sysdescr in substitution (s///) at /usr/bin/cfgmaker line 384.
Use of uninitialized value $sysname in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $comment_sysdescr in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syscontact in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syslocation in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $comment_sysdescr in substitution (s///) at /usr/bin/cfgmaker line 384.
Use of uninitialized value $sysname in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $comment_sysdescr in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syscontact in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syslocation in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $comment_sysdescr in substitution (s///) at /usr/bin/cfgmaker line 384.
Use of uninitialized value $sysname in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $comment_sysdescr in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syscontact in concatenation (.) or string at /usr/bin/cfgmaker line 417.
Use of uninitialized value $syslocation in concatenation (.) or string at /usr/bin/cfgmaker line 417.
# Created by
# /usr/bin/cfgmaker –global “WorkDir: /usr/local/apache/htdocs/stat/mrtg/” public@m254 ” –output” /usr/local/mrtg2/etc/m254.cfg
# обозначает что команда идет из под пользователя root, ну или можно от обычного пользователя, тогда перед командой надо ставить sudo.
конечно # в команду вводить не надо.
По выводу ошибки видно, что просто скопирована моя команда. Для начала надо убедиться что snmp включен на устройстве, вот тогда вместо public@m254 надо написать public@
ну а далее уже можно смотреть ошибки