Нанопатч к веб-интерфейсу proxmox ve 3.3 для отображения lmsensors

Приветствую, коллеги.Появилась недавно маленькая задача по общей оценке состояния хост-машины с proxmox-ом, с которой работают практически только через web-интерфейс. Просто, перед стартом длительных ресурсоемких задач (и немного позже) хотелось бы видеть что машина «жива» и нагрузка не приводит к потенциально опасной ситуации, все прохладно и не перегружено. Понятно, что есть более продвинутые штуки типа nagios/munin и пр., с разными схемами оповещения и контроля за ситуацией, красивыми графиками и хранением всей истории данных. Но сузим все же задачу к созерцанию простой текстовой информации, которую можно получить одной консольной командой. И выведем эту информацию в строку таблицы во вкладке «Summary» для ноды.Итак, lm sensors — софт, позволяющий собирать информацию о разных датчиках в системе — температуру, напряжение и скорость вращения вентиляторов. Будем использовать его, устанавливаем:

apt-get install lm-sensors Далее запускаем sensors-detect, выбираем yes/no для сканирования нужных категорий датчиков в системе и после запрашиваем полную информацию о них:

sensors Теперь сам патч (не git-овый, а «ручной»). Перед началом изменений делаем копии файлов, понимаем, что это все должно происходить в «нерабочее» сервисное время. Ну и весь страх и риск в случае чего — естественно на вас. Также помним, что это все слетит после ближайшего обновления вами proxmox-а.

1. Серверная часть — perl-модуль Nodes, в нем нужный нам обработчик /api2/json/nodes/NODENAME/status:

vi /usr/share/perl5/PVE/API2/Nodes.pm Идем примерно на 262 строчку и добавляем эту:

$res→{sensinfo} = `sensors`; Знатоки перла могут обернуть эту строку условием доступности на машине команды sensors.

2. Клиентская часть — javascript-модуль pvemanager-а:

/usr/share/pve-manager/ext4/pvemanagerlib.js Идем примерно на 12572 строчку и добавляем эти:

var render_sensinfo = function (value) { return »

" + value + "
»; } Чуть ниже находим строку

var rows = { и в удобном для вас порядке строк в таблице (у себя я добавил после rootfs), ниже, добавляем эту:

sensinfo: { header: gettext ('Sensors information'), required: true, renderer: render_sensinfo }, Перезагружаем сервер (или выгружаем перловый модуль Nodes.pm, как это сделать «на лету» — я пока не знаю, не перловщик). Теперь заходим в web-интерфейс, выбираем ноду, жмем вкладку Summary и наблюдаем ежесекундно обновляющуюся информацию по датчикам. Выглядит все примерно так:

a0e68e06bce44935ad5b3056843cc4c3.png

В принципе, используя эту основу можно выводить любую нужную вам информацию через ежесекундные status-оповещения нод, не только sensors. Важно понимать при этом, что запуск сбора такой информации не должен занимать большое время (на порядок-другой меньше секунды).

Если у кого-то есть время и желание этот результат оформить во что-то более публичное (pull-request в pve-manager) — you’re welcome. Но я лично в таком не вижу особой необходимости, задача мониторинга температуры и вентиляторов в минимально необходимом для меня варианте решена.

Спасибо за внимание, надеюсь информация выше окажется кому-то полезной.

Ссылки 1. Сайт LM Sensors: lm-sensors.org.2. GitHub репозиторий pve-manager: github.com/proxmox/pve-manager.3. Сам proxmox: proxmox.com.

© Habrahabr.ru