![](https://habrastorage.org/getpro/habr/post_images/448/4c4/b3c/4484c4b3c8858f25cf231cba018c558b.png)
Немного о себе и о рабочей среде
При первом знакомстве с zabbix, меня переполняли эмоции и фантазии о мониторинге всего на свете. Первой была идея предотвращения физических неисправностей путем отслеживания основных показателей железа, например температуру или напряжение, поскольку мне видится весьма логичным и экономически выгодным, поменять термопасту или начать подбирать замену уставшей технике до того как пользователь сообщит о её преждевременной кончине или страшных тормозах. Работаю инженером в компании из двух человек, обслуживаем десяток муниципальных и коммерческих предприятий с парком компьютеров до 100 штук из них 99% windows машин. Занимаемся всем от прокладки сети до настройки информационных систем. Работы много и иногда очень хочется сделать свою жизнь чуточку проще и вот, в очередной такой момент, я столкнулся с системой мониторинга zabbix.
Система мониторинга Zabbix действительно очень мощная и гибкая, но, к сожалению, далеко не все аспекты для отслеживания доступны из стандартных коробочных шаблонов. Таким образом, моя фантазия с треском разбилась об стену отсутствия штатных инструментов мониторинга температур в Windows.
Процесс поиска в интернете поставил меня перед фактом, что вытащить температуры железа без сторонних средств нельзя. При поиске этих самых средств, я столкнулся с популярной утилитой SpeedFan, которая умеет собирать данные о температуре устройств, скорости вентиляторов, напряжений. Но получить от неё готовые к обработке данные без установки еще одной утилиты нет возможности. Плюс ко всему они не open source и требует активации компонента SNMP протокола. Вывод: попробовать на windows сервере без IMPI можно, но как вариант массового распространения в сети – не годен. Дальнейший поиск навел на программы hwmonitor и aida64 — монстры, крупногабаритные и платные.
OpenHardwareMonitor
Уже почти отчаявшись, зацепился за короткое сообщение на англоязычном форуме zabbix. Рекомендовали небольшую open source утилиту OpenHardwareMonitor — она имеет графический интерфейс и умеет считывать температуру устройств с датчиков. И самое главное её автор, по просьбе трудящихся написал консольную версию(последняя версия 28.10.2012), выводящую информацию в готовой для обработки форме.
Версия с GUI:
![Версия с GUI](https://habrastorage.org/getpro/habr/post_images/237/1f9/7af/2371f97af3fd2ea8dcabd878705932ea.png)
Консольная версия:
![Консольная версия](https://habrastorage.org/getpro/habr/post_images/9ff/43e/8d8/9ff43e8d8252fd7949d5368dec2e47db.png)
Консольная версия состоит из двух файлов, exe исполняемого файла и dll библиотеки.
- OpenHardwareMonitorReport.exe
- OpenHardwareMonitorLib.dll
Где брать данные мы поняли, теперь нужно наладить поставки значений показателей Zabbix серверу.
Настройка сервера
Для начала на сервер для узла сети добавим новый элемент данных:
![Новый элемент данных](https://habrastorage.org/getpro/habr/post_images/db5/47a/71a/db547a71afb63f242a3f385670547f89.jpg)
Назовем его: CPU Temperature. (Температура процессора)
Тип: Zabbix агент
Ключ: Temperature.CPU[0]. (Название не принципиально, главное чтобы с конфигом агента совпадал).
Интерфейс узла сети: ip\dns. (Узел, который будем мониторить).
Тип информации: Числовой (целое положительное)
Тип данных: Десятичный
Интервал обновлений (в сек): 3600. (На скриншоте стоит 10 сек, для временной проверки).
На сервере закончили, переходим к конфигурации клиента.
Настройка клиента
Нестандартные данные мы будем отправлять через Zabbix agent в конфиге(zabbix_agentd.conf) которого предусмотрены так называемые пользовательские параметры – UserParameters вида:
UserParameter=ключ[*],команда
Команда, через которую мы получим значение, обрабатывается на стороне клиента. Zabbix сервер будет получать ключ с присвоенным ему значением. В статье имеется в виду, что агент у вас уже установлен в виде службы и дружит с сервером.
В конец конфиг файла агента добавляем:
UserParameter=Temperature.CPU[*], C:\OpenHardwareMonitor\CPUTemperature.bat
CPUTemperature.bat — написанный мной batch файл который вытаскивает из OpenHardwareMonitor, среднюю температуру по процессору. В программе эта строка называется CPU Package.
В C:\OpenHardwareMonitor лежат 3 файла:
- OpenHardwareMonitorReport.exe
- OpenHardwareMonitorLib.dll
- CPUTemperature.bat
Содержимое CPUTemperature.bat
Обновлено: Новый код от уважаемого cawaleb
Для процессоров intel так же справедлив вариант с find вместо findstr и регулярным выражением:
Здесь мой старый код
Инвалид на костылях.
Взываю к habra-сообществу о помощи в преобразовании этого ужаса в нормальный программный код без костылей из текстовых файлов.
Тем не менее, со своей задачей скрипт справляется.
@echo off
del /s C:\OpenHardwareMonitor\*.txt >nul 2>null
call start /B /wait C:\OpenHardwareMonitor\OpenHardwareMonitorReport.exe >> C:\OpenHardwareMonitor\OpenHardwareMonitorReport.txt
find "CPU Package :" C:\OpenHardwareMonitor\OpenHardwareMonitorReport.txt | find "temperature" >>C:\OpenHardwareMonitor\Result.txt
for /f "tokens=7 delims= " %%i in (C:\OpenHardwareMonitor\Result.txt) do echo %%i >> C:\OpenHardwareMonitor\temp.txt
TYPE C:\OpenHardwareMonitor\temp.txt
Взываю к habra-сообществу о помощи в преобразовании этого ужаса в нормальный программный код без костылей из текстовых файлов.
Тем не менее, со своей задачей скрипт справляется.
Обновлено: Новый код от уважаемого cawaleb
@echo off
for /F "usebackq tokens=7-10" %%a in (`C:\OpenHardwareMonitor\OpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| findstr .*lpc.*\/temperature\/0>nul && set temper=%%a
echo %temper%
Для процессоров intel так же справедлив вариант с find вместо findstr и регулярным выражением:
@echo off
for /F "usebackq tokens=7-10" %%a in (`C:\OpenHardwareMonitor\OpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/intelcpu/0/temperature/0">nul && set temper=%%a
echo %temper%
Скрипт возвращает значение в виде десятичного числа.
После этого изменения конфиг файла и размещения всех файлов и скриптов, перезагружаем службу zabbix agent.
Начинаем получать значения на сервер:
![График](https://habrastorage.org/getpro/habr/post_images/dbf/5af/20d/dbf5af20d10d09c268d8b87967e0af2e.jpg)
Заключение
Решена задача по извлечения температуры CPU. По той же схеме можно получить температуру GPU. Но по-прежнему остро стоят вопросы определения скорости работы вентиляторов, напряжения на бп, а так же вопрос есть ли способ проверки состояния северного и южного мостов.
Обновление: Добавлен код для CPUTemperature.bat предложенный уважаемым Cawaleb. Не забудьте поблагодарить его, за то, что отозвался помочь!