4. Проверки IPMI

Обзор

В Zabbix можно отслеживать состояние и доступность устройств Intelligent Platform Management Interface (IPMI). Для выполнения IPMI-проверок сервер Zabbix должен быть предварительно настроен с поддержкой IPMI.

IPMI — это стандартизованный интерфейс для удаленного управления компьютерными системами в режиме "lights-out" или "out-of-band". Он позволяет отслеживать состояние оборудования напрямую с так называемых карт управления "out-of-band", независимо от операционной системы и даже от того, включена ли вообще машина.

IPMI-мониторинг в Zabbix работает только для устройств с поддержкой IPMI (HP iLO, DELL DRAC, IBM RSA, Sun SSP и т. д.).

Процесс менеджера IPMI планирует IPMI-проверки, выполняемые IPMI-опросчиками. Узел сети всегда опрашивается только одним IPMI-опросчиком одновременно, что уменьшает количество открытых соединений с контроллерами BMC. Таким образом, можно безопасно увеличивать количество IPMI-опросчиков, не беспокоясь о перегрузке контроллеров BMC. Процесс менеджера IPMI автоматически запускается, когда запущен хотя бы один IPMI-опросчик.

См. также известные проблемы для IPMI-проверок.

Настройка

Настройка узла сети

Узел сети необходимо настроить для обработки проверок IPMI. Нужно добавить интерфейс IPMI, с соответствующими IP адресом и номером порта, а также задать параметры аутентификации IPMI.

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

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

По умолчанию, Zabbix сервер не запускает IPMI поллеры, поэтому любые добавленные элементы данных IPMI не будут работать. Чтобы изменить это, откройте файл конфигурации (zabbix_server.conf) Zabbix сервера из-под root и найдите следующую строку:

# StartIPMIPollers=0

Раскомментируйте эту строку и задайте количество поллеров, скажем, равное 3 так, чтобы строка была такой:

StartIPMIPollers=3

Сохраните файл, после чего перезапустите zabbix_server.

