Zabbix мониторинг температуры процессора windows

Время на прочтение
4 мин

Количество просмотров 128K

Немного о себе и о рабочей среде

Работаю инженером в компании из двух человек, обслуживаем десяток муниципальных и коммерческих предприятий с парком компьютеров до 100 штук из них 99% windows машин. Занимаемся всем от прокладки сети до настройки информационных систем. Работы много и иногда очень хочется сделать свою жизнь чуточку проще и вот, в очередной такой момент, я столкнулся с системой мониторинга zabbix.

При первом знакомстве с zabbix, меня переполняли эмоции и фантазии о мониторинге всего на свете. Первой была идея предотвращения физических неисправностей путем отслеживания основных показателей железа, например температуру или напряжение, поскольку мне видится весьма логичным и экономически выгодным, поменять термопасту или начать подбирать замену уставшей технике до того как пользователь сообщит о её преждевременной кончине или страшных тормозах.
Система мониторинга Zabbix действительно очень мощная и гибкая, но, к сожалению, далеко не все аспекты для отслеживания доступны из стандартных коробочных шаблонов. Таким образом, моя фантазия с треском разбилась об стену отсутствия штатных инструментов мониторинга температур в Windows.

Процесс поиска в интернете поставил меня перед фактом, что вытащить температуры железа без сторонних средств нельзя. При поиске этих самых средств, я столкнулся с популярной утилитой SpeedFan, которая умеет собирать данные о температуре устройств, скорости вентиляторов, напряжений. Но получить от неё готовые к обработке данные без установки еще одной утилиты нет возможности. Плюс ко всему они не open source и требует активации компонента SNMP протокола. Вывод: попробовать на windows сервере без IMPI можно, но как вариант массового распространения в сети – не годен. Дальнейший поиск навел на программы hwmonitor и aida64 — монстры, крупногабаритные и платные.

OpenHardwareMonitor

Уже почти отчаявшись, зацепился за короткое сообщение на англоязычном форуме zabbix. Рекомендовали небольшую open source утилиту OpenHardwareMonitor — она имеет графический интерфейс и умеет считывать температуру устройств с датчиков. И самое главное её автор, по просьбе трудящихся написал консольную версию(последняя версия 28.10.2012), выводящую информацию в готовой для обработки форме.

Версия с GUI:

Версия с GUI

Консольная версия:

Консольная версия

Консольная версия состоит из двух файлов, exe исполняемого файла и dll библиотеки.

  • OpenHardwareMonitorReport.exe
  • OpenHardwareMonitorLib.dll

Где брать данные мы поняли, теперь нужно наладить поставки значений показателей Zabbix серверу.

Настройка сервера

Для начала на сервер для узла сети добавим новый элемент данных:

Новый элемент данных

Назовем его: 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

Здесь мой старый код

Инвалид на костылях.

@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.

Начинаем получать значения на сервер:

График

Заключение

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

Обновление: Добавлен код для CPUTemperature.bat предложенный уважаемым Cawaleb. Не забудьте поблагодарить его, за то, что отозвался помочь!

Monitoring CPU temperature of Windows hosts with Zabbix 3.4

This tutorial was based on Myopsblog that is a translate of original post on Habr.

This tutorial won’t help you installing and configuring Zabbix Agent on Windows, this needs to be done in advance.

Creating Item in Zabbix

First you need to create the temperature item in Zabbix, it can be an item directly on host or on template.

Creating item in Zabbix

Placing files

Download the OpenHardwareMonitor folder and place on C:
Add the last line of zabbix_agentd.conf to your zabbix agent config file:

UserParameter=Temperature.CPU, type C:\OpenHardwareMonitor\temperature.txt

Starting TempMonitoring.bat

The best option is to run this script as Startup program.
You can start manually for testing.

Obtaining data

After you run the TempMonitoring.bat script, just wait some minutes and then your item in Zabbix will gather data:

Graph showing CPU Temperature

Why this works?

TempMonitoring.bat will call OpenHardwareMonitorReport.exe, apply some filters, gets the average CPU temperature and save to temperature.txt file, sleeps one minute and then repeat infinitely. Zabbix Agent will request Temperature.CPU item, which will simple read the file and return to Zabbix Server.

Changing parameters

You can change the sleep time in seconds of TempMonitoring.bat for your need, just change 60 to your desired value.

