Решение проблемы

Zabbix настройка мониторинга температуры


Появилась у меня потребность мониторить температуру windows серверов в Zabbix. Из систем мониторинга он мне больше всего нравится, поэтому смотрел в его сторону. Решение задачи оказалось неожиданно простым, о чем я и хочу вам рассказать.

Содержание:

  • 1 Введение
  • 2 Подготовка к мониторингу в Zabbix
  • 3 Настройка Zabbix agent в Windows
  • 4 Настройка мониторинга на Zabbix сервере
  • 5 item became not supported
  • 6 Дополнительные материалы по Zabbix

Введение

Zabbix настройка мониторинга температуры

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 7.
  2. Настройка CentOS 7.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 9, если предпочитаете его:

  1. Установка Debian 9.
  2. Базовая настройка Debian 9.
  3. Установка и настройка zabbix на debian.

Текущая статья писалась для версии 2.4, все скриншоты приведены из нее. В настоящее время уже вышли более новые версии, но вся нижеизложенная инструкция не потеряла актуальности. Все будет работать и в новой версии.

Подготовка к мониторингу в Zabbix

Описанным мной способом можно мониторить температуру не только windows серверов, но и любых рабочих станций, если будет такая необходимость. Схема мониторинга следующая:

Существует бесплатная утилита Open Hardware Monitor, которая может показывать температуру некоторых датчиков сервера. Вообще говоря, она много чего может показывать (напряжение, скорость вентиляторов, загрузку процессора), но в данном случае нас интересует только температура. У этой утилиты есть версия, работающая в командной строке. Из командной строки показания датчиков можно записывать в файл. Этот файл можно анализировать и забирать из него необходимую для мониторинга информацию. Дальше эта информация передается в сервер Zabbix с помощью опции UserParameter. Все достаточно просто и в то же время эффективно.

Приступим к реализации. Скачиваем GUI версию утилиты по ссылке, приведенной ранее и консольную версию OpenHardwareMonitorReport. Запускаем GUI на сервере и смотрим, какие датчики нам доступны для мониторинга.

OpenHardwareMonitor для мониторинга в Zabbix

Программа увидела несколько датчиков. С процессором все понятно, а вот три других датчика не ясно, чью температуру показывают. Я хотел мониторить температуру процессора и материнской платы. Узнать, какая температура относится к материнской плате можно несколькими способами. Конкретно в данной ситуации я просто запустил портированную версию AIDA64 и посмотрел, какие показания у датчика материнской платы:

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

Оказалось — 45 градусов. Я запомнил, что датчик Temperature #3 отображает температуру материнской платы.

Можно было пойти другим путем, зайти в IPMI панель, если она есть, и посмотреть там. Я работал с серверами SuperMicro, там она есть. Я на всякий случай зашел и проверил:

IPMI сенсоры мониторинга

Почему-то в этой панели не оказалось информации с датчика температуры процессора. Но нам это не важно. Самое главное, что мы узнали параметры, за которыми будем следить — это CPU Packege и Temperature #3. Теперь запускаем консольную версию и смотрим вывод информации. Я для удобства положил OpenHardwareMonitorReport.exe в папку с основной программой и все это хозяйство скопировал в корень диска C:

OpenHardwareMonitorReport экспорт данных в файл

Открываем файл 1.txt. Ищем там строки

|  +- CPU Package    :       52       51       52 (/intelcpu/0/temperature/4)
|  |  +- Temperature #3 :       45       45       45 (/lpc/nct6776f/temperature/3)

Нас интересует выделенный текст. По нему мы будем вычленять температуру для мониторинга и передавать ее на Zabbix сервер. Создаем в этой же папке 2 bat файла следующего содержания:

CPUTemperature.bat

@echo off

