10 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 poller'ами. Узел сети всегда опрашивается только одним IPMI poller'ом одновременно, что уменьшает количество открытых соединений с контроллерами BMC. Таким образом, можно безопасно увеличивать количество IPMI poller'ов, не беспокоясь о перегрузке контроллеров BMC. Процесс менеджера IPMI автоматически запускается, когда запускается хотя бы один IPMI poller.

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

Настройка

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

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

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

Конфигурация сервера

По умолчанию сервер Zabbix не настроен на запуск каких-либо опрашивателей IPMI, поэтому любые добавленные элементы данных IPMI не будут работать. Чтобы изменить это, откройте файл конфигурации сервера Zabbix (zabbix_server.conf) от имени 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 object

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

Тайм-ауты сообщений 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 сервера/прокси.