Примеры применения
13.09.2013

Получение 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


  • Все устройства

Основные теги


Каталог устойств мониторинг серверных комнат и шкафов
Все устройства
Устройство UniPing v3
Устройство NetPing 2/PWR-220 v1/SMS
Устройство NetPing 2/PWR-220 v3/ETH
Устройство NetPing /PWR-220 v3/ETH
Устройство UniPing server solution
Устройство UniPing server solution v3/SMS
Устройство NetPing IO v2
Устройства NetPing
Каталог датчиков для устройств NetPing
Устройство NetPing 8/PWR-220 v3/SMS
Устройство NetPing 2/PWR-220 v2/SMS
Устройство NetPing 4/PWR-220 v3/SMS
Устройство NetPing SMS
Адаптер WiFi VAP11N
Коммутатор PS104GT
Устройство NetPing Mini-UPS
Коммутатор NP-SM4
Сплиттер POE 12В (стандарта 802.3af)
IRC-TR v2 (ИК модуль расширения)
Каталог устройств удалённого управления и распределения электропитания NetPing
Устройство UniPing server solution v3
Датчик разбития стекла (Стекло-3 ИО 329-4), 2м
Переходник для NetPing IO v2
Устройство NetPing PWR68-01
Датчик мониторинга 220В 1-wire
Адаптер DKST910.8
Устройство NetPing DKST61-01
Блок питания 48В 1,5А (мод.HRS20005)
Датчик температуры TS, 1м
Датчик температуры, (T811), 2м
Датчик температуры WT, 1м
Датчик протечки, модель 2605, 2м
Датчик протечки H2О
Датчик температуры 1-wire, (THS), 2м
МАЯК-12-СТ
Датчик движения (PYRONIX COLT QUAD PI ПИК детектор), 2м
Датчик движения (SWAN-QUAD ИК детектор квадросенсор), (2м)
BM8070D Силовое реле 16А/250В на DIN-рейку
MP701 Исполнительный элемент (4 независимых канала по 2 кВт 10А)
Датчик дыма комбинированный (дым/тепло) ИП 212/101-2М-A10R с базой Е412NL
МОЛЛЮСК-12/1,5
Внешний ИБП SKAT-12DC-1.0 Li-ion
ИКС-1 извещатель охранный инфракрасный активный однолучевой
Готовое решение для мониторинга серверной комнаты на основе UniPing server solution v3/SMS
Датчик охранный (Извещатель охранный ИО102-20/Б2П, 2м)
▼ Все теги
Новинки
Блок розеток SNR-PDU-08S-1
Блок розеток SNR-PDU-08S-1 предназначен для подключения различного оборудования к сети с напряжением подробнее...

Цена: 3 236 руб.

Датчик воздушного потока LCF013
Датчик воздушного потока позволяет контролировать наличие или отсутствие напора воздушного потока. Содержит подробнее...

Цена: 2 587 руб.

ИКС-1 извещатель охранный инфракрасный активный однолучевой
Извещатель предназначен для регистрации пересечения нарушителями контролируемой зоны, образованной оптическим подробнее...

Цена: 3 854 руб.

Внешний ИБП SKAT-12DC-1.0 Li-ion
Малогабаритный источник бесперебойного питания (ИБП) со встроенной Li-Ion АКБ. Для питания устройств подробнее...

Цена: 3 200 руб.

МОЛЛЮСК-12/1,5
Малогабаритный блок питания с выходным напряженим 12 В. Имеет уникальный корпус, который позволяет осуществить подробнее...

Цена: 950 руб.

Датчик дыма комбинированный (дым/тепло) ИП 212/101-2М-A10R с базой Е412NL
Комбинированный извещатель предназначен для обнаружения возгораний в помещениях различных зданий и сооружений подробнее...

Цена: 2 098 руб.

MP701 Исполнительный элемент (4 независимых канала по 2 кВт 10А)
Силовой модуль коммутации предназначен для обеспечения управления при помощи устройств NetPing силовыми подробнее...

Цена: 1 400 руб.

BM8070D Силовое реле 16А/250В на DIN-рейку
Блок реле для удалённой коммутации мощной нагрузки при помощи устройств NetPing. Изготавливается в корпусе подробнее...

Цена: 1 350 руб.

Датчик движения (SWAN-QUAD ИК детектор квадросенсор), (2м)
Пассивный инфракрасный детектор движения позволяет регистрировать любое движение в зоне до 18 метров. подробнее...

Цена: 1 516 руб.

МАЯК-12-СТ
Оповещатель охранно-пожарный световой стробоскопический предназначен для выдачи световых стробоскопических подробнее...

Цена: 385 руб.

Датчик протечки H2О
Датчик протечки позволяет определить наличие воды в точке установки датчика. Устанавливается в нескольких подробнее...

Цена: 1 450 руб.

-+ руб. руб.
Итого руб.

Данные о заказе