Найти тему

Мониторинг состояния компьютера в реальном времени

Оглавление

Появилась задача контролировать параметры компьютера и сохранять историю данных. Но не как обычно, загрузка памяти, нагрузка на процессор, но в первую очередь температуры видеокарты, процессора, материнской платы.

Корень задачи пошёл с тех времён, когда было несколько майнинговых ферм и надо было смотреть за параметрами видеокарт.

Но мы не ищем лёгких путей=) Хотелось сделать кроссплатформенное и достаточно легко тиражируемое и при этом достаточно простое решение, что бы можно было развернуть подобную телеметрию на практически любом компе под Win7 - Win10 и, например, на серверах под Linux.

В итоге кросплатформенно не получилось, просто тоже, но методы, использованные при решении задачи достаточно интересны.

Для систем на базе Windows:

Основой системы служит утилита OpenHardwareMonitor, которая собственно собирает данные о системе, и python скрипт, который подключается по интерфейсу wmi к утилите и тянет необходимые данные, обрабатывает их и отсылает в облачный сервис.

В этом примере использовался для простоты и наглядности сервис Народный мониторинг. На нем необходимо зарегистрироваться и можно будет отправлять данные и просматривать историю и настраивать уведомления в зависимости от значений. Базовый период отправки 5 минут.

Настройка

В начале скачиваем с сайта OpenHardwareMonitor саму утилиту. Работа скрипта достоверно проверена с версией 0.9.5. Кроме того у меня в браузере сайт не открылся, видимо блочат его, хотя причина не ясна.

После этого архив распаковываем и папку утилиты помещаем по не очень длинному пути, например "D:\OpenHardwareMonitor".

Запускаем саму утилиту, ставим в ней запуск при старте компьютера.

Для настройки сбора и отправки данных скачиваем с github проекта три файла:
OHW_wmi.py - скрипт, который производит обработку и отправку.
run.cmd - cmd-файл, через который запускаем скрипт из планировщика.
telemetry.xml - задание для планировщика, его надо будет импортировать и скорректировать пути.

Для работы скрипта необходимо установить интерпретатор python версии 3.6. Качаем с официального сайта, при установке обязательно ставим галочку на опции "Path", это необходимо для корректного вызова интерпретатора из командной строки.

После этого в консоли, через "pip" устанавливаем библиотеку для работы с wmi (pip install wmi).

Перед настройкой автоматической отправки данных с компьютера необходимо открыть скрипт в текстовом редакторе (желательно Notepad++, но можно и в обычном блокноте). В строке 10 в кавычках пишем свой логин на narodmon.ru, а в строке 11 можно указать имя компьютера, иначе возьмёт из системы.

Все три файла помещаем в папку OpenHardwareMonitor, затем открываем планировщик задание, для Windows 10 можно воспользоваться поиском в меню Пуск:

Всего лишь поиск...
Всего лишь поиск...

Далее выбираем в левой вкладке "Библиотека планировщика" (1) и нажимаем в правой вкладке "Импортировать задачу" (2):

Вид планировщика
Вид планировщика

В окне создание задачи выбираем вкладку "Действия" (3), дважды кликаем по строчке "Запуск программы" (4), в появившемся окне настраиваем двое путей. Путь на исполняемый файл (5) и путь на рабочую папку (6). Рабочая папка в нашем случае является папкой, где положили cmd-скрипт. Можно скопировать из поля выше, главное убрать целевой файл.

Настройка действия
Настройка действия

После этого нажимаем везде "ОК" и сохраняем задачу.

После этого в течении 5-10 минут на сайте появится информация с данными. Если этого не произошло, то на каком-то этапе настройки возникли проблемы.

Важным моментом является то, что для корректной работы телеметрии необходима постоянная работа OpenHardwareMonitor.

Для систем под Linux расскажу в следующий раз.

В результате получаем из обычного домашнего компа "Умный Девайс", который мониторит своё состояние и собирает статистику.
В скрипте сделан акцент на сборку метрик температуры, также собирается информация о загрузке оперативной памяти и процессора.
При должном желании фильтр можно скорректировать и собирать любые параметры, которые передаёт в wmi утилита.