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