You can modify the path as well, just change all six occurrences of path at TempMonitoring.bat and the path of UserParameter at your zabbix agent config file.

Будем использовать активного Zabbix-агента для слежения за температурой процессора.

Уверен, что важность мониторинга температуры процессора объяснять не нужно.

Замечание 1.
Способ установки Python 2.7 описан тут: https://www.mihanik.net/tihaja-ustanovka-python-2-7/

Замечание 2.

Способ становки Zabbix-агента (клиента) описан тут: https://www.mihanik.net/ustanovka-zabbix-klienta/

1. Собираем данные по температуре при помощи скрипта.

Всё, что касается измерения температуры процессора (процессоров) будет располагаться в каталоге C:\Zabbix\scripts\OHMR

Скрипт  написан на Python 2.7, он собирает данные по температуре процессора (процессоров) и формирует 2 файла:

  • C:\zabbix\scripts\OHMR\cpu0.txt — температура первого процессора
  • C:\zabbix\scripts\OHMR\cpu1.txt — температура второго процессора.

Замечание 1.

Если второго процессора в компьютере нет, то в файле cpu1.txt будет всегда нулевая температура.

Замечание 2.

Для получения температуры процессора будет использоваться OpenHardwareMonitor (консольная его версия). Страницу проекта можно найти тут: https://github.com/openhardwaremonitor/openhardwaremonitor . Дело в том, что при помощи WMI действительную температуру процессора не узнать. Чтобы узнать текущую температуру нужно прочитать данные из регистров процессора, чтобы прочитать данные из регистров процессора, нужно работать из нулевого кольца защиты, а чтобы попасть в нулевое кольцо, нужно писать драйвер… Вот OpenHardwareMonitor и делает за нас всю эту черновую работу. Нам остаётся только проанализировать то, что он нам выдаст.

Сам скрипт сохранён под именем C:\zabbix\scripts\OHMR\OHMR.py.

Текст скрипта:

# -*- coding: utf-8 -*-

import os
import sys
import ctypes

#
# Функция проверки наличия прав администратора
# Вход: нет
# Выход: true - есть права администратора,
#        false - нет прав администратора
#
def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

################################################################################
#   Начало программы
################################################################################
def main(argv=None):

   # Проверяем наличие прав админа.
   if not is_admin ():
      sys.exit ('Not enough permissions to run the script !!!')
   
   # Устанавливаем кодировку по умолчанию.
   reload(sys)
   sys.setdefaultencoding('utf8')
   
   # Устанавливаем имена файлов, где будет храниться температура процесcоров
   cpu0 = 'C:/zabbix/scripts/OHMR/cpu0.txt'
   cpu1 = 'C:/zabbix/scripts/OHMR/cpu1.txt'
   
   # Получаем результат работы OHMR
   OHMR = []
   OHMR = os.popen("C:\zabbix\scripts\OHMR\OpenHardwareMonitorReport.exe").read().splitlines()
   
   # Высчитываем температуру 0-го и, возможно, 1-го процесора
   
   n0 = 0
   sum0 = 0
   
   n1 = 0
   sum1 = 0
   
   for i in OHMR:
      if (':' in i) and ('(/intelcpu/0/temperature/' in i):
         t = i.split()
         n0 = n0 + 1
         sum0 = sum0 + int(t[8])
   
      if (':' in i) and ('(/intelcpu/1/temperature/' in i):
         t = i.split()
         n1 = n1 + 1
         sum1 = sum1 + int(t[8])
   
   if n0>0:
      sum0 = sum0 / n0
   
   if n1>0:
      sum1 = sum1 / n1
   
   # Сохраняем температуру 0-го процессора в файл
   f = open(cpu0,'w')
   try:
      f.write(str(sum0))
   except Exception:
      pass
   finally:
      f.close()
   
   # Сохраняем температуру 1-го процессора в файл
   f = open(cpu1,'w')
   try:
      f.write(str(sum1))
   except Exception:
      pass
   finally:
      f.close()

if __name__ == "__main__":
    sys.exit(main())

2. Устанавливаем скрипт в системе.

Скрипт лучше запускать каждые 5-10 минут. Я обычно это делаю каждые 10 минут – не слишком часто, но и не слишком редко.

