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

в 14:55, , рубрики: lmsensors, proxmox, proxmox 3, виртуализация

Приветствую, коллеги.

Появилась недавно маленькая задача по общей оценке состояния хост-машины с 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 "<pre>" + value + "</pre>";
}

Чуть ниже находим строку

var rows = {

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

sensinfo : { header: gettext('Sensors information'), required: true, renderer: render_sensinfo },

Перезагружаем сервер (или выгружаем перловый модуль Nodes.pm, как это сделать «на лету» — я пока не знаю, не перловщик). Теперь заходим в web-интерфейс, выбираем ноду, жмем вкладку Summary и наблюдаем ежесекундно обновляющуюся информацию по датчикам. Выглядит все примерно так:

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

В принципе, используя эту основу можно выводить любую нужную вам информацию через ежесекундные 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.

Автор: slava_k

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js