- NetPing
- >
- Блог
- >
- Примеры применения
- >
- Получение SNMP TRAP сообщений на устройствах NetPing под FreeBSD
Получение SNMP TRAP сообщений на устройствах NetPing под FreeBSD
В этой статье будет показан пример использования утилит snmptrapd (net-SNMP) и snmptt для получения и обработки SNMP TRAP сообщений от оборудования NetPing. Статья имеет структуру пошаговой легко воспроизводимой инструкции.
Строить систему обработки SNMP TRAP сообщений будем на свежеустановленной FreeBSD (9.1). Для начала от вас требуется установить ОС, подключить сервер к сети, настроить ssh доступ, настроить звуковую карту (если планируется использовать звуковые уведомления).
Готово? Тогда приступаем.
Подготовка
Подключаемся к серверу по ssh, повышаем привилегии командой su.
Установка актуального дерева портов
root@trapper:/usr/ports # cd /usr/ports
root@trapper:/usr/ports # portsnap fetch extract
Установка утилиты portinstall
Эта утилита облегчает работу с портами. В результате будет установлен portinstall и пакеты, от которых он зависит, в том числе perl, который нам пригодится позже. В процессе инсталляции у вас будут спрашивать, какие опции включать для различных пакетов. На все вопросы нажимаем ОК, что оставит все данные в значении по умолчанию.
root@trapper:/usr/ports # cd ports-mgmt/portupgrade
root@trapper:/usr/ports/ports-mgmt/portupgrade # make install clean
root@trapper:/usr/ports/ports-mgmt/portupgrade # cd ../../
root@trapper:/usr/ports # rehash
NET-SNMP
NET-SNMP – это набор утилит для решения множества задач, связанных с SNMP. Мы будем использовать демон snmptrapd для приёма SNMP TRAP сообщений от оборудования NetPing.
Установка NET-SNMP
Устанавливаем порт net-snmp (snmptrapd). Именно он слушает udp сокет 162 и будет принимать TRAP сообщения. Здесь также будут задавать вопросы про опции. Всё оставляем по умолчанию, однако следует обратить внимание на опцию PERL_EMBEDDED пакета net-snmp. Она должна быть включена (значение по умолчанию). Она понадобится для snmptt.
root@trapper:/usr/ports # portinstall net-mgmt/net-snmp
Настройка и пробный запуск net-snmp (snmptrapd)
Включаем автозапуск демона snmptrapd, добавляем опцию -On. Эта опция запрещает конвертацию OID в текстовое представление.
root@trapper:/usr/ports # echo 'snmptrapd_enable="YES"' >> /etc/rc.conf
root@trapper:/usr/ports # echo 'snmptrapd_flags="-On"' >> /etc/rc.conf
Создаём конфигурационный файл для snmptrapd.
С этой конфигурацией snmptrapd будет принимать SNMP TRAP от всех устройств с community SWITCH (community по умолчанию на устройствах NetPing) и складывать их в файл /var/log/snmptrapd.log.
root@trapper:/usr/ports # mkdir /usr/local/etc/snmp
root@trapper:/usr/ports # echo 'pidFile /var/run/snmptrapd.pid' > /usr/local/etc/snmp/snmptrapd.conf
root@trapper:/usr/ports # echo 'authCommunity log,execute,net SWITCH' >> /usr/local/etc/snmp/snmptrapd.conf
root@trapper:/usr/ports # echo '[snmp] logoption f /var/log/snmptrapd.log' >> /usr/local/etc/snmp/snmptrapd.conf
root@trapper:/usr/ports # echo '[snmp] logoption s 1' >> /usr/local/etc/snmp/snmptrapd.conf
Запускаем демон snmptrapd:
root@trapper:/usr/ports # cd /usr/local/etc/rc.d
root@trapper:/usr/local/etc/rc.d # ./snmptrapd restart
На данном этапе сервер готов принимать SNMP TRAP сообщения от устройств NetPing. Для проверки нам нужно настроить NetPing, чтобы он отправлял SNMP TRAP сообщения на сервер. Для этого:
1)На устройстве NetPing указываем IP адрес нашего сервера в поле "Адрес для посылки trap сообщений" на странице Настройки;
2) Включаем генерацию тестовых трапов, для этих целей хорошо подходят температурные датчики. Переходим на страницу «Термодатчики». Выбираем канал "Датчик 1" (даже если к нему не подключен датчик), заполняем поле «Памятка», в поле "Верхн. граница нормы, °C" указываем любое число, например, 61. В поле "Нижн. граница нормы, °C" указываем любое число выше показаний датчика, например, 11. В поле "Периодическая посылка" выставляем значение 60.
3)Нажимаем на кнопку "Применить изменения" на странице «Термодатчики». Теперь NetPing будет присылать SNMP TRAP сообщение на сервер один раз в минуту.
Если всё сделано правильно, эти сообщения должны откладываться в файл /var/log/snmptrapd.log.
Их вид:
10.20.0.252: Enterprise Specific trap (.1) Uptime: 5:03:02.34, .1.3.6.1.4.1.25728.8800.2.1.0 = INTEGER: 1, .1.3.6.1.4.1.25728.8800.2.2.0 = INTEGER: 0, .1.3.6.1.4.1.25728.8800.2.3.0 = INTEGER: 0, .1.3.6.1.4.1.25728.8800.2.4.0 = INTEGER: 11, .1.3.6.1.4.1.25728.8800.2.5.0 = INTEGER: 61, .1.3.6.1.4.1.25728.8800.2.6.0 = STRING: "test", .1.3.6.1.4.1.25728.90.1.0 = ""
Если файл /var/log/snmptrapd.log пуст то необходимо проверить настройки, а также получение SNMP trap сообщений сервером с помощью утилиты tcpdump.
snmptt
Для приведения сообщений от snmptrapd в более удобный вид, создана утилита snmptt. Переходим к snmptt.
Установка snmptt
root@trapper:/usr/local/etc/rc.d # cd /usr/ports
root@trapper:/usr/ports # portinstall net-mgmt/snmptt
Настройка snmptt
После инсталляции открываем для редактирования файл /usr/local/etc/snmp/snmptt.ini любым редактором, например, командой edit /usr/local/etc/snmp/snmptt.ini
В этом файле правим директиву mode. Строка должна иметь вид:
mode = daemon
В самом низу конфигурационного файла правим блок snmptt_conf_files
Он должен иметь вид:
snmptt_conf_files = <<END
/usr/local/etc/snmp/snmptt.conf.generic
/usr/local/etc/snmp/netping.conf
END
Выходим из редактора edit командой ctr+c exit. Вы можете скачать готовый файл snmptt.ini в конце статьи.
Теперь нужно подготовить файл /usr/local/etc/snmp/netping.conf. Этот файл содержит определения SNMP TRAP сообщений, посылаемых устройствами NetPing. Этот файл задаёт действия, которые будут выполнены при получении SNMP TRAP. Вы можете скачать готовый файл netping.conf в конце статьи, либо его можно изготовить самостоятельно. Для этого нужно скачать MIB файл вашего устройства NetPing и подать его на вход утилите snmpttconvertmib (она устанавливается вместе с snmptt).
Включаем автозапуск snmptt:
root@trapper:/usr/ports # echo 'snmptt_enable="YES"' >> /etc/rc.conf
Перезаписываем конфигурацию snmptrapd. Старая конфигурация была ориентирована на сохранение сообщений в файл, новая будет передавать их в snmptt.
root@trapper:/usr/ports # echo 'pidFile /var/run/snmptrapd.pid' > /usr/local/etc/snmp/snmptrapd.conf
root@trapper:/usr/ports # echo 'traphandle default /usr/local/sbin/snmptthandler' >> /usr/local/etc/snmp/snmptrapd.conf
root@trapper:/usr/ports # echo 'disableAuthorization yes' >> /usr/local/etc/snmp/snmptrapd.conf
Создаём директории, которые будет использовать snmptt:
root@trapper:/usr/ports # mkdir /var/log/snmptt
root@trapper:/usr/ports # mkdir /var/spool/snmptt
Перезапускаем snmptrapd (т.к. его конфигурация изменилась) и запускаем демон snmptt:
root@trapper:/usr/ports # cd ../local/etc/rc.d
root@trapper:/usr/local/etc/rc.d # ./snmptrapd restart
root@trapper:/usr/local/etc/rc.d # ./snmptt restart
Если вы использовали файл netping.conf из этой статьи, то в файле /var/log/snmptt/snmptt.log должны появиться сообщения вида:
Sun Jun 16 14:11:51 2013 .1.3.6.1.4.1.25728.8800.2.0.1 Normal "Status Events" 10.20.0.252 - Thermo sensor crossed threshold. sensor: 1 (test) host: 10.20.0.252 temperature: 0 threshold low: 11 threshold high: 61
E-mail уведомления
Теперь добавим более интересную функцию - отправка e-mail уведомлений при получении TRAP сообщения. В данном примере скрипт для отправки e-mail написан на языке JavaScript, для его интерпретации используется nodejs. Если у вас другие предпочтения, то вы можете найти в интернете пример скрипта на любом языке программирования. Чтобы взаимодействовать с нашей системой скрипт должен иметь имя emailer и принимать один адргумент командной строки - текст сообщения.
Устанавливаем nodejs и менеджер пакетов npm:
root@trapper:/usr/local/etc/rc.d # cd /usr/ports
root@trapper:/usr/ports # portinstall www/node
root@trapper:/usr/ports # portinstall www/npm
root@trapper:/usr/ports # rehash
Создаём директорию для скрипта и устанавливаем библиотеку nodemailer;
root@trapper:/usr/ports # mkdir /usr/local/bin/nodescripts
root@trapper:/usr/ports # cd /usr/local/bin/nodescripts
root@trapper:/usr/local/bin/nodescripts # npm install nodemailer
Теперь вам нужно скачать скрипт emailer (в конце статьи), положить его в папку /usr/local/bin/nodescripts, и отредактировать его. Скрипт использует почтовый сервер gmail для отправки сообщений.
Редактируем следующие поля:
auth: {
user: "foobar@gmail.com", //аккаунт gmail
pass: "zzz" //пароль
}
var mailOptions = {
from: "Net Monitor <foobar@gmail.com>", // Адрес отправителя (аккаунт)
to: "receiver@foo.bar", // Список получателей, через запятую
subject: "Alarm", // Subject line
text: message // plaintext body
}
Скрипт emailer - это просто текстовый файл в котором в открытом виде лежит пароль от аккаунта gmail, чтобы его скрыть от посторонних глаз меняем права доступа к файлу:
root@trapper:/usr/local/bin/nodescripts # chmod 600 /usr/local/bin/nodescripts/emailer
Если вы используете файл netping.conf, приложенный к данной статье, то вы уже должны увидеть email сообщения в вашем почтовом ящике. Если же вы создали файл netping.conf самостоятельно, то в него необходимо добавить директиву EXEC для вызова скрипта emailer - скачайте файл netping.conf и сделайте по аналогии.
Если писем нет, то попробуйте запустить скрипт emailer из командной строки:
root@trapper:/usr/local/bin/nodescripts # node emailer "test email"
Звуковые уведомления
Ещё один пример - проигрывание mp3 файла при получении TRAP сообщения. Этот пример использует то же принцип, что и предыдущий – использование директивы EXEC для запуска внешнего приложения. Для проигрывания аудиофайлов нам понадобится плеер - mplayer, переходим к его установке. Обратите внимание на опции mplayer. У него есть опциональный GUI интерфейс, который за собой тянет очень много зависимостей, для большинства серверов это не нужно. Отключите опции mplayer: GUI, и все, у которых в описании есть слово X11.
root@trapper:/usr/ports # portinstall -C multimedia/mplayer
После установки плеера создаём директорию /usr/mp3
root@trapper:/usr/ports # mkdir /usr/mp3
И загружаем в неё файл alarm.mp3, возьмите любой файл mp3.
По аналогии с директивой EXEC для запуска скрипта emailer, в файл /usr/local/etc/snmp/netping.conf добавляем строку
EXEC /usr/local/bin/mplayer /usr/mp3/alarm.mp3
Для одного trap сообщения можно указать несколько директив EXEC.
Ссылки
Документация snmptt: http://snmptt.sourceforge.net/docs/snmptt.shtml
Страница проекта Nodemailer, в директории examples есть различные примеры использования: https://github.com/andris9/Nodemailer

Цена: 2 340 руб.

Цена: руб.

Цена: 1 045 руб.

Цена: 42 500 руб.

Цена: 950 руб.

Цена: 15 730 руб.

Цена: 4 290 руб.

Цена: 6 200 руб.

Цена: 20 280 руб.

Цена: 20 280 руб.

Цена: 10 980 руб.

Цена: 8 580 руб.

Цена: 18 000 руб.

Цена: 27 300 руб.

Цена: 1 429 руб.

Цена: 3 354 руб.

Цена: 2 240 руб.

Цена: 1 400 руб.

Цена: 8 973 руб.

Цена: 15 700 руб.

Цена: 1 224 руб.

Цена: 6 700 руб.

Цена: 3 800 руб.