Запланировать выполнение скрипта можно при помощи планировщика Windows. Задание планировщика можно создать вручную, а можно и при помощи bat-файла.

Я обычно это делаю при помощи “батника”, имя своему батнику я дал INSTALL_OHMR_py.bat .

Текст скрипта:

@echo off

Rem Предполагаем, что на Windows XP скрипт запускается администратором.
Rem Для более старших систем это неверно.

rem Получаем версию ОС
ver | find "5.1."

rem Windows XP ?
If %errorlevel%==0  (
	rem Пропускаем проверку админских прав
	GOTO SKIPADMIN
 )
 
SET HasAdminRights=0

FOR /F %%i IN ('WHOAMI /PRIV /NH') DO (
	IF "%%i"=="SeTakeOwnershipPrivilege" SET HasAdminRights=1
)

IF NOT %HasAdminRights%==1 (
	ECHO .
	ECHO Not enough permissions to run the script !!!
	ECHO .
	GOTO END
)

:SKIPADMIN

rem Получаем версию ОС
rem Windows XP ?

ver | find "5.1."

If %errorlevel%==0  (
rem Windows XP
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:00:00 /TN "OHMR0" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:10:00 /TN "OHMR1" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:20:00 /TN "OHMR2" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:30:00 /TN "OHMR3" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:40:00 /TN "OHMR4" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC HOURLY /ST 00:50:00 /TN "OHMR5" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\""
 ) else (
rem НЕ Windows XP
	SCHTASKS /Create /RU "NT AUTHORITY\SYSTEM" /SC DAILY /ST 00:00 /RI 10 /DU 24:00 /TN "OHMR" /TR "python \"C:\zabbix\scripts\OHMR\OHMR.py\"" /RL HIGHEST /F
 )

del /f /q C:\zabbix\scripts\OHMR\cpu0.txt
del /f /q C:\zabbix\scripts\OHMR\cpu1.txt

python C:\zabbix\scripts\OHMR\OHMR.py

:END

EXIT /B

3. Формируем шаблон в Zabbix.

В Zabbix при этом добавляем несложный шаблон.

Сначала приведу описание шаблона в картинках.

Создаём шаблон с именем : Active Computer — Python — CPU Temperature


Группа элементов данных: CPU


Элементы данных:

  • CPU0 Temperature — vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt]
  • CPU1 Temperature — vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt]




Триггеры:

  • Информация {HOST.NAME}. Температура процессора выше 50 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}>=50 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}<60
  • Информация {HOST.NAME}. Температура процессора выше 50 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}>=50 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}<60
  • Предупреждение {HOST.NAME}. Температура процессора выше 60 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}>=60 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}<70
  • Предупреждение {HOST.NAME}. Температура процессора выше 60 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}>=60 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}<70
  • Средняя {HOST.NAME}. Температура процессора выше 70 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}>=70 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}<80
  • Средняя {HOST.NAME}. Температура процессора выше 70 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}>=70 and {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}<80
  • Высокая {HOST.NAME}. Температура процессора выше 80 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu1.txt].last()}>=80
  • Высокая {HOST.NAME}. Температура процессора выше 80 градусов {Active Computer — Python — CPU Temperature:vfs.file.contents[C:\zabbix\scripts\OHMR\cpu0.txt].last()}>=80




И для большей наглядности добавим графики…


А вот и готовый для импорта заархивированный файл с описанным выше шаблоном:  Active Computer — Python — CPU Temperature.xml

Описанные ранее скрипты можно найти в моём репозитории: https://github.com/mihanik2000/ZabbixActiveAgent/tree/master/zabbix/scripts/OHMR

4. Сбор данных.

Осталось назначить созданный шаблон соответствующему узлу сети и ждать начала поступления данных.




Всё!


07.11.2018 — Мониторинг температуры процессора c оповещением в Zabbix

Продолжаем цикл статей по мониторингу узлов ИТ-инфраструктур клиентов на базе Zabbix, который мы активно используем в нашей повседневной работе по абонентскому обслуживанию серверов.

Сегодня речь пойдет о том, как мониторить температуру процессора используя Zaabbix и сторонние программы, так как zabbix использую лишь агента по умолчанию этого делать не умеет. Будем считать, что у вас уже есть функционирующая инфраструктура мониторинга в которую необходимо добавить отслеживании температуры CPU.

Настройка на стороне клиента