Настройка элемента данных

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

  • В поле Тип выберите «IPMI агент»
  • Введите ключ элемента данных, уникальный в пределах узла сети (скажем, ipmi.fan.rpm)
  • В поле Интерфейс узла сети выберите подходящий IPMI интерфейс (IP и порт). Обратите внимание, IPMI интерфейс должен уже существовать на узле сети.
  • Укажите IPMI датчик, с которого забирать метрику (например, «FAN MOD 1A RPM' на Dell Poweredge»). По умолчанию, необходимо указать ID датчика. Также имеется возможность использования префиксов до самого значения:
    • id: — чтобы указать ID датчика;
    • name: — чтобы указать полное имя датчика. Эта опция может быть полезна в ситуациях, когда датчики можно отличить, только указав полное имя.
  • Выберите соответствующий тип информации («Числовой (с плавающей точкой)» в данном случае; для дискретных датчиков — «Числовой (целое положительное)»), единицы измерения (скорее всего, «rpm») и любые другие требуемые атрибуты элемента данных.
Поддерживаемые проверки

IPMI агент поддерживает встроенный элемент данных ipmi.get, который возвращает информацию, связанную с датчиком IPMI, и может использоваться для обнаружения датчиков IPMI.
Возвращаемое значение: объект JSON

Тайм-аут и завершение сеанса

Тайм-ауты сообщений IPMI и количество повторных попыток определяются в библиотеке OpenIPMI. Из-за текущей архитектуры OpenIPMI невозможно сделать эти значения настраиваемыми в Zabbix ни на уровне интерфейса, ни на уровне элемента данных.

Тайм-аут неактивности сеанса IPMI для LAN составляет 60 +/-3 секунды. В настоящее время невозможно реализовать периодическую отправку команды Activate Session с помощью OpenIPMI. Если от Zabbix не выполняются проверки элементов данных IPMI к определённому BMC дольше, чем тайм-аут сеанса, настроенный в BMC, то следующая проверка IPMI после истечения тайм-аута завершится по тайм-ауту из-за индивидуальных тайм-аутов сообщений, повторных попыток или ошибки приёма. После этого будет открыта новая сессия и инициировано полное повторное сканирование BMC. Для управления новым сеансом может быть открыт новый UDP-порт. Неактивность определяется отсутствием как исходящих запросов, так и входящих ответов. Если вы хотите избежать ненужных повторных сканирований BMC, рекомендуется установить интервал опроса элементов данных IPMI меньше тайм-аута неактивности сеанса IPMI, настроенного в BMC.

Примечания по дискретным датчикам IPMI

Чтобы найти датчики на узле сети, запустите сервер Zabbix с включённым DebugLevel=4. Подождите несколько минут и найдите записи об обнаружении датчиков в журнале сервера Zabbix:

$ grep 'Added sensor' zabbix_server.log
8358:20130318:111122.170 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:7 id:'CATERR' reading_type:0x3 ('discrete_state') type:0x7 ('processor') full_name:'(r0.32.3.0).CATERR'
8358:20130318:111122.170 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:15 id:'CPU Therm Trip' reading_type:0x3 ('discrete_state') type:0x1 ('temperature') full_name:'(7.1).CPU Therm Trip'
8358:20130318:111122.171 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:17 id:'System Event Log' reading_type:0x6f ('sensor specific') type:0x10 ('event_logging_disabled') full_name:'(7.1).System Event Log'
8358:20130318:111122.171 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:17 id:'PhysicalSecurity' reading_type:0x6f ('sensor specific') type:0x5 ('physical_security') full_name:'(23.1).PhysicalSecurity'
8358:20130318:111122.171 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:14 id:'IPMI Watchdog' reading_type:0x6f ('sensor specific') type:0x23 ('watchdog_2') full_name:'(7.7).IPMI Watchdog'
8358:20130318:111122.171 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:16 id:'Power Unit Stat' reading_type:0x6f ('sensor specific') type:0x9 ('power_unit') full_name:'(21.1).Power Unit Stat'
8358:20130318:111122.171 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:16 id:'P1 Therm Ctrl %' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'(3.1).P1 Therm Ctrl %'
8358:20130318:111122.172 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:16 id:'P1 Therm Margin' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'(3.2).P1 Therm Margin'
8358:20130318:111122.172 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:13 id:'System Fan 2' reading_type:0x1 ('threshold') type:0x4 ('fan') full_name:'(29.1).System Fan 2'
8358:20130318:111122.172 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:13 id:'System Fan 3' reading_type:0x1 ('threshold') type:0x4 ('fan') full_name:'(29.1).System Fan 3'
8358:20130318:111122.172 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:14 id:'P1 Mem Margin' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'(7.6).P1 Mem Margin'
8358:20130318:111122.172 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:17 id:'Front Panel Temp' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'(7.6).Front Panel Temp'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:15 id:'Baseboard Temp' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'(7.6).Baseboard Temp'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:9 id:'BB +5.0V' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +5.0V'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:14 id:'BB +3.3V STBY' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +3.3V STBY'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:9 id:'BB +3.3V' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +3.3V'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:17 id:'BB +1.5V P1 DDR3' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +1.5V P1 DDR3'
8358:20130318:111122.173 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:17 id:'BB +1.1V P1 Vccp' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +1.1V P1 Vccp'
8358:20130318:111122.174 Added sensor: host:'192.168.1.12:623' id_type:0 id_sz:14 id:'BB +1.05V PCH' reading_type:0x1 ('threshold') type:0x2 ('voltage') full_name:'(7.1).BB +1.05V PCH'

Для расшифровки типов и состояний датчиков IPMI доступна копия спецификации IPMI 2.0 (обратите внимание, что дальнейшие обновления спецификации IPMI не планируются).

Первый параметр, с которого следует начать, — это "reading_type". Используйте "Table 42-1, Event/Reading Type Code Ranges" из спецификации для расшифровки кода "reading_type". Большинство датчиков в нашем примере имеют "reading_type:0x1", что означает датчик "threshold". "Table 42-3, Sensor Type Codes" показывает, что "type:0x1" означает датчик температуры, "type:0x2" — датчик напряжения, "type:0x4" — вентилятор и т. д. Датчики threshold иногда называют "аналоговыми" датчиками, так как они измеряют непрерывные параметры, такие как температура, напряжение, число оборотов в минуту.

Другой пример — датчик с "reading_type:0x3". "Table 42-1, Event/Reading Type Code Ranges" говорит, что коды типа чтения 02h-0Ch означают датчик "Generic Discrete". Дискретные датчики имеют до 15 возможных состояний (другими словами — до 15 значащих битов). Например, для датчика 'CATERR' с "type:0x7" "Table 42-3, Sensor Type Codes" показывает, что этот тип означает "Processor", а значение отдельных битов следующее: 00h (младший значащий бит) — IERR, 01h — Thermal Trip и т. д.

В нашем примере есть несколько датчиков с "reading_type:0x6f". Для этих датчиков "Table 42-1, Event/Reading Type Code Ranges" рекомендует использовать "Table 42-3, Sensor Type Codes" для расшифровки значений битов. Например, датчик 'Power Unit Stat' имеет тип "type:0x9", что означает "Power Unit". Смещение 00h означает "PowerOff/Power Down". Другими словами, если младший значащий бит равен 1, то сервер выключен. Чтобы проверить этот бит, можно использовать функцию bitand с маской '1'. Выражение триггер может выглядеть так:

bitand(last(/www.example.com/Power Unit Stat,#1),1)=1

чтобы предупреждать о выключении сервера.

Заметки об именах дискретных датчиков в OpenIPMI-2.0.16, 2.0.17, 2.0.18 и 2.0.19

Имена дискретных датчиков в OpenIPMI-2.0.16, 2.0.17 и 2.0.18 зачастую имеют дополнительный символ «0» (или какую-то другую цифру или символ), добавленный в конце имени. Например, тогда как ipmitool и OpenIPMI-2.0.19 отображают имена датчиков как «PhysicalSecurity» или «CATERR», в OpenIPMI-2.0.16, 2.0.17 и 2.0.18 эти имена — «PhysicalSecurity0» или «CATERR0», соответственно.

При настройке элемента данных IPMI для Zabbix сервера, использующего OpenIPMI-2.0.16, 2.0.17 и 2.0.18, добавьте к их именам «0» в поле IPMI датчик для элементов данных IPMI агента. Когда ваш Zabbix сервер будет обновлён в новом Linux дистрибутиве, использующем OpenIPMI-2.0.19 (или более позднюю), элементы данных с такими IPMI дискретными датчиками перейдут в состояние «НЕ ПОДДЕРЖИВАЕТСЯ». Вам потребуется изменить их имена IPMI датчик (удалить «0» в конце) и подождать некоторое время, пока они станут «Активированными» снова.

Заметки об одновременной доступности пороговых и дискретных датчиков

Некоторые IPMI агенты предоставляют одновременно пороговые и дискретные датчики под одним именем. Предпочтение всегда отдаётся пороговому датчику.

Примечания о завершении соединений

Если IPMI проверки не выполняются (по любой из причин: все элементы данных IPMI деактивированы / не поддерживаются на узле сети, сам узел сети деактивирован/удалён, узел сети находится в режиме обслуживания и так далее), то соединение будет разорвано со стороны Zabbix сервера и прокси через 3 — 4 часа, в зависимости от времени запуска Zabbix сервера/прокси.