Протокол SNMP, который мы будем использовать, изначально был предназначен для удалённого управления различными параметрами устройств, подключённых к сети. Нас, впрочем, интересует возможность не столько управления, сколько получения разнообразной информации о текущем состоянии этих устройств. Ныне поддержка SNMP встроена в большую часть оборудования, которое хоть как-то можно подключить к сети: роутеры, модемы, принтеры, ПК под управлением современных ОС, сетевые накопители, смартфоны и так далее. В общем, спектр устройств довольно велик, а уж число параметров, которые можно просмотреть, стремится к бесконечности.
В качестве примера возьмём уже немолодой роутер ASUS WL-500gP с последней прошивкой «от Олега» (от энтузиастов). В данном случае выбор конкретно этой модели роутера непринципиален — вы можете воспользоваться любым другим, на который можно установить альтернативную прошивку. Обязательно лишь наличие хотя бы одного свободного USB-порта на нём. Выбор конкретной прошивки тоже не очень важен — почти все из них поддерживают Optware, что нам и надо. Некоторые моменты относительно настроек альтернативных прошивок мы уже рассматривали в статьях про TomatoUSB и ZyXel Keenetic.
Полезно будет хотя бы бегло ознакомиться с этими материалами. Мы не будем рассматривать процесс установки альтернативной прошивки, её базовой настройки, процесс подключения к роутеру по SSH/Telnet, открытие портов для доступа из Интернета, включение DDNS и так далее. Всё это уже рассматривалось в указанных статьях, а дополнительную информацию относительно работы с вашей прошивкой можно найти на официальных сайтах и простым «гуглением».
Итак, приступим. В первую очередь нам понадобится ненужная флешка объёмом не меньше 512 Мбайт. На ней надо создать два раздела — отдать 64 Мбайт под Linux swap, а остальное отформатировать в ext3. Для разбивки можно воспользоваться, например, утилитами от Acronis или свободным GParted. В настройках роутера System Setup → Services надо включить доступ по Telnet или SSH и поддержку USB-накопителей (Enable USB Storage). Ещё надо включить SNMP в соответствующем подразделе IP Config и запомнить значение Community name. Его, кстати, полезно поменять с public на что-нибудь своё.
После применения настроек и последующей перезагрузки роутера можно воткнуть флешку в USB-порт и приступить к настройке. Подключаемся по Telnet или SSH к роутеру (логин и пароль совпадают с таковыми для веб-интерфейса), а затем устанавливаем Optware и минимальный набор утилит. Для этого надо смонтировать нашу флешку и выполнить следующие команды в консоли:
mkdir /tmp/harddisk/opt
mount -o bind /tmp/harddisk/opt /opt
mkdir -p /opt/tmp/ipkg
ipkg.sh update
ipkg.sh install ipkg-opt
ipkg update
Теперь устанавливаем всё самое нужное — текстовый редактор nano, веб-сервер lighttpd и систему мониторинга mrtg. Все необходимые дополнительные модули установятся автоматически.
ipkg install nano
ipkg install lighttpd
ipkg install mrtg
Включим раздел подкачки. Посмотрим на вывод команды fdisk -l и определим, какой из разделов помечен как Linux swap — его и надо подключить командой swapon. (Вместо /dev/sda1 укажите свой раздел!)
fdisk -l
swapon /dev/sda1
Чтобы не выполнять эти действия вручную, пропишем их в автозагрузку (скрипт post-mount):
mkdir -p /usr/local/sbin/
touch /usr/local/sbin/post-mount
chmod +x /usr/local/sbin/post-mount
nano /usr/local/sbin/post-mount
В этот файл надо добавить следующие строчки:
#!/bin/sh
/bin/mount -o bind /tmp/harddisk/opt /opt
/sbin/swapon /dev/sda1
Сохраняем файл (F2, Y, Enter) и выполняем ещё один набор команд для сохранения настроек:
flashfs save && flashfs commit && flashfs enable
Как и было сказано выше, для вашей прошивки набор инструкций может отличаться. Главное, установить Optware и необходимый софт, а также по желанию включить подкачку (у того же WL-500gP памяти не очень много, так что своп очень пригодится).
Собственно, никакой настройки-то делать не придётся — надо лишь запустить веб-сервер, включить его в автозагрузку и открыть нужный порт (по умолчанию 8081). В веб-интерфейсе роутера в разделе NAT Setting → Virtual Server включаем проброс портов и добавляем правило для IP-адреса роутера.
Попробуем запустить lighttpd следующей командой:
/opt/etc/init.d/S80lighttpd start
Для проверки открываем в браузере страничку по адресу http://ip-адрес-роутера:8081/. Если всё в порядке, то вы увидите одинокую надпись «lighttpd server is running». Также надо убедиться, что настроен DDNS и lighttpd из Сети по адресу http://ddns-имя-роутера:8081/. После этого можно добавить строчку для запуска веб-сервера в конец файла /usr/local/sbin/post-mount с помощью nano.
А вот теперь самое сложное и интересное. MRTG будет заниматься сбором различной статистики и выводить её в виде наглядных графиков через веб-интерфейс. Директорией по умолчанию для веб-документов прописана /opt/share/www/. В ней надо создать ещё одну папку для хранения файлов MRTG. А файлы конфигурации мы будем хранить в каталоге /opt/etc/mrtg/.
mkdir -p /opt/share/www/mrtg
mkdir -p /opt/etc/mrtg/
Для начала разберёмся с созданием конфигурационного файла для снятия статистики с роутера. Это не так интересно, потому что в прошивке Олега и так есть вывод графиков загруженности сетевых интерфейсов и CPU, но для знакомства с параметрами вполне подойдёт. Выполняем следующие команды:
cfgmaker --output=/opt/etc/mrtg/mrtg.cfg public@localhost
indexmaker --output=/opt/share/www/mrtg/index.html /etc/mrtg/mymrtg.cfg
Первая команда опрашивает SNMP-сервер, встроенный в роутер, и на основе полученных данных автоматически формирует конфигурационный файл /opt/etc/mrtg/mrtg.cfg. Опрос идёт по community с именем public (см. настройки SNMP в начале) на loopback-интерфейсе роутера (можно было легко подставить внутренний IP-адрес вместо localhost — эффект был бы тем же). Вторая команда генерирует html-файл на основе файла настроек — добавляет заготовки для будущих графиков, ссылки и так далее.
nano /opt/etc/mrtg/mrtg.cfg
С помощью nano откроем файл /opt/etc/mrtg/mrtg.cfg и добавим в начале несколько строк:
Options[_]: growright, bits
RunAsDaemon: Yes
EnableIPv6: no
WorkDir: /opt/share/www/mrtg
Что мы сделали? Во-первых, перевели отсчёт из байтов в биты и заставили рисоваться графики справа налево. Во-вторых, включили запуск MRTG в режиме демона, то есть программа будет тихонечко висеть в фоне и каждые 5 минут обновлять графики. Протокол IPv6 нам не нужен — отключаем его. Последний параметр задаёт рабочую папку MRTG, где хранятся все основные файлы.
Для сетевых интерфейсов роутера все настройки идентичны. В квадратных скобках задаётся имя отслеживаемого параметра (скорость, загрузка, потребление чего-либо и так далее). У каждого параметра есть ряд опций. Мы сейчас не будем рассматривать их все, тем более что назначение каждой из них вполне ясно из названия. Полный список всех возможных опций их настроек можно найти в официальной документации MRTG.
Наиболее важной является первая строка вида Target[имя_параметра]: OID:имя_community@адрес_устройства:. OID — это уникальный идентификатор объекта или, иначе говоря, считываемого параметра. К нему мы ещё вернёмся, а пока что основную работу за нас сделал cfgmaker. В SetEnv можно задавать внутренние переменные, а в MaxBytes указывается максимальное значение, которое может принять измеряемый параметр (например, скорость LAN-портов в WL-500gP физически не может быть больше 100 Мбит/с). В Title указывается подпись к генерируемому графику, а в PageTop можно ввести более подробное описание, которое будет показываться при просмотре расширенной статистики. Первую строчку в PageTop полезно обрамить тегами <h1></h1>.
По умолчанию cfgmaker генерирует конфигурацию для всех сетевых интерфейсов. Те, что вам нужны, надо раскомментировать (убрать # и пробел в начале каждой строки), либо наоборот — закомментировать или вовсе удалить остальные. На OID следует обращать особое внимание. Например, простой сменой eth0 на ppp0 ничего не добьёшься — надо менять и OID. Благо даже в закомментированных конфигурациях в описании указано имя интерфейса. Какой из них за что отвечает — надо опять же узнавать на сайте самой прошивки. В нашем примере ppp0 — это соединение c Интернетом посредством PPTP/L2TP/PPPoE, eth1 — беспроводная сеть, а br0 — локальная сеть.
Сохраняем файл mrtg.cfg, ещё раз запускаем indexmaker с теми же параметрами и включаем mrtg.
mrtg /opt/etc/mrtg/mrtg.cfg
При первом запуске или смене настроек mrtg может ругнуться на недостающие файлы. А вообще после любых изменений в mrtg.cfg рекомендуется обновлять index.html и перезапускать mrtg.
killall mrtg
indexmaker --output=/opt/share/www/mrtg/index.html /etc/mrtg/mymrtg.cfg
mrtg /opt/etc/mrtg/mrtg.cfg
Обновите страничку в браузере с открытой статистикой mrtg и полюбуйтесь на результат своих трудов. Можно дополнить имеющиеся графики, например, статистикой использования CPU. Вот пример настроек, взятый на форуме «олеговской» прошивки. В конец конфигурационного файла mrtg надо добавить следующие строки:
Target[cpu]: /opt/etc/mrtg/cpu.sh
MaxBytes[cpu]: 500
Title[cpu]: Server CPU Load (5 minute average)
YLegend[cpu]: Load*100
ShortLegend[cpu]: load
Legend1[cpu]: CPU Load (x 100)
Legend2[cpu]:
LegendI[cpu]: 1min load
LegendO[cpu]: 5min load
PageTop[cpu]: <h1>Server average CPU Load</h1>
Options[cpu]: gauge,nopercent,integer,growright
Ну а затем создать непосредственно скрипт для снятия этой самой статистики…
touch /opt/etc/mrtg/cpu.sh
chmod +x /opt/etc/mrtg/cpu.sh
… и наполнить его следующим содержимым:
#!/bin/sh
awk </proc/loadavg '{print (100*$1) "\n" (100*$2) }'
hostname;
echo "loadavg";
Первым делом надо включить поддержку SNMP в компонентах Windows. Затем надо перейти к настройкам служб (правой кнопкой мыши — на «Мой компьютер» → «Управление» → «Службы») и найти там службу SNMP. По двойному клику откроется окно настроек. В параметрах безопасности надо добавить новое community (пусть это будет public) с правами доступа только на чтение. А чуть ниже в список разрешённых хостов необходимо вписать IP-адрес нашего роутера. После этого надо запустить службу, если она ещё не работает, и включить её автозапуск.
На всякий случай проверьте, не блокируется ли UDP-порт 161 брандмауэром. Также рекомендуется установить утилиту SNMP Informant-Standard — этот SNMP-агент немножко упрощает доступ к популярным параметрам Windows. Если вы хотите получить информацию о сетевой активности Windows-хоста, то можно снова воспользоваться cfgmaker (172.30.4.2 — IP-адрес ПК с Windows):
cfgmaker --output=/opt/etc/mrtg/win_1.cfg public@172.30.4.2
Пролистайте файл /opt/etc/mrtg/win_1.cfg и найдите в нём параметры нужного сетевого адаптера, а потом скопируйте их в основной файл конфигурации /opt/etc/mrtg/mrtg.cfg и перезапустите mrtg (см. выше). Аналогичные действия надо проделать и для любых других компьютеров или устройств, если они, конечно, поддерживают отдачу такой статистики по SNMP.
Хорошо, с сетью разобрались и освоились, а что дальше делать? Возвращаемся к волшебным OID или же, как мы их называли по ходу статьи, параметрам. Откуда их брать? Вообще производитель любого устройства с поддержкой SNMP обязан предоставлять информацию обо всех OID, упакованную в базу MIB, которую в идеале очень просто найти в Сети. Для просмотра MIB и опроса OID существует масса утилит. Мы рассмотрим классику подобного рода программ — Getif. (В Windows Vista и 7 она может ругаться на Msflxgrd.ocx.) После установки скопируйте имеющиеся MIB-файлы в каталог C:\Program Files\Getif 2.3.1\Mibs\. Для работы с Windows 7 надо взять как минимум все файлы *.mib из папки C:\Windows\System32 и из C:\Program Files\SNMP Informant\standard\mibs\SMIv2\ (если вы установили этот агент).
Разобраться с утилитой довольно просто: указываем имя хоста и прочие параметры, нажимаем Start и видим ответ машины. Можете поиграться и покликать по вкладкам, нажимая на Start и просматривая результаты. Нам нужна вкладка MBrowser. С её помощью можно просматривать различные OID в иерархическом виде, а также получать их значения. Для примера воспользуемся параметром cpuPercentProcessorTime (загрузка CPU) из SNMP Informant. Полный путь до него (его OID) выглядит как .iso.org.dod.internet.private.enterprises.wtcs.informant.standard.processorTable.processorEntry.cpuPercentProcessorTime. В принципе, в настройках mrtg уместно использовать и его, но лучше взять короткую цифровую запись .1.3.6.1.4.1.9600.1.1.5.1.5. Можно использовать и смешанный вариант записи, кому как удобнее.
После выбора этого параметра понажимайте кнопку Start и посмотрите на результат в нижнем поле. Во-первых, мы видим, что отдаётся сразу три подпараметра. Первые два (*.1.48 и *1.49) показывают загрузку каждого из двух ядер процессора, причём информация отдаётся в виде целых чисел в диапазоне от 0 до 100 (фактически %). Попробуем на основе этих данных сформировать конфигурацию для mrtg.
Target[PC1-CPU]: 1.3.6.1.4.1.9600.1.1.5.1.5.1.48&1.3.6.1.4.1.9600.1.1.5.1.5.1.49:public@172.30.4.2
MaxBytes[PC1-CPU]: 100
YLegend[PC1-CPU]: CPU %
ShortLegend[PC1-CPU]: %
LegendI[PC1-CPU]: CPU 1
LegendO[PC1-CPU]: CPU 2
Legend1[PC1-CPU]: CPU 1 usage
Legend2[PC1-CPU]: CPU 2 usage
Options[PC1-CPU]: integer, gauge, nopercent, growright
Title[PC1-CPU]: PC1 CPU Usage
PageTop[PC1-CPU]: <h1>PC1 CPU Usage</h1>
Достаточно взглянуть на скриншот, чтобы понять, какой параметр за что отвечает. В источнике SNMP-данных получаемые параметры объединяются амперсандом. В Options значения расшифровываются так: integer — показывать целые числа под графиками, gauge — указание на то, что получаемый параметр не является «счётчиком» (не прибывающие значения), nopercent — запрет на вывод процентов использования, growright — отрисовка графиков справа налево. Ну, а MaxBytes как пороговое значение для загрузки CPU в процентах, очевидно, не может быть больше 100.
После того как вы всё отладили, можно включить в автозагрузку веб-сервер и mrtg, добавив в конец файла /usr/local/sbin/post-mount следующие строки:
/opt/etc/init.d/S80lighttpd start
/opt/bin/mrtg /opt/etc/mrtg/mrtg.cfg
Осталось добавить финальный аккорд.
flashfs save && flashfs commit && flashfs enable && reboot
Аналогичным образом можно добавить и массу других параметров для мониторинга. Если не хотите заморачиваться, то в Сети есть множество готовых шаблонов mrtg для использования с различными типами входных данных. Для наглядной отладки этих самых данных можно использовать утилиту Eserv SNMP Monitor. А вот здесь есть приличный набор MIB для разнообразного оборудования. Многие программы имеют встроенные или отдельные SNMP-агенты. В общем, можно заниматься мониторингом практически всего айтишного хозяйства. Надо ли оно домашнему пользователю? В некоторых случаях — да, но рассмотренный вариант подойдёт скорее для небольшого офиса. Учтите, что ресурсы роутера не безграничны, и по возможности лучше сразу строить SNMP-мониторинг на базе, к примеру, Zabbix, Nagios или подобных систем. Их мы наверняка ещё коснёмся в будущих материалах, а пока что традиционное напутствие: «Удачи!»