Настраивать все это будем на Windows Server 2008 R2 c процессором Intel Xeon E5-2609. Программа с которой будем забирать данные температуры называется «OpenHardwareMonitor» то есть ее консольная версия» OpenHardwareMonitorReport». Также настроим скрипт на PowerShell который будет выполнятся zabbix агентом и полученные данные передавать на сервер.

И так начнем, программу и скрипт можете скачать тут. Скаченную папку нужно положить по пути C:\Tools\Zabbix_Agent\ как показано на скриншоте ниже.

Прежде чем продолжать настройку дальше, нужно убедиться, что данные с OpenHardwareMonitorReport.exe можно получить. Для этого нужно в консоли выполнить следующую команду «c:\> C:\Tools\Zabbix_Agent\OpenHardwareMonitor\OpenHardwareMonitorReport.exe > c:\Tools\Zabbix_Agent\OpenHardwareMonitor\test.txt» После это откройте созданный файл и проверти что в нем есть строки показывающие температуру.

Отлично, данные есть можно продолжать. Следующий этап — это проверка работы скрипта на PowerShell. Он лежит в той же папки и называется cputemp.ps1. Для его выполнения откройте PS и выполните его. «PS C:\> C:\Tools\Zabbix_Agent\OpenHardwareMonitor\cputemp.ps1 0» Ноль в конце команды обозначает порядковый номер процессора, у меня их два так что первый будет «0» второй «1».

Стоит сразу сказать, если у вас CPU не Intel в скрипте нужно будет заменить название, также если при выполнении у вас ничего не выходит то измените значение «$words[15]» на 16 или 14, это номер символа от начала строки который нужно выводить.

Настройка Zabbix агента

Теперь откроем файл конфигурации агента и внесем туда следующие изменения.

Ниже приведу ряд обязательных параметров, которые должны присутствовать:

  1. ServerActive=192.168.155.1 – пишем адрес сервера zabbix
  2. UserParameter=TemperatureCPU[*], powershell C:\Tools\Zabbix_Agent\OpenHardwareMonitor\cputemp.ps1 $1 – наш параметр «TemperatureCPU[*] »который будем задавать на сервере для получения данных
  3. Timeout=15 – время ожидания, так как скрипт выполняется секунд 5 то серверу надо сказать чтобы он ждал 15 секунд получения данных. Можно и меньше указать, но лучше, как я взять с запасом.

После всех внесенных изменений перезагружаем агента и переходим к настройке сервера.

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

  • Имя – понятное вам название
  • Тип – zabbix агент активный
  • Ключ – как раз то название «UserParameter=TemperatureCPU[*]» которое мы указывали в конфигурации агента, в скобках пишем порядковый номер процессора.
  • Единица измерения — ℃ (просто для красоты)

Остальное можно оставить как есть, сохраняем, перезагружаем еще раз агента и проверяем в последних данных приходит ли что-нибудь.

Отлично, все работает! Заметьте у меня два процессора, и я добавил два элемента данных, вы же добавляете столько сколько их у вас.

На сегодня все, если будут вопросы пишите, наши инженеры с радостью решат ваши задачи! 

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

Содержание:

  • 1 Введение
  • 2 Общий принцип мониторинга температуры
  • 3 Мониторинг температуры в системах Linux
    • 3.1 Мониторинг температуры CPU и Memory
      • 3.1.1 Команды для вывода нужных параметров
      • 3.1.2 Добавление параметров для Zabbix агента
      • 3.1.3 Проверка получения значения Zabbix агентом
    • 3.2 Мониторинг температуры HDD и SSD
      • 3.2.1 Команды для вывода нужных параметров
      • 3.2.2 Добавление параметров для Zabbix агента
      • 3.2.3 Проверка получения значения Zabbix агентом
  • 4 Мониторинг температуры в системах Windows
  • 5 Действия на сервере Zabbix
    • 5.1 Добавление элемента данных
    • 5.2 Добавление тригера
    • 5.3 Добавление графика
  • 6 Заключение

Введение

Мониторинг температуры сервера это перовое что я обычно настраиваю сразу. Контролирую по максимуму все важные элементы.

Описание подойдёт для разных систем Linux. Более детально про установку и настройку Zabbix агентов для разных систем можно узнать в статье Zabbix agent установка и настройка.

Общий принцип мониторинга температуры

