Исследование возможностей мониторинга регистраторов речевой информации STC Smart Logger BOX и плагин check_snmp_stc_slbox для базового мониторинга в Icinga

Investigation of the monitoring capabilities of speech recorders STC Smart Logger BOXКогда, в своё время, мы начали работать с системой регистрации телефонных переговоров "Незабудка-II" и с регистраторами речевой информации "Smart Logger BOX" (далее SLBox) от компании "ЦРТ", то одним из первых логичных вопросов был вопрос мониторинга работоспособности этих самых регистраторов. Предложенная производителем на тот момент времени, так называемая, программа мониторинга "Status Monitor" (STC-S449) после развёртывания и изучения функционала показала себя, как не выдерживающее никакой критики программное решение, которое, по моим личным ощущениям, за миску супа писал какой-то голодный студент, прикованный наручниками к батарее. То, зачем это было реализовано именно в таком виде, для меня так и осталось непостижимым.

Исследование возможностей для мониторинга

В поисках других, более вменяемых, вариантов мониторинга устройств SLBox, добрались до изучения функционала "SNMP агент", реализованного во встроенной операционной системе Linux на SLBox. И здесь меня также ждало крайнее изумление. За время своей работы с разнообразным оборудованием, имеющим реализацию протокола SNMP, я привык видеть такие классические механизмы, как:

  • Инициируемый внешней системой мониторинга SNMP-опрос устройства методом Get;
  • Инициируемая самим устройством отсылка оповещений SNMP Trap при наступлении какого-то события на этом устройстве.

Такие механизмы привычны, понятны и вполне вписываются в логику работы с любой современной системой мониторинга сетевых устройств. Однако в устройствах SLBox под понятием "SNMP агент" скрывался непохожий на эти классические схемы механизм, реализующий постоянную (с интервалами от 10 до 60 секунд), вообще никак не регулируемую, "бомбардировку", SNMP-оповещениями.

После изучения работы этого механизма стало очевидно, что настроить мониторинг SLBox в системе мониторинга Icinga по классической схеме с SNMP опросом или получением SNMP трапов не получится. Здесь возникала необходимость в разработке правил snmptt (MIB-файлы отсутствуют для SLBox, как класс) и написании отдельного скрипта со сложными механизмом работы (разгребаем море прилетающих трапов, постоянно пишем их данные в какой-то временный каталог на сервере мониторинга, и уже из этого каталога выполняем опрос значений нужными нам интервалами из системы мониторинга).

Учитывая все эти обстоятельства, я, конечно же, несколько раз общался со службой поддержки ЦРТ на предмет реализации мониторинга. Было общение в духе "Вы чем думали, когда так SNMP-агента реализовали?…Это надо менять." – "Что имеем, то имеем…а если хочешь другого – мы готовы, но только за звонкую монету." Было и "Ребята, ну дайте хотя бы возможность указывать Community, отличное от 'public' и настраивать интервал бомбардировки…" – "Мальчик, иди отсюда". В итоге, я понял, что от производителя ждать нечего и всё-таки придётся садится за тему со скриптовой обработкой этой самой SNMP-бомбардировки. Но, учитывая сложность затеи, я как-то всё оттягивал это "удовольствие".

В конце прошлого года после очередного случая нештатной работы одного из устройств SLBox, снова вспомнили про вопрос мониторинга, и у меня возникла дополнительная идея поколупать веб-интерфейс управления SLBox на предмет возможности мониторинга через протокол HTTP. В ходе экспериментов было обнаружено, что со встроенным в SLBox веб-сервером можно разговаривать через некий недокументированный Web-API в формате JSON.

Например, если отослать на устройство HTTP запрос вида <адрес устройства>/index.cgi?action_au=login&passw=<хеш пароля>&user=<имя пользователя>, например:

https://slbox01.holding.com/index.cgi?action_au=login&passw=24f57c070d2b754bb66a8a73ac32f82d25b9bcf9&user=admin

То в качестве ответа от устройства, мы получим некий сессионный идентификатор:

Cookie: sl2_session_id=7B8331FD6D1EE931481F91764C2A810D

И дальше, уже используя этот идентификатор, в рамках этой HTTP-сессии мы можем запрашивать с устройства самую различную информацию запросами вида:

/api/?action=system_info&uid=7B8331FD6D1EE931481F91764C2A810D

Все подобные запросы к API, как и вычисляемый в начале хеш пароля пользователя, можно отловить, используя режим отладки в любом современном браузере, при перемещении по веб-интерфейсу SLBox.

Составив список отловленных запросов к API, из которых можно получить какую-либо интересную информацию в контексте вопроса мониторинга, я в очередной раз написал письмо в службу поддержки ЦРТ с просьбой дать рекомендации о корректной интерпретации результатов некоторых JSON-ответов.

Появление поддержки SNMP Get

В конце Января этого года в ответ от службы поддержки была получена рекомендация перестать заниматься самодеятельностью с недокументированными функциями WebAPI и предложено попробовать новую версию прошивки SLBox 2.2.1.1913, где наконец-то реализован функционал опросов методом SNMP Get. Если честно, я был удивлён… Видимо, всё-таки я был не единственный клиент, раздосадованный первоначальной реализацией SNMP и в конце концов "лёд тронулся" Smile

Заливка в устройство SLBox новой прошивки и SNMP-опрос устройства показали, что функционал SNMP-агента находится в каком-то зачаточном состоянии и возвращаемые в результате опроса данные имеют довольно скромный набор информации. Но, в любом случае, это уже однозначно лучше того, что мы видели ранее.

