W Zabbix można monitorować stan i dostępność urządzeń z interfejsami IPMI (Intelligent Platform Management Interface).
Żeby przeprowadzać testy IPMI serwer Zabbix musi być wstępnie skonfigurowany z obsługą IPMI.
IPMI jest standardowym interfejsem do zdalnego zarządzania systemami komputerowymi typu "lights-out" lub "out-of-band". Pozwala na monitorowanie sprzętu bezpośrednio z tak zwanych kart zarządzania "out-of-band", niezależnie od systemu operacyjnego czy też nawet od tego, czy maszyna jest włączona.
Monitorowanie IPMI Zabbix działa wyłącznie dla urządzeń ze wsparciem IPMI (HP iLO, DELL DRAC, IBM RSA, Sun SSP, itd.).
Host musi być skonfigurowany do przetwarzania testów IPMI. Musi być dodany interfejs IPMI, z odpowiednim adresem IP i numerem portu, oraz muszą być zdefiniowane parametry uwierzytelniania IPMI.
Więcej szczegółów można obejrzeć w konfiguracji hostów.
Domyślnie serwer Zabbix nie jest skonfigurowany do uruchamiania jakiegokolwiek procesu pobierania IPMI, zatem każda dodana pozycja IPMI nie będzie działać. Żeby to zmienić, należy otworzyć jako root plik konfiguracyjny serwera Zabbix (zabbix_server.conf) i odszukać następującą linię:
Należy ją odkomentować i ustawić liczbę procesów pobierania na, powiedzmy, 3, na przykład tak:
Należy zapisać plik i na koniec uruchomić ponownie zabbix_server.
Podczas konfigurowania pozycji na poziomie hosta:
Żeby znaleźć czujniki na hoście, należy uruchomić serwer Zabbix z włączonym DebugLevel=4. Należy odczekać kilka minut i odszukać rekordy wykrytych czujników w pliku logu serwera 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'
Żeby zdekodować typy i stany czujników IPMI, należy pobrać kopię specyfikacji IPMI 2.0 z http://www.intel.com/content/www/us/en/servers/ipmi/ipmi-specifications.html (Podczas pisania tego dokumentu najnowszym dokumentem był http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/second-gen-interface-spec-v2.pdf)
Pierwszym parametrem, od którego trzeba zacząć jest "reading_type". Żeby zdekodować kod "reading_type" należy użyć tabeli "Table 42-1, Event/Reading Type Code Ranges" ze specyfikacji. Większość czujników z naszego przykładu ma "reading_type:0x1" co oznacza czujniki "threshold" (progowy). "Table 42-3, Sensor Type Codes" określa, że "type:0x1" oznacza czujnik temperatury, "type:0x2" - czujnik napięcia, "type:0x4" - wentylator itd. Czujniki progowe są czasami zwane czujnikami "analogowymi", jako że mierzą na bieżąco takie parametry jak: temperatura, napięcie, ilość obrotów na minutę.
Inny przykład - czujnik z "reading_type:0x3". "Table 42-1, Event/Reading Type Code Ranges" mówi, że typy kodów 02h-0Ch oznaczają czujnik "Dyskretny ogólnego przeznaczenia". Czujniki dyskretne posiadają do 15 możliwych stanów (innymi słowami - do 15 znaczących bitów). Na przykład, dla czujnika 'CATERR' z "type:0x7" tabela "Table 42-3, Sensor Type Codes" określa, że ten typ oznacza "Procesor" a znaczenie indywidualnych bitów to: 00h (najmniej znaczący bit) - IERR, 01h - Thermal Trip itd..
W naszym przykładzie jest kilka czujników z "reading_type:0x6f". Dla tych czujników tabela "Table 42-1, Event/Reading Type Code Ranges" zaleca użycie tabeli "Table 42-3, Sensor Type Codes" do zdekodowania znaczenia bitów. Na przykład, czujnik 'Power Unit Stat' ma typ "type:0x9", który oznacza "Power Unit". Offset 00h oznacza "PowerOff/Power Down". Innymi słowy, jeżeli najmniej znaczący bit jest równy 1, to serwer jest wyłączony. Żeby przetestować ten bit można użyć funkcji band z maską 1. Wyrażenie wyzwalacza mogłoby wyglądać tak
jeżeli chcemy być ostrzeżeni o wyłączeniu serwera.
Nazwy czujników dyskretnych w OpenIPMI-2.0.16, 2.0.17 i 2.0.18 często posiadają dodatkowe "0
" (lub inną cyfrę lub literę) dodaną na końcu. Na przykład, podczas gdy ipmitool
z OpenIPMI-2.0.19 wyświetli nazwy czujników jako "PhysicalSecurity
" lub "CATERR
", w OpenIPMI-2.0.16, 2.0.17 i 2.0.18 nazwy będą odpowiednio "PhysicalSecurity0
" lub "CATERR0
".
Podczas konfigurowania pozycji IPMI w serwerze Zabbix używającym OpenIPMI-2.0.16, 2.0.17 i 2.0.18, w polu Czujnik IPMI pozycji agenta IPMI należy używać właśnie nazw zakończonych na "0". Gdy serwer Zabbix zostanie zaktualizowany do nowej dystrybucji Linux-a, używającej OpenIPMI-2.0.19 (lub nowszej), pozycje z takimi czujnikami dyskretnymi IPMI staną się "NIEWSPIERANE". Trzeba będzie zmienić ich nazwy Czujnika IPMI (usunąć '0' z końca) i odczekać aż znowu zostaną "Włączone".
Niektórzy agenci IPMI udostępniają pod tą samą nazwą zarówno czujniki progowe jak i czujniki dyskretne. W wersjach Zabbix poniżej 2.2.8, wybierany był pierwszy udostępniony czujnik. Od wersji 2.2.8, preferowany jest zawsze czujnik progowy.