Сегодня появилась необходимость мониторить температуру рабочих станций на Windows. Системой мониторинга был выбран Zabbix, т.к. бесплатный, к тому же один из наиболее функциональных и развивающихся продуктов на рынке.
Нам потребуется:
- Установленная CentOS 7
- Настроенная CentOS 7
- Установленный Zabbix
Если у вас чего-то не хватает, можете перейти по ссылкам и ознакомиться с материалом.
Подготовка
Данным способом можно считывать показатели температуры не только с рабочих станций, но и с серверов. Хотя для последнего лучше использовать IPMI.
Для начала нам нужно скачать бесплатную утилиту OpenHardwareMonitor. Она имеет графический интерфейс и умеет считывать температуру, напряжение, скорость вращения кулеров и многое другое. Приятным бонусом является консольная версия, которую и будем использовать.
GUI версия (для ознакомления):
Скачиваем консольную версию.
Распаковываем ее в папку. У меня: C:\zabbix\ohm Теперь необходимо получить информацию в текстовом формате. Для этого создаем в папке с программой bat фал с таким содержимым:
C:\zabbix\ohm\OpenHardwareMonitorReport.exe > C:\zabbix\ohm\info.txt
Не забываем подставлять ваши пути. После запуска получаем info.txt :
Sensors | +- ASUS X75VB (/mainboard) | +- Intel Core i3-3120M (/intelcpu/0) | +- CPU Core #1 : (/intelcpu/0/clock/1) | +- CPU Core #2 : (/intelcpu/0/clock/2) | +- CPU Core #1 : (/intelcpu/0/temperature/0) | +- CPU Core #2 : (/intelcpu/0/temperature/1) | +- CPU Package : (/intelcpu/0/temperature/2) | +- CPU Total : 80.0505 50 80.0505 (/intelcpu/0/load/0) | +- CPU Core #1 : 78.7879 50 78.7879 (/intelcpu/0/load/1) | +- CPU Core #2 : 81.3131 50 81.3131 (/intelcpu/0/load/2) | +- Generic Memory (/ram) | +- Memory : 41.8296 41.8296 41.8296 (/ram/load/0) | +- Used Memory : 4.97281 4.97281 4.97281 (/ram/data/0) | +- Available Memory : 6.91544 6.91544 6.91544 (/ram/data/1) | +- Generic Hard Disk (/hdd/0) | +- Used Space : 39.2338 39.2338 39.2338 (/hdd/0/load/0)
Нас интересует строка /intelcpu/0/temperature/2 По ней будем получать среднюю температуру CPU.
Создаем в этой же папке второй bat файл с названием tempCPU.bat
@echo off for /F "usebackq tokens=7-10" %%a in (`C:\zabbix\ohm\OpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/intelcpu/0/temperature/2" >nul && set temper=%%a echo %temper%
Где:
- C:\zabbix\ohm\OpenHardwareMonitorReport.exe путь к исполняемому файлу OpenHardwareMonitorReport.exe
- /intelcpu/0/temperature/2 идентификатор датчика полученное из info.txt
Теперь проверяем корректность работы скрипта.
Скрипт работает, результат 57 градусов. Это то значение, которое будет передаваться на сервер Zabbix.
Настройка Zabbix agent в Windows
Предполагается, что сервер Zabbix установлен и настроен, а интересующие хосты уже добавлены. Теперь редактируем файл конфигурации zabbix agent’а zabbix_agentd.win.conf который находится в \zabbix\conf
В конец дописываем:
### UserParameter # UserParameter=ключ[*],команда UserParameter=Temperature.CPU, C:\zabbix\ohm\tempCPU.bat
Перезапускаем службу агента zabbix, чтобы изменения вступили в силу.
Настройка Zabbix сервера
Теперь идем на zabbix сервер и добавляем новый Item. Сделать это можно несколькими способами:
- Добавить Item в уже имеющийся Шаблон, назначить триггеры и создать графики
- Добавить только необходимому хосту с присвоением триггера и графика
По логике добавить в уже имеющийся шаблон правильнее, но тут кроется подвох. На некоторых рабочих станциях температура вообще не определялась, на других было несколько камней, а температуру нужно снимать с обеих. Поэтому создаем Item для каждого хоста свой. Но если в вашем случае все хосты однотипные, смело добавляйте в шаблон. В принципе обе процедуры похожи, и при знании одного из вариантов, осуществить другой не должно составить труда.
Идем в Настройка -> Узлы сети -> Выбираем требуемый хост -> Элементы данных -> группы элементов данных CPU -> Создать элемент данных. Заполняем поля как указано в примере:
Сохраняем Элемент данных, идем в Мониторинг -> Последние данные. Через несколько минут там появится значение температуры.
Нажимаем График и смотрим:
Ошибки
Если после добавления элемента данных он отваливается с ошибками:
- item became not supported
- Timeout while executing a shell script
А в логах виднеется:
27614:20150702:065936.698 item «AdminLapTop:Temperature.CPU» became not supported: Timeout while executing a shell script.
27625:20150702:070938.720 item «AdminLapTop:Temperature.CPU» became supported
То есть данные собирались, а потом перестали.
Было замечено, что при запуске батника из командной строки, вывод данных занимал 3-5 секунд. В Zabbix по-умолчанию стоит параметр, по которому агент ожидает ответа от скрипта 3 секунды и на сервере есть подобный параметр, по которому сервер ждет ответа от агента 3 секунды. Если за это время данные не поступают, то Item переходит в статус Not Supported и данные с него не агрегируются.
Чтобы избавиться от данной проблемы, требуется увеличить таймаут до 30-ти секунд. Изменяем параметр в конфиг-файле на клиентах и на сервере. Он одинаков в обоих случаях:
Timeout=30
На сервере файл конфигурации по умолчанию лежит в /etc/zabbix/zabbix_server.conf
В Windows \zabbix\conf\zabbix_agentd.win.conf
После изменения параметров не забываем перезагрузить сервер:
systemctl restart zabbix-server
и агент в службах windows.
При желании можете настроить триггеры и графики и оповещения. На этом настройка мониторинга температуры закончена.