IPMI
IPMI 메트릭은 모니터링 대상 장치의 전류, 전압, 전력 소비량, 사용률, 팬 회전 속도, 온도 및 장치 상태를 표시합니다.
IPMI는 Intelligent Platform Management Interface의 약자로, Intel 아키텍처 기반 엔터프라이즈 시스템의 주변 장치를 관리하기 위한 업계 표준입니다. 이 표준은 Intel, Hewlett-Packard, NEC, Dell Computer 및 SuperMicro가 제정했습니다. IPMI를 사용하면 온도, 전압, 팬 작동 상태, 전원 상태 등 서버의 물리적 상태를 모니터링할 수 있습니다.
IPMI를 사용하면 운영 및 유지보수 시스템이 모니터링 대상 서버와 기타 장치의 운영 상태 지표를 비침입 방식으로 수집하여 정보 보안을 유지할 수 있습니다.
설정¶
사전 조건¶
ipmitool도구 설치
DataKit은 ipmitool을 통해 IPMI 데이터를 수집하므로 이 도구를 머신에 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.
# CentOS
yum -y install ipmitool
# Ubuntu
sudo apt-get update && sudo apt -y install ipmitool
# macOS
brew install ipmitool # macOS
- 모듈 로드
설치 후 다음 명령을 실행하면 IPMI 서버의 출력 정보를 확인할 수 있습니다.
ipmitool -I lanplus -H <IP-address> -U <username> -P <password> sdr elist
SEL | 72h | ns | 7.1 | No Reading
Intrusion | 73h | ok | 7.1 |
Fan1A RPM | 30h | ok | 7.1 | 2160 RPM
Fan2A RPM | 32h | ok | 7.1 | 2280 RPM
Fan3A RPM | 34h | ok | 7.1 | 2280 RPM
Fan4A RPM | 36h | ok | 7.1 | 2400 RPM
Fan5A RPM | 38h | ok | 7.1 | 2280 RPM
Fan6A RPM | 3Ah | ok | 7.1 | 2160 RPM
Inlet Temp | 04h | ok | 7.1 | 23 degrees C
Exhaust Temp | 01h | ok | 7.1 | 37 degrees C
Temp | 0Fh | ok | 3.2 | 45 degrees C
... more
Note
- IP 주소는 원격으로 관리하는 서버의 IPMI 포트 주소를 의미합니다
- 서버의
IPMI Settings -> Enable IPMI on LAN옵션을 활성화해야 합니다 - 서버의
Channel Privilege Level Restrictions운영자 수준을<User Name>권한 수준과 일치시켜야 합니다 ipmitool도구는 DataKit을 실행하는 머신에 설치합니다.
수집기 설정¶
DataKit 설치 디렉터리의 conf.d/samples로 이동하여 ipmi.conf.sample을 복사한 뒤 이름을 ipmi.conf로 변경합니다. 예시는 다음과 같습니다.
[[inputs.ipmi]]
## If you have so many servers that 10 seconds can't finish the job.
## You can start multiple collectors.
## (Optional) Collect interval: (defaults to "10s").
interval = "10s"
## Set true to enable election
election = true
## The binPath of ipmitool
## (Example) bin_path = "/usr/bin/ipmitool"
bin_path = "/usr/bin/ipmitool"
## (Optional) The envs of LD_LIBRARY_PATH
## (Example) envs = [ "LD_LIBRARY_PATH=XXXX:$LD_LIBRARY_PATH" ]
## The ips of ipmi servers
## (Example) ipmi_servers = ["192.168.1.1"]
ipmi_servers = ["192.168.1.1"]
## The interfaces of ipmi servers: (defaults to []string{"lan"}).
## If len(ipmi_users)<len(ipmi_ips), will use ipmi_users[0].
## (Example) ipmi_interfaces = ["lanplus"]
ipmi_interfaces = ["lanplus"]
## The users name of ipmi servers: (defaults to []string{}).
## If len(ipmi_users)<len(ipmi_ips), will use ipmi_users[0].
## (Example) ipmi_users = ["root"]
## (Warning!) You'd better use hex_keys, it's more secure.
ipmi_users = ["root"]
## The passwords of ipmi servers: (defaults to []string{}).
## If len(ipmi_passwords)<len(ipmi_ips), will use ipmi_passwords[0].
## (Example) ipmi_passwords = ["calvin"]
## (Warning!) You'd better use hex_keys, it's more secure.
ipmi_passwords = ["calvin"]
## (Optional) Provide the hex key for the IMPI connection: (defaults to []string{}).
## If len(hex_keys)<len(ipmi_ips), will use hex_keys[0].
## (Example) hex_keys = ["XXXX"]
# hex_keys = []
## (Optional) Schema Version: (defaults to [1]).input.go
## If len(metric_versions)<len(ipmi_ips), will use metric_versions[0].
## (Example) metric_versions = [2]
metric_versions = [2]
## (Optional) Exec ipmitool timeout: (defaults to "5s").
timeout = "5s"
## (Optional) Ipmi server drop warning delay: (defaults to "300s").
## (Example) drop_warning_delay = "300s"
drop_warning_delay = "300s"
## Key words of current.
## (Example) regexp_current = ["current"]
regexp_current = ["current"]
## Key words of voltage.
## (Example) regexp_voltage = ["voltage"]
regexp_voltage = ["voltage"]
## Key words of power.
## (Example) regexp_power = ["pwr","power"]
regexp_power = ["pwr","power"]
## Key words of temp.
## (Example) regexp_temp = ["temp"]
regexp_temp = ["temp"]
## Key words of fan speed.
## (Example) regexp_fan_speed = ["fan"]
regexp_fan_speed = ["fan"]
## Key words of usage.
## (Example) regexp_usage = ["usage"]
regexp_usage = ["usage"]
## Key words of usage.
## (Example) regexp_count = []
# regexp_count = []
## Key words of status.
## (Example) regexp_status = ["fan"]
regexp_status = ["fan"]
[inputs.ipmi.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
설정 후 DataKit을 다시 시작합니다.
ConfigMap을 사용한 수집기 설정 주입 또는 ENV_DATAKIT_INPUTS 설정을 통해 수집기를 활성화할 수 있습니다.
환경 변수를 사용하여 설정 매개변수를 변경할 수도 있습니다(ENV_DEFAULT_ENABLED_INPUTS에 기본 수집기로 추가해야 함).
-
ENV_INPUT_IPMI_INTERVAL
수집 간격
필드 유형: Duration
수집기 설정 필드:
interval기본값: 10s
-
ENV_INPUT_IPMI_TIMEOUT
시간 초과
필드 유형: Duration
수집기 설정 필드:
timeout기본값: 5s
-
ENV_INPUT_IPMI_DROP_WARNING_DELAY
IPMI 서버 중단 경고 지연
필드 유형: Duration
수집기 설정 필드:
drop_warning_delay기본값: 5m
-
ENV_INPUT_IPMI_BIN_PATH
ipmitool실행 파일 경로필드 유형: String
수집기 설정 필드:
bin_path예시:
/usr/bin/ipmitool -
ENV_INPUT_IPMI_ENVS
LD_LIBRARY_PATH 종속 라이브러리 경로
필드 유형: JSON
수집기 설정 필드:
envs예시: '["LD_LIBRARY_PATH=XXXX:$LD_LIBRARY_PATH"]'
-
ENV_INPUT_IPMI_SERVERS
IPMI 서버 URL
필드 유형: JSON
수집기 설정 필드:
ipmi_servers예시: '["192.168.1.1","192.168.1.2"]'
-
ENV_INPUT_IPMI_INTERFACES
IPMI 서버 인터페이스 프로토콜
필드 유형: JSON
수집기 설정 필드:
ipmi_interfaces예시: '["
lanplus"]' -
ENV_INPUT_IPMI_USERS
사용자 이름
필드 유형: JSON
수집기 설정 필드:
ipmi_users예시: '["root"]'
-
ENV_INPUT_IPMI_PASSWORDS
비밀번호
필드 유형: JSON
수집기 설정 필드:
ipmi_passwords예시: '["Calvin"]'
-
ENV_INPUT_IPMI_HEX_KEYS
IPMI 연결용 16진수 키
필드 유형: JSON
수집기 설정 필드:
hex_keys예시: '["50415353574F5244"]'
-
ENV_INPUT_IPMI_METRIC_VERSIONS
메트릭 버전
필드 유형: JSON
수집기 설정 필드:
metric_versions예시: '[2 or 3]'
-
ENV_INPUT_IPMI_REGEXP_CURRENT
전류 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_current예시: '["current"]'
-
ENV_INPUT_IPMI_REGEXP_VOLTAGE
전압 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_voltage예시: '["voltage"]'
-
ENV_INPUT_IPMI_REGEXP_POWER
전력 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_power예시: '["pwr","power"]'
-
ENV_INPUT_IPMI_REGEXP_TEMP
온도 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_temp예시: '["temp"]'
-
ENV_INPUT_IPMI_REGEXP_FAN_SPEED
팬 회전 속도 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_fan_speed예시: '["fan"]'
-
ENV_INPUT_IPMI_REGEXP_USAGE
사용률 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_usage예시: '["usage"]'
-
ENV_INPUT_IPMI_REGEXP_COUNT
카운트 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_count예시: '[]'
-
ENV_INPUT_IPMI_REGEXP_STATUS
상태 메트릭 정규식
필드 유형: JSON
수집기 설정 필드:
regexp_status예시: '["fan"]'
-
ENV_INPUT_IPMI_TAGS
사용자 정의 태그입니다. 설정 파일에 같은 이름의 태그가 있으면 덮어씁니다
필드 유형: Map
수집기 설정 필드:
tags예시:
tag1=value1,tag2=value2
설정 안내
- 각 매개변수 분류의 키워드는 모두 소문자로 입력하십시오
ipmitool -I ...명령이 반환한 데이터를 참고하여 키워드를 적절하게 설정하십시오
메트릭¶
다음 데이터 수집에는 전역 선출 태그가 자동으로 추가됩니다. 필요한 경우 [inputs.ipmi.tags]에서 추가 태그를 지정할 수 있습니다.
| 태그 및 필드 | 설명 |
|---|---|
| host ( tag) |
모니터링 중인 IPMI 서버 호스트입니다. |
| unit ( tag) |
모니터링 대상 호스트에서 정규화된 IPMI 센서 이름입니다. |
| count | 설정된 IPMI 카운트 정규식과 일치하는 일반 카운트 메트릭입니다. 유형: int | (gauge) 단위: count |
| current | IPMI 센서가 보고한 전류입니다. 유형: float | (gauge) 단위: ampere |
| fan_speed | IPMI 센서가 보고한 팬 회전 속도입니다. 유형: int | (gauge) 단위: RPM |
| power_consumption | IPMI 센서가 보고한 전력 소비량입니다. 유형: float | (gauge) 단위: watt |
| status | 모니터링 대상 유닛의 숫자 상태 코드입니다. 유형: int | (gauge) 단위: N/A |
| temp | IPMI 센서가 보고한 온도입니다. 유형: float | (gauge) 단위: temperature,C |
| usage | IPMI 센서가 보고한 사용률입니다. 유형: float | (gauge) 단위: percent,percent |
| voltage | IPMI 센서가 보고한 전압입니다. 유형: float | (gauge) 단위: volt |
| warning | 모니터링 대상 유닛의 경고 상태 여부입니다. 1은 true, 0은 false입니다. 유형: int | (gauge) 단위: bool |