Легковесный проект для наблюдения и контроля за температурным режимом в серверных помещениях. В данный момент он реально применяется для собственных нужд дежурной смены на моей текущей работе.
- Обеспечить круглосуточный контроль за температурой в двух серверных помещениях.
- Использовать доступное из имеющегося оборудование. Допускается изготовление из подручных материалов.
- Обеспечить своевременное оповещение при возникновении аварий систем охлаждения серверных помещений.
- Реализовать наглядный web или gui интерфейс.
- Логгировать возникающие события, а так же сохранять текущие показатели температуры в базе данных.
В одном из серверных помещений достаточно корректную температуру можно получить только с установленного SNMP-модуля в ИБП. В связи с отсутствием выбора, было принято решение написать парсер страницы веб-интерфейса этого модуля.
В другом помещении корректных и доступных источников для получения температуры не было.
Для оповещения о возникновении аварий был выбран развернутый сервер ip-телефонии asterisk.
Для логгирования событий - легковесная база данных Sqlite.
Идея парсить страницу веб-интерфейса SNMP-модуля провалилась из-за довольно сложной системы аутентификации, которая полностью строилась на скриптах, а применять, например, selenium, показалось чрезмерным. Для решения возникшей проблемы пришлось углубиться в SNMP-протокол, найти на сайте производителя модуля информацию об OID (конкретный идентификатор, отвечающий за температуру датчика модуля), подобрать библиотеку для работы с snmp. Затем осталавалось указать номер порта и найденный OID для формирования запроса, который в ответ присылает актуальное значение температуры.
В серверном помещении без доступных датчиков был установлен микроконтроллер arduino с подключенным к нему, через делитель напряжения, датчиком NTC3950 (NTC термистор).
Arduino было подключено к usb-порту сервера, на котором работает само приложение. Здесь замысел был в том, что цикл, описанный в скетче микроконтроллера:
- каждые 10 секунд оправшивает датчик температуры;
- преобразует считанное напряжение с помощью библиотеки NTC в градусы, относительно модели датчика;
- полученное значение передает на COM-порт (на самом деле UART, который так же расположен на плате arduino).
Затем, настроенный планировщик через определенные интервалы считывает данные с виртуального COM-порта. И, как и в случае с первым датчиком, сравнивает полученное значение с установленное в настройках критической отметкой. В случае превышения критических отметок - приложение отправляет команду на asterisk сервер через ssh, для оповещения. Затем статус оповещения датчика переводится в режим - " выключен" на указанный в настройках период (сейчас это 30 минут), чтобы избежать "спама" звонков. Через указанный интервал температура снова сравнивается и если она, по прежнему, превышает допустимую, происходит повторный отправка команды оповещения. Температура измеряется даже в моменты отключения оповещения, в этом случае, если она быстро снижается и становится ниже критической на 5 градусов, то датчик досрочно переводится в режим оповещения "включен".
За оповещение в этом проекте отвечает сервер asterisk 16 версии. Для этого был написан кастомный экстеншн для диалплана, который отправлет вызов на указанный номер телефона и проигрывает указанный аудиофайл (который тоже, в свою очередь был заранее сгенерирован и помещен в папку для кастомных аудиофайлов на сервере asterisk). Было принято решение использовать команды через ssh-туннель, чтобы не тратить время на изучение глубин документации asterisk и его api.
Рассматриваемый, в начале разработки проекта, вариант с gui был отброшен из-за неудобства использования и вынужденного требования разместить приложение на одном из серверов в серверном помещении без доступных датчиков. В итоге был разработан простейший веб-интерфейс с использованием шаблонизатора thymeleaf. Для исключения нежелательного доступа посторонних лиц был использован модуль spring security и несколько заготовленных, вложенных учетных записей для доступа к сервису. Веб-интерфейс обеспечивает доступ к актуальной температуре в серверных помещениях, архиву событий и настройкам приложения. В разделе настроек действует валидация введенных данных, для исключения случае ввода некорректных данных.
Поставленные задачи выполнены в полном объеме. Развернутое приложение позволяет получать, по указанному ip-адресу - информацию о датчиках, событиях, изменять настройки.
В автоматическом режиме совершать вызов по указанному телефонному номеру и проигрывать аудиофайл, логгировать, хранить и выводить на веб-интерфейс происшедшие события (сюда входят ежечасные показатели температуры, ошибки, предупреждения).