Для любой операционной системы необходимо выполнить 4 условия:

  1. Возможными способами извлечь данные с датчиков температуры нужного устройства;
  2. Обработать данные получив нужное значение;
  3. Передать полученное значение на сервер Zabbix;
  4. На сервере Zabbix добавить элемент данных, тригер и график.

Мониторинг температуры в системах Linux

Для примера я буду использовать систему Debian 10 Buster.

Мониторинг температуры CPU и Memory

Для получения данных о температуре будем применять утилиту  lm-sensors. Утилита очень популярна и присутствует во всех дистрибутивах Linux.

Установим пакет выполнив необходимую команду:

apt install lm-sensors

= Для CentOS 7 =
yum install lm_sensors

После установки необходимо запустить мастер настройки. Мастер обнаружит все доступные в системе встроенные аппаратные датчики, а также автоматически определит подходящие драйвера для них.

sensors-detect
= необходимые действия =
На все вопросы отвечаем Y

В конце спросит:
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Отвечаем YES.

Перезагрузим систему и выполним команду которая выведет информацию о всех имеющихся датчиках:

sensors
= вывод команды =
coretemp-isa-0001
Adapter: ISA adapter
Core 0: +81.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +77.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +73.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +73.0°C (high = +86.0°C, crit = +100.0°C)
i5k_amb-isa-0000
Adapter: ISA adapter
Ch. 0 DIMM 0: +75.5°C (low = +110.5°C, high = +124.0°C)
Ch. 0 DIMM 1: +71.0°C (low = +110.5°C, high = +124.0°C)
Ch. 0 DIMM 2: +63.5°C (low = +104.5°C, high = +124.0°C)
Ch. 0 DIMM 3: +64.5°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 0: +74.5°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 1: +77.0°C (low = +110.5°C, high = +124.0°C)
Ch. 1 DIMM 2: +69.0°C (low = +104.5°C, high = +124.0°C)
Ch. 1 DIMM 3: +60.0°C (low = +109.0°C, high = +124.0°C)
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +83.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +79.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +77.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +77.0°C (high = +86.0°C, crit = +100.0°C)

Примерно такой вывод будет при отрицательном ответе на последний вопрос при настройке. При положительном ответе вы увидите гораздо больше параметров.

В выводе мы видим следующие группы датчиков:

  • coretemp-isa-0001 — второй 4 ядерный процессор;
  • i5k_amb-isa-0000 — 8 модулей памяти;
  • coretemp-isa-0000 — первый 4 ядерный процессор.

Можно вывести показания одной группы датчиков.

sensors coretemp-isa-00000
= вывод команды =
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +82.0°C (high = +86.0°C, crit = +100.0°C)
Core 1: +79.0°C (high = +86.0°C, crit = +100.0°C)
Core 2: +75.0°C (high = +86.0°C, crit = +100.0°C)
Core 3: +77.0°C (high = +86.0°C, crit = +100.0°C)

Команды для вывода нужных параметров

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

Например, в моем случае имеется 4 ядерный процессор который показывает температуры на каждом ядре. Можно передавать максимальное, минимальное или среднее значение.

Мне кажется что правильней передавать максимальное значение. Если одно из ядер будет сильно перегреваться а другие имеют температуру ниже среднего я увижу среднюю температуры немного выше обычного показателя и не пойму что надо срочно решать проблему. Возможно для процессора такое и не сможет произойти, но для 8 модулей памяти вполне реально. Контролировать все показатели ядер и каждой планки памяти можно, но не имеет смысла.

Для выборки параметра из всех полей где присутствует параметр Core и есть значение температуры можно использовать следующие универсальные команды:

Вывод минимального значения температуры
sensors | grep Core | awk -F'[:+°]' '{if(min==""){min=$3}; if($3<min) {min=$3};} END {print min}'

Вывод максимального значения температуры
sensors | grep Core | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Вывод среднего значения температуры
sensors | grep Core | awk -F'[:+°]' '{avg+=$3}END{print avg/NR}'

Коды подсмотрел тут.

Для вывода параметра с одной строки можно использовать следующий код:

sensors coretemp-isa-00000 | grep 'Core 0' | cut -c16-17
=вывод команды =
65.45

