IPMI 점검
개요
Zabbix에서 IPMI(Intelligent Platform Management Interface) 장치의 상태와 가용성을 모니터링할 수 있습니다. IPMI 점검을 수행하려면 Zabbix 서버가 사전에 IPMI 지원과 함께 설정되어 있어야 합니다.
IPMI는 컴퓨터 시스템의 원격 "lights-out" 또는 "out-of-band" 관리를 위한 표준화된 인터페이스입니다. 운영체제나 시스템 전원이 켜져 있는지 여부와 관계없이, 이른바 "out-of-band" 관리 카드에서 직접 하드웨어 상태를 모니터링할 수 있게 해줍니다.
Zabbix IPMI 모니터링은 IPMI를 지원하는 장치(HP iLO, DELL DRAC, IBM RSA, Sun SSP 등)에서만 동작합니다.
IPMI 관리자 프로세스는 IPMI 폴러를 통해 IPMI 점검을 스케줄링합니다. 호스트는 항상 한 시점에 하나의 IPMI 폴러에 의해서만 폴링되며, 이를 통해 BMC 컨트롤러로의 열린 연결 수를 줄입니다. 따라서 BMC 컨트롤러 과부하를 걱정하지 않고 IPMI 폴러 수를 늘려도 안전합니다. IPMI 관리자 프로세스는 IPMI 폴러가 하나 이상 시작되면 자동으로 시작됩니다.
IPMI 점검과 관련된 알려진 문제도 참고하세요.
설정
호스트 설정
호스트는 IPMI 점검을 처리하도록 설정되어 있어야 합니다. IP와 포트 번호를 포함한 IPMI 인터페이스를 추가하고, IPMI 인증 파라미터를 정의해야 합니다.
자세한 내용은 호스트 설정을 참고하세요.
서버 설정
기본적으로 Zabbix 서버는 IPMI 폴러를 시작하도록 설정되어 있지 않으므로, 추가된 IPMI 항목이 동작하지 않습니다. 이를 변경하려면 root 권한으로 Zabbix 서버 설정 파일 (zabbix_server.conf)을 열어 다음 줄을 찾으세요:
# StartIPMIPollers=0
주석을 해제하고 폴러 개수를 예를 들어 3으로 설정하여 다음과 같이 만듭니다:
StartIPMIPollers=3
파일을 저장한 후 zabbix_server를 재시작하세요.
항목 설정
호스트 수준에서 항목을 설정할 때:
- 유형으로 'IPMI agent'를 선택하세요
- 호스트 내에서 유일한 항목 키를 입력하세요(예: ipmi.fan.rpm)
- 호스트 인터페이스에는 해당하는 IPMI 인터페이스(IP와 포트)를 선택하세요. 호스트에 IPMI 인터페이스가 존재해야 한다는 점에 유의하세요.
- 값을 가져올 IPMI 센서를 지정하세요(예: Dell
Poweredge의 'FAN MOD 1A RPM'). 기본적으로 센서 ID를
지정해야 합니다. 값 앞에 접두사를 사용할 수도
있습니다:
id:- 센서 ID를 지정하기 위해 사용;name:- 센서 전체 이름을 지정하기 위해 사용. 센서를 전체 이름으로만 구분할 수 있는 상황에서 유용할 수 있습니다.
- 해당하는 정보 유형('Numeric (float)', 이산 센서의 경우에는 'Numeric (unsigned)'), 단위(대체로 'rpm'), 그 외 필요한 항목 속성을 선택하세요
지원되는 점검
IPMI agent는 내장 항목인 ipmi.get을 지원하며, 이는 IPMI 센서 관련 정보를 반환하고 IPMI 센서 자동 검색에 사용할 수 있습니다.
반환 값: JSON object
타임아웃과 세션 종료
IPMI 메시지 타임아웃과 재시도 횟수는 OpenIPMI 라이브러리에서 정의됩니다. 현재 OpenIPMI의 설계상, 인터페이스나 항목 수준 모두에서 이 값을 Zabbix에서 설정 가능하게 만들 수 없습니다.
LAN의 IPMI 세션 비활성 타임아웃은 60 +/-3초입니다. 현재 OpenIPMI로 Activate Session 명령을 주기적으로 전송하도록 구현하는 것은 불가능합니다. Zabbix에서 특정 BMC로의 IPMI 항목 점검이 BMC에 설정된 세션 타임아웃보다 오래 발생하지 않으면 타임아웃 만료 후의 다음 IPMI 점검은 개별 메시지 타임아웃, 재시도, 또는 수신 오류로 인해 타임아웃됩니다. 이후 새 세션이 열리고 BMC의 전체 재검색이 시작됩니다. 새 세션을 관리하기 위해 새 UDP 포트가 열릴 수 있습니다. 비활성은 나가는 요청과 들어오는 응답이 모두 없는 상태로 정의됩니다. BMC의 불필요한 재검색을 피하려면 BMC에 설정된 IPMI 세션 비활성 타임아웃보다 낮게 IPMI 항목 폴링 주기를 설정하는 것을 권장합니다.
IPMI 이산 센서에 대한 참고 사항
호스트에서 센서를 찾으려면 DebugLevel=4를 활성화한 상태로 Zabbix 서버를 시작하세요. 몇 분 기다린 후 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 센서는 온도, 전압, 분당 회전수 같은 연속적인 값을 측정하기 때문에 종종 "analog" 센서라고도 불립니다.
다른 예로 "reading_type:0x3"을 가진 센서가 있습니다. "Table 42-1, Event/Reading Type Code Ranges"에 따르면 reading type 코드 02h-0Ch는 "Generic Discrete" 센서를 의미합니다. 이산 센서는 최대 15개의 가능한 상태(즉 최대 15개의 의미 있는 비트)를 가집니다. 예를 들어 "type:0x7"인 'CATERR' 센서의 경우 "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' 센서는 "Power Unit"을 의미하는
"type:0x9" 유형을 가집니다. Offset 00h는 "PowerOff/Power Down"을 의미합니다. 다시 말해
최하위 비트가 1이면 서버가 전원이 꺼진 상태입니다. 이
비트를 검사하려면 마스크 '1'과 함께 bitand 함수를
사용할 수 있습니다. 트리거 표현식은 다음과 같을 수 있습니다
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"으로
표시됩니다.
OpenIPMI-2.0.16, 2.0.17, 2.0.18을 사용하는 Zabbix 서버에서 IPMI 항목을 설정할 때는, IPMI agent 항목의 IPMI 센서 필드에 끝에 "0"이 붙은 이름을 사용하세요. Zabbix 서버가 OpenIPMI-2.0.19(또는 이후 버전)를 사용하는 새 Linux 배포판으로 업그레이드되면, 이러한 IPMI 이산 센서를 사용하는 항목은 "NOT SUPPORTED" 상태가 됩니다. 이 경우 IPMI 센서 이름을 변경하고(끝의 '0' 제거) 다시 "Enabled" 상태가 될 때까지 잠시 기다려야 합니다.
Threshold 센서와 이산 센서의 동시 사용 가능성에 대한 참고 사항
일부 IPMI agent는 같은 이름으로 threshold 센서와 이산 센서를 모두 제공합니다. 이 경우 항상 threshold 센서가 우선적으로 사용됩니다.
연결 종료에 대한 참고 사항
IPMI 점검이 수행되지 않는 경우(모든 호스트 IPMI 항목이 비활성화/notsupported 상태, 호스트가 비활성화/삭제됨, 호스트가 점검 중 등 어떤 이유든) Zabbix 서버 또는 프록시가 시작된 시점에 따라 3에서 4시간 사이에 IPMI 연결이 종료됩니다.