SNMP (Simple Network Management Protocol) — простой протокол управления сетью.
Это технология, призванная обеспечить управление и контроль за устройствами и приложениями в сети связи путём обмена управляющей информацией между агентами, располагающимися на сетевых устройствах, и менеджерами, расположенными на станциях управления. В настоящее время SNMP является базовым протоколом управления сети Internet. SNMP определяет сеть как совокупность сетевых управляющих станций и элементов сети (главные машины, шлюзы и маршрутизаторы, терминальные серверы), которые совместно обеспечивают административные связи между сетевыми управляющими станциями и сетевыми агентами.
MRTG (Multi Router Traffic Grapher) — утилита позволяющая осуществлять мониторинг сетевых линков (да и не только их). MRTG на выходе генерирует HTML страницы с графиками в PNG.
Пример:
Итак вы решили, что пора следить за нагрузкой на сетевых линках в вашей сети.
Что для этого нужно ?
Вам понадобятся две вещи:
- /usr/ports/net-mgmt/mrtg
- /usr/ports/net-mgmt/net-snmp
Сначала установим MRTG:
[root@work ~]# cd /usr/ports/net-mgmt/mrtg
[root@work /usr/ports/net-mgmt/mrtg]# make install clean
после инсталляции появится: /usr/local/bin/mrtg
Затем snmp:
[root@work ~]# cd /usr/ports/net-mgmt/net-snmp
[root@virus /usr/ports/net-mgmt/net-snmp]# make install clean
после инсталляции появится: /usr/local/sbin/snmpd
Приступаем к настройке:
SNMP
Если вам необходимо мониторить что либо на другом компьютере/сервере (он будет являться «клиентом»), то после установки на нем snmp выполняем команду:
snmpconf -i -f
Запустится утилита которая поможет создать конфигурационный файл для snmp, который должен располагаться в /usr/local/share/snmp/ и называться snmpd.conf.
После запуска выбираем пункт 1 (1: snmpd.conf), затем пункт 2 (2: Access Control Setup), а затем пункт 3 (3: a SNMPv1/SNMPv2c read-only access community name).
На вопрос «The community name to add read-only access for:» отвечаем именем community на которое будет отзываться наш сервер, например pub.
На вопрос «The hostname or network address to accept this community name from [RETURN for all]:» у нас два варианта:
- нажать ENTER, но тогда любой хост в сети сможет «снимать» показания по SNMP с этого сервера используя community pub.
- четко указать IP-адрес хоста с которого будут приходить запросы. (это может быть и сам хост 127.0.0.1)
На последний вопрос об ограничениях просто жмем ENTER.
На этом конфигурирование для нас закончено, печатаем букву f, жмем ENTER, печатаем f жмем ENTER, печатаем q, жмем ENTER и программа конфигуратор завершает свою работу сообщая:
The following files were created:
snmpd.conf installed in /usr/local/share/snmp
Посмотрим как выглядит /usr/local/share/snmp/snmpd.conf
rocommunity pub 127.0.0.1
Это означает что, хост с IP-адресом 127.0.0.1 может только «читать» используя community pub (помним, что по snmp можно и «писать» (управлять)).
Добавляем в /etc/rc.conf:
snmpd_enable=»YES»
Запускаем командой:
/usr/local/etc/rc.d/snmpd start
Смотрим на месте ли процесс snmp:
[root@work ~]# ps -ax | grep snmp
927 ?? S 0:23.01 /usr/local/sbin/snmpd -p /var/run/snmpd.pid
76815 p0 S+ 0:00.00 grep snmp
[root@work ~]# sockstat | grep :161
root snmpd 927 13 udp4 *:161 *:*
Все в порядке, процесс на месте и «слушает» порт udp 161.
Проверить доступность «чтения» данных по SNMP c любого устройства можно командой:
snmpwalk -v2c -c pub 127.0.0.1
Где pub это community, а 127.0.0.1 IP-адрес хоста с которого мы хотим получить данные.
Если после запуска snmpwalk вы не получили в ответ:
Timeout: No Response from 127.0.0.1
а «поехали» данные то все ОК, если timeout, то проверьте, что процесс запущен и слушает порт udp 161, а также что IP-адрес хоста, с которого вы пытаетесь получить эти данные, присутвует в /usr/local/share/snmp/snmpd.conf с запрашиваемым вами community.
Если вам необходимо снимать данные по SNMP с сетевого устройства (коммутатор (свич), маршрутизатор, etc.), который так же будет являться «клиентом», то настройте SNMP на нем, также указав хосты и community на RO (Read Only).
Пример настройки SNMP на Cisco Catalyst:
snmp-server community pub RO
snmp-server location server-farm
snmp-server contact my-cool-provider
snmp-server host 10.3.1.1 pub
snmp-server host 10.3.1.2 pub
Пример настройки SNMP на D-link DES 3526:
create snmp group pub v2c read_view CommunityView notify_view CommunityView
create snmp community pub view CommunityView read_only
create snmp host 10.3.1.1 v2c pub
create snmp host 10.3.1.2 v2c pub
MRTG
Конфигурационные файлы MRTG по умолчанию находятся в /usr/local/etc/mrtg/.
Файл mrtg.conf:
Language: russian1251
WorkDir: /usr/local/www/mrtg
background[_]: #FBEDD0
Options[_]: Bits
Forks: 4
#Пример получения графика по порту №1 cisco catalyst 3560G
Title[cat_1]: Traffic for Cisco 3560 (Port 1)
PageTop[cat_1]: <h1><B>Cisco 3560: Port 1 </B></h1>
Target[cat_1]: 10101:pub@10.3.1.10:::::2
RouterUptime[cat_1]: pub@10.3.1.10
MaxBytes[cat_1]: 250000000
Где 10.3.1.10 — IP адрес утсройства, pub — community, 10101 — номер первого порта в дереве SNMP.
Как я узнал, что 10101 это первй порт ? Запускаем:
snmpwalk -v2c -c pub 10.3.1.10
Видим:
…………………………
IF-MIB::ifDescr.10101 = STRING: GigabitEthernet0/1
IF-MIB::ifDescr.10102 = STRING: GigabitEthernet0/2
IF-MIB::ifDescr.10103 = STRING: GigabitEthernet0/3
IF-MIB::ifDescr.10104 = STRING: GigabitEthernet0/4
…………………………
IF-MIB::ifDescr.10127 = STRING: GigabitEthernet0/27
IF-MIB::ifDescr.10128 = STRING: GigabitEthernet0/28
………………………….
Таким же образом можно описать в /usr/local/etc/mrtg/mrtg.conf и остальные порты catalyst`а.
Пример получение загрузки CPU cisco catalyst по snmp.
В /usr/local/etc/mrtg/mrtg.conf дописываем:
Title[cpu3560]: Cisco 3550 CPU Usage
Target[cpu3560]: 1.3.6.1.4.1.9.2.1.58.0&1.3.6.1.4.1.9.2.1.58.0:pub@10.3.1.10:::::2
LegendI[cpu3560]: Load CPU
LegendO[cpu3560]:
YLegend[cpu3560]: CPU load, %
MaxBytes[cpu3560]: 100
AbsMax[cpu3560]: 100
ShortLegend[cpu3560]: %
PageTop[cpu3560]: <h1><B>Средняя загрузка процессора Cisco 3560</B></h1>
Options[cpu3560]: Absolute, nopercent, gauge
Legend1[cpu3560]: Средняя загрузка процессора
Пример получение использование памяти cisco catalyst по snmp.
В /usr/local/etc/mrtg/mrtg.conf дописываем:
Title[mem3560]: Memory Usage
MaxBytes[mem3560]: 256000000
AbsMax[mem3560]: 256000000
Target[mem3560]: 1.3.6.1.4.1.9.9.48.1.1.1.5.1&1.3.6.1.4.1.9.9.48.1.1.1.6.1:pub@10.3.1.10:::::2
LegendI[mem3560]: Used mem
LegendO[mem3560]: Free mem
YLegend[mem3560]: Mem usage, Mb
ShortLegend[mem3560]: b
PageTop[mem3560]: <h1><B>Среднее использование памяти Cisco 3560</B></h1>
Options[mem3560]: Absolute, nopercent, gauge, nobanner
Legend1[mem3560]: Used mem
Legend2[mem3560]: Free mem
Пример получение загрузки CPU с сервера.
В /usr/local/etc/mrtg/mrtg.conf дописываем:
Pagetop[srv01_cpu]: <h1><B>CPU Сервер-01</B></h1>
Title[srv01_cpu]: CPU Сервер-01
PNGTitle[srv01_cpu]: CPU Сервер-01
MaxBytes[srv01_cpu]: 100
AbsMax[srv01_cpu]: 100
Target[srv01_cpu]: .1.3.6.1.4.1.2021.11.9.0&.1.3.6.1.4.1.2021.11.9.0:pub@10.3.1.11 + .1.3.6.1.4.1.2021.11.10.0&.1.3.6.1.4.1.2021.11.10.0:pub@10.3.1.11
RouterUptime[srv01_cpu]: pub@10.3.1.11
LegendI[srv01_cpu]: CPU
LegendO[srv01_cpu]: CPU
YLegend[srv01_cpu]: Usage CPU, %
ShortLegend[srv01_cpu]: %
Legend1[srv01_cpu]: CPU
Legend2[srv01_cpu]: CPU
Пример получение загрузки сетевой карты сервера с IP-адресом 10.10.10.1.
В /usr/local/etc/mrtg/mrtg.conf дописываем:
Pagetop[srv01_net1]: <h1><B>Сетевая карта с IP 10.10.10.1</B></h1>
Title[srv01_net1]: Сетевая карта с IP 10.10.10.1
PNGTitle[srv01_net1]: Сетевая карта с IP 10.10.10.1
MaxBytes[srv01_net1]: 250000000
Target[srv01_net1]: -/10.10.10.1:pub@10.3.1.12
RouterUptime[srv01_net1]: pub@10.3.1.12
Будем считать что файл /usr/local/etc/mrtg/mrtg.conf вы подготовили.
Проверяем конфиг
запустим руками для проверки, что мы не ошиблись в конфиге
/usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.conf
Если строчек «ERROR: CFG Error in» нет, то все ОК, если есть исправляем ошибки.
Запускаемся
Добавляем в файл /etc/crontab:
*/5 * * * * root /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.conf
Теперь ждем 5-ть минут и смотрим в папку /usr/local/www/mrtg, которая обозначена в нашем конфиге как WorkDir, куда и будут складываться HTML страницы с графиками. Не пугайтесь если графики по началу пусты, подождите хотябы 30-ть минут, что бы появилось достаточно данных для того, чтобы вы увидели рабочий график.
Благодаря crontab`у график будет обновляться каждые 5-ть минут и вы будете видеть графики отображающие среднее за 5-ть минут значение. Делать меньше 5-ти минут не рекомендую.
С помощью MRTG можно строить графики на любых данных. Главное всегда придоставлять для MRTG 4-ре строки. Пример:
В /usr/local/etc/mrtg/mrtg.conf дописываем:
Pagetop[srv01_hdd]: HDD Сервер-01<br>
Title[srv01_hdd]: HDD Сервер-01
PNGTitle[srv01_hdd]: HDD use
MaxBytes[srv01_hdd]: 1250000
AbsMax[srv01_hdd]: 1250000
Target[srv01_hdd]: `/bin/cat /usr/monitor/SRV-01.log`
LegendI[srv01_hdd]: /usr
LegendO[srv01_hdd]: /var
YLegend[srv01_hdd]: Used space, Mb
ShortLegend[srv01_hdd]: Mb
Legend1[srv01_hdd]: /usr
Legend2[srv01_hdd]: /var
При этом в файле /usr/monitor/SRV-01.log (который, например, может формировать perl скрипт):
HDD: /usr and /var
1713067
686879
14 days, 06:33:17
Где 1-ая строка — описание, 2-ая — кол-во занято в разделе /usr, 3-я -кол-во занято в разделе /var, 4-ая время uptime данного сервера.
Используя этот пример можно «налепить» любых графиков 😉
Вам в помощь может пригодится программа cfgmaker, которая устанавливается вместе с mrtg (идет вместе с mrtg), обычно находится тут: /usr/local/bin/cfgmaker
Пример запуска:
cfgmaker pub@127.0.0.1 > myrouter.conf
После завершения выполнения в файле myrouter.conf будет конфиг mrtg для хоста 127.0.0.1
Отдельные файлы конфигов (как например myrouter.conf) можно «включать» в глобальный конфиг /usr/local/etc/mrtg/mrtg.conf с помощью include, дописав в файле mrtg.conf строчку:
include: /usr/local/etc/mrtg/myrouter.conf
Рекомендую полистать до полного просветления:
- man snmpwalk
- man smnpget
- man snmpset
- man snmpconf
- man cfgmaker
(P.S. команда man выполняется в консоле сервера)
Ссылки:
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: Николаев Дмитрий (virus (at) subnets.ru)