Где параметры имеют следующее значение:

  • sensors — сама программа;
  • coretemp-isa-00000 — группа датчиков с которой выводить значение;
  • grep ‘Core 0’ — название параметра;
  • cut -c16-17 — выводит 16 и 17 знак с начала строки.

В нашем случае присутствует два процессора и у обоих одинаковое значение параметра Core. Для вывода параметров для конкретного процессора необходимо указать группу датчиков.

Вывод максимальной температуры для процессора имеющего группу датчиков coretemp-isa-0000
sensors coretemp-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Для вывода нужной температуры для памяти можно использовать два варианта:

Вывод максимальной температуры из всех значений Ch. в строках 
sensors | grep Ch. | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Вывод максимальной температуры из группу датчиков coretemp-isa-0000 
sensors i5k_amb-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Надеюсь вам стало понятно как можно используя эти команды вывести нужный вариант.

Если будут вопросы вы всегда можете задать их в комментариях или поделиться своим опытом.

Добавление параметров для Zabbix агента

Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.

vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1

После необходимого параметра добавляем нужный код. В моем случае получился следующий код:

UserParameter=pve-t.core0,sensors coretemp-isa-00000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
UserParameter=pve-t.core1,sensors coretemp-isa-00001 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'
UserParameter=pve-t.memory,sensors i5k_amb-isa-0000 | awk -F'[:+°]' '{if(max==""){max=$3}; if(max<$3) {max=$3};} END {print max}'

Расшифрую первую строчку кода которая содержит следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-t.core0 — название параметра который мы будем использовать при добавлении элемента данных;
  • sensors coretemp-isa-00000 | awk -F'[:+°]’ ‘{if(max==»»){max=$3}; if(max<$3) {max=$3};} END {print max}’ — команда которой получается требуемое значение.

После внесения изменений в файл настройки Zabbix агента его обязательно нужно перезапустить.

Для систем использующих Systemd команда перезапуска агента будет одинаковой. Например, для систем CentOS7, Debian 10 команда следующая:

systemctl restart zabbix-agent

Проверка получения значения Zabbix агентом

Для уверенности в том что агент правильно получает данные нам необходимо выполнить команду которая покажет какой параметр получает агент Zabbix.

Выведем значение первого параметра который был в добавляемом коде:

zabbix_get -s 127.0.0.1 -k pve-t.core0
= вывод команды =
65.25

Параметр работает и получает правильное значение.

В случае получения ошибок

-bash: zabbix_get: command not found 
или
zabbix_get [20065]: Check access restrictions in Zabbix agent configuration

перейдите по ссылке и узнаете почему не работает zabbix_get.

Переходим к настройкам на стороне Zabbix сервера.

Мониторинг температуры HDD и SSD

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

Утилиту hddtemp которая присутствует во всех дистрибутивах Linux и позволяет получать значения температуры дисков нам идиально подходит.

Установим утилиту выполнив команду:

apt install hddtemp

Команды для вывода нужных параметров

Вначале нам необходимо вывести список дисков которые используются в системе. Например, я выполняю следующую команду:

lsblk
= вывод команды =
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931,5G 0 disk 
├─sda1 8:1 0 100M 0 part 
├─sda2 8:2 0 292,9G 0 part  
└─sda3 8:8 0 443G 0 part /mnt/sda8
sdb 8:16 0 119,2G 0 disk 
├─sdb1 8:17 0 7,5G 0 part [SWAP]
├─sdb2 8:18 0 954M 0 part /boot
└─sdb3 8:19 0 110,9G 0 part /

Из вывода видно что в системе есть два диска sda и sdb.

Выведем показание температуры для диска sda:

hddtemp /dev/sda
= вывод команды =
/dev/sda: ST3120811AS: 46°C

Команда для получения значений температуры будет такой:

hddtemp /dev/sda | cut -c24-25
= вывод команды =
46

Где параметры в коде имеют следующее значение:

  • hddtemp /dev/sda — утилита и диск с которого нужно получить значение;
  • cut -c24-25 — вывод 24 и 25 знака с начала строки.

Добавление параметров для Zabbix агента

Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо наличие в файл настройки необходимого параметра.

vim /etc/zabbix/zabbix_agentd.conf
= необходимый параметр =
UnsafeUserParameters=1

После проверки наличия параметра добавляем необходимый код:

UserParameter=pve-t.sda,hddtemp /dev/sda | cut -c24-25
UserParameter=pve-t.sdb,hddtemp /dev/sdb | cut -c24-25

Расшифрую первую строчку кода которая содержит следующие значения:

  • UserParameter — параметр согласно которого агент понимает что с ним надо работать;
  • pve-t.sda — название параметра который мы будем использовать при добавлении элемента данных;
  • hddtemp /dev/sda | cut -c24-25 — команда которой получается требуемое значение.

После внесения изменений в файл настройки Zabbix агента его обязательно нужно перезапустить.

Для систем использующих Systemd команда перезапуска агента будет одинаковой. Например, для Debian 10 и CentOS 7 команда будет следующая:

systemctl restart zabbix-agent

Проверка получения значения Zabbix агентом

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

Пробуем получить данные температуры диска sda:

zabbix_get -s 127.0.0.1 -k pve-t.sda
= вывод команды =
/dev/sda: open: Permission denied

Мы получили ошибку в которой говорится что нет доступа на выполнение команды от пользователя Zabbix. В интернете масса советов о том как эти права добавить использую sudo, но в нашем случае используется система Proxmox в которой нет этого механизма а усложнять сам гипервизор занятие дурное.

Выведем информацию о правах на утилиту:

ls -l /usr/sbin/hddtemp
= вывод команды =
-rwxr-xr-x 1 root root 40328 Jan 21 2018 /usr/sbin/hddtem

Из вывода видно что принадлежит она root и право запускать имеет только он.

Выполним команду которая позволит пользователю Zabbix запускать это файл:

chmod +s /usr/sbin/hddtemp

Проверим результат:

ls -l /usr/sbin/hddtemp
= вывод команды =
-rwsr-sr-x 1 root root 40328 Jan 21 2018 /usr/sbin/hddtemp

zabbix_get -s 127.0.0.1 -k pve-t.sda
= вывод команды =
45

Как видим данные успешно получены и значит переходим к настройкам на стороне Zabbix сервера.

Мониторинг температуры в системах Windows

Настроить мониторинг на системе Windows температурных параметров оказалось не просто. В большинстве случаев статьи в интернете описывают различные варианты использования программы Open Hardware Monitor а именно её консольной версии. На сайте разработчика я не нашел консольного варианта а скачивать с других сайтов считаю не целесообразно по разным причинам.

Программа позволяет создавать логи в формате csv и имеет веб лицо с выводом всех параметров. Возможно, как то использовать эти возможности, но ответа на этот вопрос я пока не нашел.

Поделитесь пожалуйста в комментариях своими вариантами мониторинга температур в системах Windows.

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

Добавление элемента данных

Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.

Необходимо заполнить следующие поля:

  • Имя — core0 Temperature;
  • Ключ — pve-t.core0;
  • Тип информации — Числовой (с плавающей точкой);
  • Интервал обновления — 1m;
  • Период хранения истории — 1w;
  • Группы элементов данных — CPU.

Мониторинг температуры добавление элемента данных Zabbix

Добавление тригера

Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.

Необходимо заполнить следующие поля:

  • Имя тригера — pve-t core0 Temperature;
  • Выражение — {pve-t:pve-t.core0.last()}>80.

Мониторинг температуры добавление тригера Zabbix

Выражение формируется на вкладке открывающейся по кнопке «Добавить» рядом с полем «Выражение«.

Добавления выражения Zabbix

Добавление графика

Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.

Какое количество графиков и настройки параметров отображения решите сами. Например, мне нравится выводить все параметры температур в один график.

Создание графика Zabbix

По нажатию кнопки «Добавить» в параметре «Элемент данных» выбираем все необходимые элементы данных для отображения на графике.

В результате мой график имеет следующий вид:

Мониторинг температуры Zabbix

На графике видно как менялись показания когда я подбирал оптимальное положение и тип вентиляторов.

К моему удивлению расположение мощного вентилятора на выдув воздуха снижает общую температуру при закрытом корпусе лучше чем при его отсутствии и открытом корпусе.

Заключение

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

В результате все мои сервера стали работать тише а температурные параметры соответствует средним для данных типов устройств.

  • Zoom desktop client для windows
  • Zabbix мониторинг свободного места на диске windows
  • Zoo tycoon 2 windows 10
  • Zabbix мониторинг размера папки windows
  • Zonerich ab 58c драйвер для windows