Мониторинг температуры процессора, материнской платы, памяти и жестких дисков системой Zabbix очень важен и крайне необходим. Контроль над температурными параметрами компьютера избавляет от серьезных проблем связанных с постоянным перегревом важных узлов компьютера.
Содержание:
Введение
Мониторинг температуры сервера это перовое что я обычно настраиваю сразу. Контролирую по максимуму все важные элементы.
Описание подойдёт для разных систем Linux. Более детально про установку и настройку Zabbix агентов для разных систем можно узнать в статье Zabbix agent установка и настройка.
Общий принцип мониторинга температуры
Для любой операционной системы необходимо выполнить 4 условия:
- Возможными способами извлечь данные с датчиков температуры нужного устройства;
- Обработать данные получив нужное значение;
- Передать полученное значение на сервер Zabbix;
- На сервере 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 агентом
Советую всегда проверять как агент получает значения на самом узле сбора данных.
Перейдите по ссылке сможете узнаете почему Не работает zabbix_get.
Пробуем получить данные температуры диска 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.
Действия на сервере Zabbix
Добавление данных для мониторинга будет показано на примере данных максимальной температуры ядра первого процессора.
Добавление элемента данных
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
- Имя — core0 Temperature;
- Ключ — pve-t.core0;
- Тип информации — Числовой (с плавающей точкой);
- Интервал обновления — 1m;
- Период хранения истории — 1w;
- Группы элементов данных — CPU.
Добавление тригера
Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.
Необходимо заполнить следующие поля:
- Имя тригера — pve-t core0 Temperature;
- Выражение — {pve-t:pve-t.core0.last()}>80.
Выражение формируется на вкладке открывающейся по кнопке «Добавить» рядом с полем «Выражение«.
Добавление графика
Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.
Какое количество графиков и настройки параметров отображения решите сами. Например, мне нравится выводить все параметры температур в один график.
По нажатию кнопки «Добавить» в параметре «Элемент данных» выбираем все необходимые элементы данных для отображения на графике.
В результате мой график имеет следующий вид:
На графике видно как менялись показания когда я подбирал оптимальное положение и тип вентиляторов.
К моему удивлению расположение мощного вентилятора на выдув воздуха снижает общую температуру при закрытом корпусе лучше чем при его отсутствии и открытом корпусе.
Заключение
После того как вы увидите свой график температурных параметров вам захочется поиграться с корпусом системного блока и вентиляторами для получения оптимальных параметров температуры. Основываясь на реальных данных вы сможете правильно настроить охлаждение важных узлов системного блока. Иногда наши мнения ошибочны. Против законов физики не попрешь. Например, после того как я стал использовать мониторинг температуры я кардинально поменял отношение и к тому какие должны быть вентиляторы и как их располагать.
В результате все мои сервера стали работать тише а температурные параметры соответствует средним для данных типов устройств.
Отличная статья, очень помогла настроить свой мониторинг!
Огромное спасибо за помощь! Решил все проблемы с первого раза 😉
Пожалуйста. Заходите.
Для OpenHardwareMonitor, не нужен никакой модуль командной строки.
Не знаю как раньше, но я нашёл инфу, что он может отдавать данные через WMI.
Все показания датчиков температуры, можно получить в powershell по запросу:
get-wmiobject Sensor -namespace «root/OpenHardwareMonitor» |? {$_.sensortype -like «Temperature»} |Select Name,Value
Ссылка на официальный гайд есть здесь: https://openhardwaremonitor.org/documentation/, в самом низу страницы в разделе: Data Interface
Большое спасибо за статью!
У меня почему то hddtemp перестало определять датчики температуры на некоторых винчестерах. Причем проработала улита почти месяц без проблем.
Зато в системе нашлась уже установленная smartctl в составе smartmontools (кстати начиная по моему с версии 7 она работает с SSD) и с помощью нее я по вашей методике определяю температуру.
Вот код:
smartctl /dev/sda -a | grep -i Temperature_Celsius | cut -c88-89
Не забываем про права
chmod +s /usr/sbin/smartctl
И возможно увеличить таймаут
### Option: Timeout
# Spend no more than Timeout seconds on processing
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30
И рестартуем агента. Остальное все тоже самое
Спасибо за информацию. Обезательно дополню статью.
Для Винды можно попробовать командную строку https://computerinfo.ru/kak-uznat-temperaturu-protsessora/#a1
Спасибо за подсказку.
Спасибо за информацию. Рад что помогает статья.