Zabbix настройка мониторинга температуры
Появилась у меня потребность мониторить температуру windows серверов в Zabbix. Из систем мониторинга он мне больше всего нравится, поэтому смотрел в его сторону. Решение задачи оказалось неожиданно простым, о чем я и хочу вам рассказать.
Введение
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Текущая статья писалась для версии 2.4, все скриншоты приведены из нее. В настоящее время уже вышли более новые версии, но вся нижеизложенная инструкция не потеряла актуальности. Все будет работать и в новой версии.
Подготовка к мониторингу в Zabbix
Описанным мной способом можно мониторить температуру не только windows серверов, но и любых рабочих станций, если будет такая необходимость. Схема мониторинга следующая:
Существует бесплатная утилита Open Hardware Monitor, которая может показывать температуру некоторых датчиков сервера. Вообще говоря, она много чего может показывать (напряжение, скорость вентиляторов, загрузку процессора), но в данном случае нас интересует только температура. У этой утилиты есть версия, работающая в командной строке. Из командной строки показания датчиков можно записывать в файл. Этот файл можно анализировать и забирать из него необходимую для мониторинга информацию. Дальше эта информация передается в сервер Zabbix с помощью опции UserParameter. Все достаточно просто и в то же время эффективно.
Приступим к реализации. Скачиваем GUI версию утилиты по ссылке, приведенной ранее и консольную версию OpenHardwareMonitorReport. Запускаем GUI на сервере и смотрим, какие датчики нам доступны для мониторинга.
Программа увидела несколько датчиков. С процессором все понятно, а вот три других датчика не ясно, чью температуру показывают. Я хотел мониторить температуру процессора и материнской платы. Узнать, какая температура относится к материнской плате можно несколькими способами. Конкретно в данной ситуации я просто запустил портированную версию AIDA64 и посмотрел, какие показания у датчика материнской платы:
Оказалось — 45 градусов. Я запомнил, что датчик Temperature #3 отображает температуру материнской платы.
Можно было пойти другим путем, зайти в IPMI панель, если она есть, и посмотреть там. Я работал с серверами SuperMicro, там она есть. Я на всякий случай зашел и проверил:
Почему-то в этой панели не оказалось информации с датчика температуры процессора. Но нам это не важно. Самое главное, что мы узнали параметры, за которыми будем следить — это CPU Packege и Temperature #3. Теперь запускаем консольную версию и смотрим вывод информации. Я для удобства положил OpenHardwareMonitorReport.exe в папку с основной программой и все это хозяйство скопировал в корень диска C:
Открываем файл 1.txt. Ищем там строки
Нас интересует выделенный текст. По нему мы будем вычленять температуру для мониторинга и передавать ее на Zabbix сервер. Создаем в этой же папке 2 bat файла следующего содержания:
CPUTemperature.bat
MotherTemperature.bat
Запускаем эти батники в командной строке и проверяем вывод. Там должны быть только цифры температуры:
Отлично, на выходе готовые цифры, которые мы будем передавать в Zabbix. Займемся его настройкой.
Настройка Zabbix agent в Windows
Предполагается, что у вас уже настроен сервер мониторинга Zabbix и подключены клиенты, которые ему передают информацию. В данном материале я не буду касаться непосредственно установки и настройки сервера Zabbix, это будет отдельный материал. Сейчас же мы берем готовый файл конфигурации агента zabbix_agentd.win.conf и добавляем в самый конец файла следующие строки:
Перезапускаем службу агента Zabbix, чтобы изменения вступили в силу.
Настройка мониторинга на Zabbix сервере
Теперь идем на сервер. У меня Zabbix установлен на сервере CentOS, хотя это не принципиально. Добавляем новый Item. Пойти можно двумя путями:
- Создать template, в него добавить все items, создать триггеры, графики и назначить этот шаблон нужным серверам.
- К каждому серверу отдельно добавлять только необходимые итемы и вручную добавлять триггеры и графики.
Очевидно, что первым путем идти удобнее и разумнее. Я так и поступил, но в процессе реализации столкнулся с проблемой. Не все сервера имеют одинаковый набор датчиков. Где-то я не смог снять температуру с материнской платы, где-то вместо одного процессора, стояло два и хотелось снимать температуру с обоих камней. Как будет в вашем случае — не знаю. Если все серверы однотипные, то создавайте template, если все разные, то вручную добавляйте каждый итем на сервер. Я в итоге сделал и шаблон для одинотипных серверов, и вручную добавлял итемы туда, где имелись отличия от шаблона.
Итак, сначала создадим шаблон. Идем в Configurations — Templates — Create Template. Шаблон я назвал Temperature Windows. Добавил в него Application — Temperature, затем Item CPU Temperatue. Заполняем поля итема как у меня на картинке:
Параметр Temperature.CPU тот же самый, что и в файле конфигурации агента.
По аналогии создаем итем Mother Temperatue:
Сохраняем шаблон. По желанию создаем для него триггеры и графики. Можно и без них. Добавляем шаблон к серверу, который хотим мониторить. Ждем некоторое время и идем проверять входящие данные. Открываем Monitoring — Latest data:
Нажимаем graph и смотрим график:
Теперь добавим в Zabbix еще один сервер для мониторинга, который будет отличаться по конфигурации от предыдущего. На его примере я покажу, как менять настройки клиента и сервера. С этого сервера я не могу снять данные с датчика температуры материнской платы, по какой причине — не знаю, но не AIDA64 ни OpenHardwareMonitor мне температуру не показывают. Ее можно взять по SNTP с этого сервера, но это отдельная тема. В этом сервере 2 процессора и я хочу мониторить температуру обоих.
Запускаем GUI интерфейс и смотрим, какие датчики мы сможем мониторить:
Нас будет интересовать температура обоих ядер процессора. Теперь запускаем OpenHardwareMonitorReport.exe с выводом информации в текстовый файл. Смотрим, как выглядят строки с интересующей нас информацией:
Создаем два bat файла следующего содержания:
CPU1Temperature.bat
CPU2Temperature.bat
Редактируем конфигурационный файл zabbix_agentd.win.conf агента Zabbix на клиенте. Добавляем в конец две строки:
Перезапускаем службу агента, чтобы изменения вступили в силу.
Дальше идем на сервер Zabbix и по аналогии с предыдущим сервером создаем там Итемы мониторинга. Причем итемы создаем не в шаблоне, а в конкретном сервере, который будем мониторить. Параметр key в этих итемах будет соответственно Temperature.CPU1 и Temperature.CPU2 Ждем некоторое время и проверяем результат.
item became not supported
Во время отладки работ я столкнулся с проблемами. Периодически Item отваливались и получали статус: Not Supported. При этом в логах сервера были следующие записи:
То есть данные то собирались, то переставали собираться. Иногда, чтобы данные снова пошли, приходилось удалять итем и создавать его заново. Некоторое время я повозился, пока не понял, в чем дело.
Я обратил внимание, что при запуске батника из командной строки, вывод данных происходит с приличной задержкой в 3-5 секунд. В Zabbix по-умолчанию стоит параметр, по которому агент ожидает ответа от скрипта 3 секунды и на сервере есть подобный параметр, по которому сервер ждет ответа от агента 3 секунды. Если за это время данные не поступают, то итем переходит в статус Not Supported и данные с него не собираются.
Чтобы избавиться от этой ошибки, необходимо увеличить таймаут до 15-ти секунд. Меняем параметр в конфиге на клиентах и на сервере. Он и там и там один и тот же:
Потом перезапускаем сервер и агентов и ждем результатов. Больше ошибок быть не должно.
На этом, собственно настройка мониторинга температуры окончена. Можно дальше все оформить как полагается: настроить тригеры, оповещения, графики красивые нарисовать. Кому что нужно. Я себе вывел вот такую картинку для наглядности:
Мониторинг температуры в Zabbix
Мониторинг температуры процессора, материнской платы, памяти и жестких дисков системой Zabbix очень важен и крайне необходим. Контроль над температурными параметрами компьютера избавляет от серьезных проблем связанных с постоянным перегревом важных узлов компьютера.
Введение
Мониторинг температуры сервера это перовое что я обычно настраиваю сразу. Контролирую по максимуму все важные элементы.
Описание подойдёт для разных систем Linux. Более детально про установку и настройку Zabbix агентов для разных систем можно узнать в статье Zabbix agent установка и настройка.
Общий принцип мониторинга температуры
Для любой операционной системы необходимо выполнить 4 условия:
- Возможными способами извлечь данные с датчиков температуры нужного устройства;
- Обработать данные получив нужное значение;
- Передать полученное значение на сервер Zabbix;
- На сервере Zabbix добавить элемент данных, тригер и график.
Мониторинг температуры в системах Linux
Для примера я буду использовать систему Debian 10 Buster.
Мониторинг температуры CPU и Memory
Для получения данных о температуре будем применять утилиту lm-sensors. Утилита очень популярна и присутствует во всех дистрибутивах Linux.
Установим пакет выполнив необходимую команду:
После установки необходимо запустить мастер настройки. Мастер обнаружит все доступные в системе встроенные аппаратные датчики, а также автоматически определит подходящие драйвера для них.
Перезагрузим систему и выполним команду которая выведет информацию о всех имеющихся датчиках:
Примерно такой вывод будет при отрицательном ответе на последний вопрос при настройке. При положительном ответе вы увидите гораздо больше параметров.
В выводе мы видим следующие группы датчиков:
- coretemp-isa-0001 — второй 4 ядерный процессор;
- i5k_amb-isa-0000 — 8 модулей памяти;
- coretemp-isa-0000 — первый 4 ядерный процессор.
Можно вывести показания одной группы датчиков.
Команды для вывода нужных параметров
Получить необходимые значения можно разными вариантами. Причем как в том как написать код так и в том какие параметры получать для мониторинга.
Например, в моем случае имеется 4 ядерный процессор который показывает температуры на каждом ядре. Можно передавать максимальное, минимальное или среднее значение.
Мне кажется что правильней передавать максимальное значение. Если одно из ядер будет сильно перегреваться а другие имеют температуру ниже среднего я увижу среднюю температуры немного выше обычного показателя и не пойму что надо срочно решать проблему. Возможно для процессора такое и не сможет произойти, но для 8 модулей памяти вполне реально. Контролировать все показатели ядер и каждой планки памяти можно, но не имеет смысла.
Для выборки параметра из всех полей где присутствует параметр Core и есть значение температуры можно использовать следующие универсальные команды:
Для вывода параметра с одной строки можно использовать следующий код:
Где параметры имеют следующее значение:
- sensors — сама программа;
- coretemp-isa-00000 — группа датчиков с которой выводить значение;
- grep ‘Core 0’ — название параметра;
- cut -c16-17 — выводит 16 и 17 знак с начала строки.
В нашем случае присутствует два процессора и у обоих одинаковое значение параметра Core. Для вывода параметров для конкретного процессора необходимо указать группу датчиков.
Для вывода нужной температуры для памяти можно использовать два варианта:
Надеюсь вам стало понятно как можно используя эти команды вывести нужный вариант.
Если будут вопросы вы всегда можете задать их в комментариях или поделиться своим опытом.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо добавить в файл настройки необходимый параметр.
После необходимого параметра добавляем нужный код. В моем случае получился следующий код:
Расшифрую первую строчку кода которая содержит следующие значения:
- UserParameter — параметр согласно которого агент понимает что с ним надо работать;
- pve-t.core0 — название параметра который мы будем использовать при добавлении элемента данных;
- sensors coretemp-isa-00000 | awk -F'[:+°]’ ‘
; if(max Проверка получения значения Zabbix агентом
Для уверенности в том что агент правильно получает данные нам необходимо выполнить команду которая покажет какой параметр получает агент Zabbix.
Выведем значение первого параметра который был в добавляемом коде:
Параметр работает и получает правильное значение.
В случае получения ошибок
перейдите по ссылке и узнаете почему не работает zabbix_get.
Мониторинг температуры HDD и SSD
Можно получить данные о температуре жесткого диска с системы SMART, которая присутствует на всех современных дисках. На сервере, с которого я собираюсь получать значения, работает система Proxmox в которой присутствует собственный механизм проверки дисков на основании SMART. Будем получать данные температуры другим способом.
Утилиту hddtemp которая присутствует во всех дистрибутивах Linux и позволяет получать значения температуры дисков нам идиально подходит.
Установим утилиту выполнив команду:
Команды для вывода нужных параметров
Вначале нам необходимо вывести список дисков которые используются в системе. Например, я выполняю следующую команду:
Из вывода видно что в системе есть два диска sda и sdb.
Выведем показание температуры для диска sda:
Команда для получения значений температуры будет такой:
Где параметры в коде имеют следующее значение:
- hddtemp /dev/sda — утилита и диск с которого нужно получить значение;
- cut -c24-25 — вывод 24 и 25 знака с начала строки.
Добавление параметров для Zabbix агента
Для того чтобы Zabbix агент мог работать с нашими параметрами необходимо наличие в файл настройки необходимого параметра.
После проверки наличия параметра добавляем необходимый код:
Расшифрую первую строчку кода которая содержит следующие значения:
- UserParameter — параметр согласно которого агент понимает что с ним надо работать;
- pve-t.sda — название параметра который мы будем использовать при добавлении элемента данных;
- hddtemp /dev/sda | cut -c24-25 — команда которой получается требуемое значение.
После внесения изменений в файл настройки Zabbix агента его обязательно нужно перезапустить.
Для систем использующих Systemd команда перезапуска агента будет одинаковой. Например, для Debian 10 и CentOS 7 команда будет следующая:
Проверка получения значения Zabbix агентом
Советую всегда проверять как агент получает значения на самом узле сбора данных.
Перейдите по ссылке сможете узнаете почему Не работает zabbix_get.
Пробуем получить данные температуры диска sda:
Мы получили ошибку в которой говорится что нет доступа на выполнение команды от пользователя Zabbix. В интернете масса советов о том как эти права добавить использую sudo, но в нашем случае используется система Proxmox в которой нет этого механизма а усложнять сам гипервизор занятие дурное.
Выведем информацию о правах на утилиту:
Из вывода видно что принадлежит она root и право запускать имеет только он.
Выполним команду которая позволит пользователю Zabbix запускать это файл:
Мониторинг температуры в системах Windows
Настроить мониторинг на системе Windows температурных параметров оказалось не просто. В большинстве случаев статьи в интернете описывают различные варианты использования программы Open Hardware Monitor а именно её консольной версии. На сайте разработчика я не нашел консольного варианта а скачивать с других сайтов считаю не целесообразно по разным причинам.
Программа позволяет создавать логи в формате csv и имеет веб лицо с выводом всех параметров. Возможно, как то использовать эти возможности, но ответа на этот вопрос я пока не нашел.
Поделитесь пожалуйста в комментариях своими вариантами мониторинга температур в системах Windows.
Действия на сервере Zabbix
Добавление данных для мониторинга будет показано на примере данных максимальной температуры ядра первого процессора.
Добавление элемента данных
Открываем необходимый узел и перейдя в «Элементы данных» добавляем новый нажав «Создать элемент данных«.
Необходимо заполнить следующие поля:
- Имя — core0 Temperature;
- Ключ — pve-t.core0;
- Тип информации — Числовой (с плавающей точкой);
- Интервал обновления — 1m;
- Период хранения истории — 1w;
- Группы элементов данных — CPU.
Добавление тригера
Открываем необходимый узел и перейдя в «Тригеры» добавляем новый нажав «Создать тригер«.
Необходимо заполнить следующие поля:
Выражение формируется на вкладке открывающейся по кнопке «Добавить» рядом с полем «Выражение«.
Добавление графика
Открываем необходимый узел и перейдя в «Графики» добавляем новый нажав «Создать график«.
Какое количество графиков и настройки параметров отображения решите сами. Например, мне нравится выводить все параметры температур в один график.
По нажатию кнопки «Добавить» в параметре «Элемент данных» выбираем все необходимые элементы данных для отображения на графике.
В результате мой график имеет следующий вид:
На графике видно как менялись показания когда я подбирал оптимальное положение и тип вентиляторов.
К моему удивлению расположение мощного вентилятора на выдув воздуха снижает общую температуру при закрытом корпусе лучше чем при его отсутствии и открытом корпусе.
Заключение
После того как вы увидите свой график температурных параметров вам захочется поиграться с корпусом системного блока и вентиляторами для получения оптимальных параметров температуры. Основываясь на реальных данных вы сможете правильно настроить охлаждение важных узлов системного блока. Иногда наши мнения ошибочны. Против законов физики не попрешь. Например, после того как я стал использовать мониторинг температуры я кардинально поменял отношение и к тому какие должны быть вентиляторы и как их располагать.
В результате все мои сервера стали работать тише а температурные параметры соответствует средним для данных типов устройств.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Читая их я получаю информацию которая позволяет мне улучшить качество написания статей. Кроме того, оставляя комментарии вы помогаете сайту получить более высокий рейтинг у поисковых систем. Давайте общаться.
5 комментариев для статьи “ Мониторинг температуры в Zabbix ”
Большое спасибо за статью!
У меня почему то 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
И рестартуем агента. Остальное все тоже самое
Спасибо за информацию. Обезательно дополню статью.