воскресенье, 22 мая 2016 г.

Мониторинг Asterisk по протоколу SNMP

Меня заинтересовало наличие в Asterisk модуля res_snmp. Я решил попробовать настроить его и узнать, за какими параметрами Asterisk можно наблюдать с его помощью.

1. Установка и настройка SNMP-агента

Устанавливаем SNMP-агента:
# apt-get install snmpd
Нужно заглянуть в файл /etc/default/snmpd и убедиться, что запуск SNMP-агента разрешён:
SNMPDRUN=yes
Редактируем файл конфигурации SNMP-агента /etc/snmp/snmpd.conf, приведя к следующему виду:
agentAddress udp:127.0.0.1:161
  
view asterisk included .1.3.6.1.2.1.1.1
view asterisk included .1.3.6.1.2.1.1.2
view asterisk included .1.3.6.1.2.1.1.4
view asterisk included .1.3.6.1.2.1.1.5
view asterisk included .1.3.6.1.2.1.1.6
view asterisk included .1.3.6.1.4.1.22736

rocommunity public 127.0.0.1 -V asterisk
rwcommunity private 127.0.0.1 -V asterisk

createUser zabbix SHA auth_password AES encryption_password
rouser zabbix priv -V asterisk

sysLocation Ufa
sysContact Vladimir Stupin <vladimir@stupin.su>
sysObjectID .1.3.6.1.4.1.22736.1

master agentx
agentXSocket /var/agentx/master
agentXPerms 0660 0775 nobody asterisk
Указанный выше файл конфигурации является лишь примером. Реально вы можете захотеть поменять часть настроек. Например:
  • agentAddress - прослушиваемый SNMP-агентом IP-адрес,
  • view asterisk included - в этом представлении я ограничил доступ к OID'ам. Доступ разрешён только к OID'ам, содержащим информацию об узле и к дереву OID'ов с состоянием Asterisk,
  • rocommunity - строка сообщества для чтения данных для SNMP версий 1 и 2c,
  • rwcommunity - строка сообщества для записи данных для SNMP версий 1 и 2c,
  • createUser - строка описывает одного пользователя SNMP версии 3 - его имя, пароли и алгоритмы аутентификации и шифрования,
  • rouser - описывает права доступа пользователя SNMP версии 3,
  • sysLocation - строка местонахождения оборудования. Бывает полезно в больших компаниях, когда имеется много оборудования и сотрудников, или оборудование расположено в необычном месте: за фальшь-потолком или на радиомачте,
  • sysContact - строка с контактными данными администратора оборудования. Бывает полезно в больших компаниях, чтобы найти сотрудника, ответственного за оборудование,
  • sysObjectID - идентификатор типа оборудования. Полезно, например, для автоматического обнаружения оборудования и автоматической постановки на контроль с шаблоном, соответствующим этому OID'у,
  • master, agentXSocket, agentXPerms задают настройки Unix-сокета SNMP-агента, к которому будут подключаться субагенты.
Для генерации строк сообщества и паролей я рекомендую воспользоваться, например, программой pwgen, которую можно установить из одноимённого пакета:
# apt-get install pwgen
Сгенерировать 16-символьный пароль можно следующим образом:
$ pwgen 16
Чтобы Asterisk, запущенный от пользователя asterisk, имел доступ к каталогу с Unix-сокету SNMP-агента, меняем права доступа к каталогу /var/agentx:
# chmod o+rx /var/agentx
Перезапускаем SNMP-агента:
# systemctl restart snmpd.service
2. Включение SNMP-модуля в Asterisk

Открываем файл /etc/asterisk/res_snmp.conf и приводим его к следующему виду:
[general]
subagent = yes
enabled = yes
После чего просим Asterisk выгрузить модуль SNMP и загрузить его снова:
# asterisk -rx 'module unload res_snmp.so'
# asterisk -rx 'module load res_snmp.so'
3. Использование MIB-файлов

Посмотреть OID'ы в виде дерева:
$ snmptranslate -M /var/lib/mibs/:/var/lib/mibs/ietf/:/var/lib/mibs/iana/ -m DIGIUM-MIB:ASTERISK-MIB -Tp -Td -Ln 1.3.6.1.4.1.22736 | less
Посмотреть значения OID'ов с их символьными именами по SNMP второй версии можно следующим образом:
$ snmpwalk -v 2c -c public 127.0.0.1 .1.3.6.1.4.1.22736.1 | less
Для SNMP третьей версии то же самое делается так:
$ snmpwalk -v 3 -u zabbix -n '' -l authPriv -a SHA -x AES -A auth_password -X encryption_password 127.0.0.1 .1.3.6.1.2.4.1.22736.1 | less
4. Шаблоны для Zabbix

В качестве основы для шаблона я воспользовался официальными MIB-файлами:
Я подготовил два шаблона для контроля интересующих меня параметров с помощью Zabbix:
Поменять строки сообщества и пароли можно при помощи массового редактирования элементов данных. Из шаблона для второй версии SNMP можно массовым редактированием легко получить и шаблон, использующий первую версию SNMP. Собственно, массовым редактированием можно получить и шаблон, использующий третью версию SNMP.

На снимке экрана ниже показаны имеющиеся в шаблоне элементы данных:

На этом снимке показаны результаты опроса Asterisk по этому шаблону:

К сожалению, SNMP-модуль Asterisk не позволяет узнать состояние регистраций абонентов. Если бы состояние регистраций можно было бы контролировать, я обязательно добавил бы в шаблон низкоуровневое обнаружение регистраций и контроль их состояний. Это позволило бы своевременно обнаруживать проблемы со шлюзами абонентов.

Один из вариантов какого бы то ни было решения этой проблемы может быть следующим. Если VoIP-шлюзы находятся в находятся в отдельной сети, где больше нет никакого оборудования, можно воспользоваться функциями обнаружения Zabbix и автоматически ставить обнаруженные IP-адреса хотя бы на контроль доступности по ICMP.

2 комментария:

Анонимный комментирует...

Спасибо за шаблоны, комрад! Те, что находил до твоих - не хотели грузиться в заббикс((

morbo комментирует...

Надо было смотреть, для какой версии Zabbix шаблоны.