for /F "usebackq tokens=7-10" %%a in (`C:OpenHardwareMonitorOpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/intelcpu/0/temperature/4">nul && set temper=%%a
echo %temper%

MotherTemperature.bat

@echo off

for /F "usebackq tokens=7-10" %%a in (`C:OpenHardwareMonitorOpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/lpc/nct6776f/temperature/3">nul && set temper=%%a
echo %temper%

Запускаем эти батники в командной строке и проверяем вывод. Там должны быть только цифры температуры:

cmd вывод температур с датчиков

Отлично, на выходе готовые цифры, которые мы будем передавать в Zabbix. Займемся его настройкой.

Настройка Zabbix agent в Windows

Zabbix настройка мониторинга температуры

Предполагается, что у вас уже настроен сервер мониторинга Zabbix и подключены клиенты, которые ему передают информацию. В данном материале я не буду касаться непосредственно установки и настройки сервера Zabbix, это будет отдельный материал. Сейчас же мы берем готовый файл конфигурации агента zabbix_agentd.win.conf и добавляем в самый конец файла следующие строки:

UserParameter=Temperature.CPU, C:OpenHardwareMonitorCPUTemperature.bat

UserParameter=Temperature.Mother, C:OpenHardwareMonitorMotherTemperature.bat

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

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

Теперь идем на сервер. У меня Zabbix установлен на сервере CentOS, хотя это не принципиально. Добавляем новый Item. Пойти можно двумя путями:

  • Создать template, в него добавить все items, создать триггеры, графики и назначить этот шаблон нужным серверам.
  • К каждому серверу отдельно добавлять только необходимые итемы и вручную добавлять триггеры и графики.

Очевидно, что первым путем идти удобнее и разумнее. Я так и поступил, но в процессе реализации столкнулся с проблемой. Не все сервера имеют одинаковый набор датчиков. Где-то я не смог снять температуру с материнской платы, где-то вместо одного процессора, стояло два и хотелось снимать температуру с обоих камней. Как будет в вашем случае — не знаю. Если все серверы однотипные, то создавайте template, если все разные, то вручную добавляйте каждый итем на сервер. Я в итоге сделал и шаблон для одинотипных серверов, и вручную добавлял итемы туда, где имелись отличия от шаблона.

Итак, сначала создадим шаблон. Идем в ConfigurationsTemplatesCreate Template. Шаблон я назвал Temperature Windows. Добавил в него ApplicationTemperature, затем Item CPU Temperatue. Заполняем поля итема как у меня на картинке:

Zabbix создание итема

Параметр Temperature.CPU тот же самый, что и в файле конфигурации агента.

По аналогии создаем итем Mother Temperatue:

Zabbix создание item

Сохраняем шаблон. По желанию создаем для него триггеры и графики. Можно и без них. Добавляем шаблон к серверу, который хотим мониторить. Ждем некоторое время и идем проверять входящие данные. Открываем MonitoringLatest data:

Zabbix latest data

Нажимаем graph и смотрим график:

Zabbix график температуры

Теперь добавим в Zabbix еще один сервер для мониторинга, который будет отличаться по конфигурации от предыдущего. На его примере я покажу, как менять настройки клиента и сервера. С этого сервера я не могу снять данные с датчика температуры материнской платы, по какой причине — не знаю, но не AIDA64 ни OpenHardwareMonitor мне температуру не показывают. Ее можно взять по SNTP с этого сервера, но это отдельная тема. В этом сервере 2 процессора и я хочу мониторить температуру обоих.

Запускаем GUI интерфейс и смотрим, какие датчики мы сможем мониторить:

Open Hardware Monitor

Нас будет интересовать температура обоих ядер процессора. Теперь запускаем OpenHardwareMonitorReport.exe с выводом информации в текстовый файл. Смотрим, как выглядят строки с интересующей нас информацией:

|  +- CPU Package    :       59       59       59 (/intelcpu/0/temperature/6)
|  +- CPU Package    :       53       53       54 (/intelcpu/1/temperature/6)

Создаем два bat файла следующего содержания:

CPU1Temperature.bat

@echo off

for /F "usebackq tokens=7-10" %%a in (`C:OpenHardwareMonitorOpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/intelcpu/0/temperature/6">nul && set temper=%%a
echo %temper%

CPU2Temperature.bat

@echo off

for /F "usebackq tokens=7-10" %%a in (`C:OpenHardwareMonitorOpenHardwareMonitorReport.exe`) do echo %%b %%c %%d| find "/intelcpu/1/temperature/6">nul && set temper=%%a
echo %temper%

Редактируем конфигурационный файл zabbix_agentd.win.conf агента Zabbix на клиенте. Добавляем в конец две строки:

UserParameter=Temperature.CPU1, C:OpenHardwareMonitorCPU1Temperature.bat

UserParameter=Temperature.CPU2, C:OpenHardwareMonitorCPU2Temperature.bat

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

Дальше идем на сервер Zabbix и по аналогии с предыдущим сервером создаем там Итемы мониторинга. Причем итемы создаем не в шаблоне, а в конкретном сервере, который будем мониторить. Параметр key в этих итемах будет соответственно Temperature.CPU1 и Temperature.CPU2 Ждем некоторое время и проверяем результат.

item became not supported

Zabbix настройка мониторинга температуры

Во время отладки работ я столкнулся с проблемами. Периодически Item отваливались и получали статус: Not Supported. При этом в логах сервера были следующие записи:

27614:20150702:065936.698 item "videoserver:Temperature.CPU" became not supported: Timeout while executing a shell script.

27625:20150702:070938.720 item "videoserver:Temperature.CPU" became supported

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

Я обратил внимание, что при запуске батника из командной строки, вывод данных происходит с приличной задержкой в 3-5 секунд. В Zabbix по-умолчанию стоит параметр, по которому агент ожидает ответа от скрипта 3 секунды и на сервере есть подобный параметр, по которому сервер ждет ответа от агента 3 секунды. Если за это время данные не поступают, то итем переходит в статус Not Supported и данные с него не собираются.

Чтобы избавиться от этой ошибки, необходимо увеличить таймаут до 15-ти секунд. Меняем параметр в конфиге на клиентах и на сервере. Он и там и там один и тот же:

Timeout=15

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

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

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


СМОТРИ ТАКЖЕ