Нанопатч до веб-інтерфейсу 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/ВУЗЛА/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.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.