Плагин мониторинга к Icinga

В связи с появлением новой возможности реализовать базовый мониторинг устройств SLBox более вменяемым способом, был создан плагин для системы мониторинга Icinga - check_snmp_stc_slbox.

Скачать плагин можно c GitHub.

Плагин требует наличия утилиты snmpget и имеет несколько режимов работы. Эти режимы обозначены во встроенной справке с описанием допустимых параметров вызова:

# ./check_snmp_stc_slbox.sh --help

Пример использования плагина в режиме 'hdd' для мониторинга текущего заполнения дискового накопителя:

# ./check_snmp_stc_slbox.sh --mode=hdd --warning='95' --critical='98' --hostname='slbox01.holding.com' --protocol='2c' --community='public'

OK: HDD Usage - 1.06 % | 'hddusage'=1.06;95;98;;100

Пример использования в режиме 'sensors' для мониторинга температурного сенсора на дисковом накопителе:

# ./check_snmp_stc_slbox.sh --mode=sensors -w '45' -c '50' --hostname='slbox01.holding.com' --protocol='2c' --community='public'

OK: HDD Temperature Sensor - 40 C | 'hddtemperature'=40;45;50;;

Получение информации о времени непрерывной работы устройства в режиме 'uptime':

# ./check_snmp_stc_slbox.sh -m 'uptime' -H 'slbox01.holding.com' -C 'public' -P '2c'

Uptime: 39 days 04 hours 03 minutes 05 seconds | 'uptime'=3384185;;;;

Получение текущего состояния служб SLBox в режиме 'services':

# ./check_snmp_stc_slbox.sh --mode=services -RZXF \
-H 'slbox01.holding.com' -C 'public' -P '2c'

OK: SLBox Services are running
Current state:
 + Recorder service running
 + Cleaner service running
 + XCtl service running
 + FTP Server service running

В данном примере набор ключей -RZXF определяет перечень служб, которые мы хотим проверять, что тождественно совместно используемым опциям --check-recorder --check-cleaner --check-xctl --check-ftpserver.

Внесу немного пояснений о значении статуса основных служб на устройстве, который можно получать по SNMP (по данным из документации и данным, предоставленным службой поддержки ЦРТ):

  • Служба "Recorder" - Служба записи фонограмм. Если служба не работает, то фонограммы перестают записываться.
  • Служба "Cleaner" - Служба управляет хранением фонограмм. Если служба не работает, то устаревшие фонограммы не удаляются и возможно переполнение диска.
  • Служба "xctl" - Системная служба, реализующая управляющий протокол устройства, который проверяет связь между базовой платой, мезонином и ПО.
  • Служба "ftp_server" - Служба доступа к записям фонограмм по протоколу FTP.
  • Служба "SmdrAnalyzer" - Служба обрабатывает дополнительные данные, полученные от АТС в формате SMDR/CDR при наличии в устройстве мезонина STC-H597, предназначенного для работы с цифровым потоком E1.
Интеграция в Icinga Director

В Icinga Director плагин подключается по аналогии с примерами, которые мы уже рассматривали ранее в цикле заметок об Icinga.

Можно описать несколько Команд (Icinga Command), относящихся к разным режимам работы плагина:

Add Icinga Commands in Icinga Director for Smart Logger BOX

При описании каждой Команды в Icinga Director для определения значений аргументов, передаваемых плагину можно использовать те же Поля Данных (Data Field), которые были созданы на этапе настройки поддержки SNMP.

Set Icinga Command Arguments in Icinga Director for SLBox HDD monitoring

В свойствах Команды можно подключить Поля (Fields), чтобы Шаблоны Служб, использующие эту Команду имели возможность отдельной настройки параметров для границ Warning/Critical:

Add Icinga Command Fields in Icinga Director

После описания Команд создадим Шаблоны Служб (Service Template), с привязкой к ранее созданным Командам и указания таких параметров, как интервал опроса.

Add Icinga Service Templates in Icinga Director for Smart Logger BOX

Затем, на основании созданных Шаблонов Служб, создадим Apply-Rule для динамического назначения соответствующих Служб на Хосты.

Разумеется, на самих устройствах SLBox в разделе веб-консоли управления "Настройки" > "Прочие настройки" должен быть включен "SNMP агент" и указан IP-адрес сервера мониторинга, с которого будет выполняться опрос.

Enable SNMP Agent in Smart Logger BOX Web Console

Конечный результат для устройств SLBox в веб-консоли Icinga Web будет выглядеть примерно следующим образом:

Monitoring STC SLBox in Icinga Web

В качестве заключения

Сейчас у службы поддержки ЦРТ снова в работе очередное моё обращение с предложениями по расширению набора данных, получаемых методом SNMP Get. И у меня всё же теплится надежда на то, что ЦРТ не бросят направление развития SNMP-агента в текущем виде и продолжат расширять его функциональность, чтобы регистраторы SLBox стали действительно похожи на "Enterprise Ready" решение.

Только один комментарий Комментировать

  1. Алексей Максимов / Автор записи

    Обновлён плагин check_snmp_stc_slbox.sh. Добавлена поддержка определения ситуаций, когда SNMP OID температурного сенсора HDD возвращает нулевое значение (такое возможно в ситуациях с нештатной работой диска).

Добавить комментарий