How to retrieve information using SNMP
오늘은 VMware 에서 제공하는 MIB(Management Information Base)를 다운로드 받아, SNMP를 이용하여 외부에서 ESXi Host의 정보를 획득하는 방법에 대해서 소개합니다.
테스트 환경인 만큼 방화벽 해제 등의 절차가 포함되어 있습니다.
[구성 환경]
ESXi 7.0 // SNMP Agent
CentOS 7.9 // SNMP Manager
[구성 절차]
ESXi Host
1. SNMP Agent 설정
# esxcli system snmp set -c public -e true # esxcli system snmp get Authentication: Communities: public Enable: true Engineid: 80001ADC0518090950711671618336 Hwsrc: indications Largestorage: true Loglevel: warning Notraps: Port: 161 Privacy: Remoteusers: Syscontact: Syslocation: Targets: Users: V3targets: |
2. ESXi 방화벽 해제
# localcli network firewall set -e false # localcli network firewall unload # localcli network firewall get Firewall: DefaultAction: PASS Enabled: false Loaded: false |
CentOS
1. Local YUM Repository 설정
https://haewon83.tistory.com/32 를 참고하여, Offline 환경에서 YUM Repository를 설정합니다.
2. Linux 방화벽 해제
# systemctl stop firewalld # systemctl disable firewalld |
3. SNMP Package 설치
# yum -y install net-snmp net-snmp-util |
4. VMware MIB 다운로드
https://kb.vmware.com/s/article/1013445 를 참고하시어 VMware VIB 압축 파일을 다운로드 합니다.
5. VMware MIB 업로드 및 압축 해제
다운로드 받은 VMware-mibs-7.0.0-15924762.zip 파일을 CentOS로 업로드 한 후 /usr/share/snmp/mibs/ 경로로 복사합니다. 복사 후 압축 해제하여 /usr/share/snmp/mibs/ 폴더 하위에 다음과 같이 MIB 파일들이 정상적으로 위치하는지 확인합니다.
[root@localhost vmw]# ls BRIDGE-MIB.mib notifications.txt VMWARE-NSX-MANAGER-AGENTCAP-MIB.mib ENTITY-MIB.mib P-BRIDGE-MIB.mib VMWARE-NSX-MANAGER-MIB.mib HOST-RESOURCES-MIB.mib Q-BRIDGE-MIB.mib VMWARE-OBSOLETE-MIB.mib HOST-RESOURCES-TYPES.mib README VMWARE-PRODUCTS-MIB.mib IANA-ADDRESS-FAMILY-NUMBERS-MIB.mib RMON2-MIB.mib VMWARE-RESOURCES-MIB.mib IANA-ENTITY-MIB.mib RMON-MIB.mib VMWARE-ROOT-MIB.mib IANAifType-MIB.mib SNMP-FRAMEWORK-MIB.mib VMWARE-SRM-EVENT-MIB.mib IANA-RTPROTO-MIB.mib SNMP-MPD-MIB.mib VMWARE-SYSTEM-MIB.mib IEEE8021-BRIDGE-MIB.mib SNMPv2-CONF.mib VMWARE-TC-MIB.mib IEEE8021-Q-BRIDGE-MIB.mib SNMPv2-MIB.mib VMWARE-TUNNEL-SERVER-AGENTCAP-MIB.mib IEEE8021-TC-MIB.mib SNMPv2-SMI.mib VMWARE-TUNNEL-SERVER-MIB.mib IEEE8023-LAG-MIB.mib SNMPv2-TC.mib VMWARE-VA-AGENTCAP-MIB.mib IF-MIB.mib TCP-MIB.mib VMWARE-VC-EVENT-MIB.mib incompatible TOKEN-RING-RMON-MIB.mib VMWARE-VCHA-MIB.mib INET-ADDRESS-MIB.mib UDP-MIB.mib VMWARE-VCOPS-EVENT-MIB.mib IP-FORWARD-MIB.mib UUID-TC-MIB.mib VMWARE-VMINFO-MIB.mib IP-MIB.mib vc-alarms-65.csv VMWARE-VRNI-AGENTCAP-MIB.mib IPV6-FLOW-LABEL-MIB.mib VMWARE-CIMOM-MIB.mib VMWARE-VRNI-MIB.mib list-ids-diagnostics.txt VMWARE-ENV-MIB.mib VMWARE-VROPS-AGENTCAP-MIB.mib LLDP-V2-MIB.mib VMWARE-ESX-AGENTCAP-MIB.mib VMWARE-VROPS-MIB.mib LLDP-V2-TC-MIB.mib VMWARE-HEARTBEAT-MIB.mib [root@localhost vmw]# mv * ../ [root@localhost vmw]# ls [root@localhost vmw]# cd .. [root@localhost mibs]# ls AGENTX-MIB.txt LLDP-V2-MIB.mib SNMPv2-TC.txt BRIDGE-MIB.mib LLDP-V2-TC-MIB.mib SNMPv2-TM.txt BRIDGE-MIB.txt LM-SENSORS-MIB.txt SNMP-VIEW-BASED-ACM-MIB.txt DISMAN-EVENT-MIB.txt MTA-MIB.txt TCP-MIB.mib DISMAN-SCHEDULE-MIB.txt NET-SNMP-AGENT-MIB.txt TCP-MIB.txt DISMAN-SCRIPT-MIB.txt NET-SNMP-EXAMPLES-MIB.txt TOKEN-RING-RMON-MIB.mib ENTITY-MIB.mib NET-SNMP-EXTEND-MIB.txt TRANSPORT-ADDRESS-MIB.txt EtherLike-MIB.txt NET-SNMP-MIB.txt TUNNEL-MIB.txt HCNUM-TC.txt NET-SNMP-PASS-MIB.txt UCD-DEMO-MIB.txt HOST-RESOURCES-MIB.mib NET-SNMP-TC.txt UCD-DISKIO-MIB.txt HOST-RESOURCES-MIB.txt NET-SNMP-VACM-MIB.txt UCD-DLMOD-MIB.txt HOST-RESOURCES-TYPES.mib NETWORK-SERVICES-MIB.txt UCD-IPFWACC-MIB.txt HOST-RESOURCES-TYPES.txt NOTIFICATION-LOG-MIB.txt UCD-SNMP-MIB.txt IANA-ADDRESS-FAMILY-NUMBERS-MIB.mib notifications.txt UDP-MIB.mib IANA-ADDRESS-FAMILY-NUMBERS-MIB.txt P-BRIDGE-MIB.mib UDP-MIB.txt IANA-ENTITY-MIB.mib Q-BRIDGE-MIB.mib UUID-TC-MIB.mib IANAifType-MIB.mib README vc-alarms-65.csv IANAifType-MIB.txt RFC1155-SMI.txt vmw IANA-LANGUAGE-MIB.txt RFC1213-MIB.txt VMWARE-CIMOM-MIB.mib IANA-RTPROTO-MIB.mib RFC-1215.txt VMWARE-ENV-MIB.mib IANA-RTPROTO-MIB.txt RMON2-MIB.mib VMWARE-ESX-AGENTCAP-MIB.mib IEEE8021-BRIDGE-MIB.mib RMON-MIB.mib VMWARE-HEARTBEAT-MIB.mib IEEE8021-Q-BRIDGE-MIB.mib RMON-MIB.txt VMware-mibs-7.0.0-15924762.zip IEEE8021-TC-MIB.mib SCTP-MIB.txt VMWARE-NSX-MANAGER-AGENTCAP-MIB.mib IEEE8023-LAG-MIB.mib SMUX-MIB.txt VMWARE-NSX-MANAGER-MIB.mib IF-INVERTED-STACK-MIB.txt SNMP-COMMUNITY-MIB.txt VMWARE-OBSOLETE-MIB.mib IF-MIB.mib SNMP-FRAMEWORK-MIB.mib VMWARE-PRODUCTS-MIB.mib IF-MIB.txt SNMP-FRAMEWORK-MIB.txt VMWARE-RESOURCES-MIB.mib incompatible SNMP-MPD-MIB.mib VMWARE-ROOT-MIB.mib INET-ADDRESS-MIB.mib SNMP-MPD-MIB.txt VMWARE-SRM-EVENT-MIB.mib INET-ADDRESS-MIB.txt SNMP-NOTIFICATION-MIB.txt VMWARE-SYSTEM-MIB.mib IP-FORWARD-MIB.mib SNMP-PROXY-MIB.txt VMWARE-TC-MIB.mib IP-FORWARD-MIB.txt SNMP-TARGET-MIB.txt VMWARE-TUNNEL-SERVER-AGENTCAP-MIB.mib IP-MIB.mib SNMP-USER-BASED-SM-MIB.txt VMWARE-TUNNEL-SERVER-MIB.mib IP-MIB.txt SNMP-USM-AES-MIB.txt VMWARE-VA-AGENTCAP-MIB.mib IPV6-FLOW-LABEL-MIB.mib SNMP-USM-DH-OBJECTS-MIB.txt VMWARE-VC-EVENT-MIB.mib IPV6-FLOW-LABEL-MIB.txt SNMPv2-CONF.mib VMWARE-VCHA-MIB.mib IPV6-ICMP-MIB.txt SNMPv2-CONF.txt VMWARE-VCOPS-EVENT-MIB.mib IPV6-MIB.txt SNMPv2-MIB.mib VMWARE-VMINFO-MIB.mib IPV6-TCP-MIB.txt SNMPv2-MIB.txt VMWARE-VRNI-AGENTCAP-MIB.mib IPV6-TC.txt SNMPv2-SMI.mib VMWARE-VRNI-MIB.mib IPV6-UDP-MIB.txt SNMPv2-SMI.txt VMWARE-VROPS-AGENTCAP-MIB.mib list-ids-diagnostics.txt SNMPv2-TC.mib VMWARE-VROPS-MIB.mib |
[정보 조회]
1. 최상위 조회
아래 결과 값은 약 2000 라인 이상의 정보를 반환해줍니다.
OID는 Hierarchy 구조이기 때문에 아래 명령어로 전체 내용을 조회할 수 있습니다.
참고로 아래 명령어에서 192.168.1.100은 ESXi Host의 IP Address 입니다.
[root@localhost mibs]# snmpwalk -m ALL -c public -v 2c 192.168.1.100 SNMPv2-MIB::sysDescr.0 = STRING: VMware ESXi 7.0.2 build-17630552 VMware, Inc. x86_64 SNMPv2-MIB::sysObjectID.0 = OID: VMWARE-PRODUCTS-MIB::vmwESX DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (148800) 0:24:48.00 SNMPv2-MIB::sysContact.0 = STRING: SNMPv2-MIB::sysName.0 = STRING: w2-tse-d14.wsl.vmware.com SNMPv2-MIB::sysLocation.0 = STRING: SNMPv2-MIB::sysServices.0 = INTEGER: 72 SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00 SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.2 = OID: IF-MIB::ifMIB SNMPv2-MIB::sysORID.3 = OID: IP-MIB::ip SNMPv2-MIB::sysORID.4 = OID: IP-FORWARD-MIB::ipForward SNMPv2-MIB::sysORID.5 = OID: UDP-MIB::udp SNMPv2-MIB::sysORID.6 = OID: TCP-MIB::tcp SNMPv2-MIB::sysORID.7 = OID: ENTITY-MIB::entityMIB … |
2. 개별 조회
Hierarchy 중 Network Interface에 대해서 조회하는 예제입니다.
[root@localhost mibs]# snmpwalk -m ALL -c public -v 2c 192.168.1.100 IF-MIB::ifDescr IF-MIB::ifDescr.1 = STRING: Device vmnic0 at 25:00.0 ixgben IF-MIB::ifDescr.2 = STRING: Device vmnic1 at 25:00.1 ixgben IF-MIB::ifDescr.3 = STRING: Device vmnic2 at 26:00.0 ixgben IF-MIB::ifDescr.4 = STRING: Device vmnic3 at 26:00.1 ixgben IF-MIB::ifDescr.5 = STRING: Device vusb0 at 00:00.0 cdce IF-MIB::ifDescr.6 = STRING: Traditional Virtual VMware switch: vSwitch0 IF-MIB::ifDescr.7 = STRING: Traditional Virtual VMware switch: vSwitch1 IF-MIB::ifDescr.8 = STRING: Virtual interface: vmk0 on vswitch vSwitch0 portgroup: Management Network IF-MIB::ifDescr.9 = STRING: Virtual interface: vmk1 on vswitch vSwitch1 portgroup: Mgmt2 |
3. 개별 조회(OID 값 이용)
동일한 작업에 대해서 OID 값으로 문자열 대신 숫자 값으로 조회도 가능합니다.
이를 위해서는 우선, 2번에서 사용했던 문자열에 Mapping되는 숫자값을 구해야 합니다.
[root@localhost mibs]# snmptranslate -O fn IF-MIB::ifDescr .1.3.6.1.2.1.2.2.1.2 [root@localhost mibs]# snmpwalk -m ALL -c public -v 2c 192.168.1.100 .1.3.6.1.2.1.2.2.1.2 IF-MIB::ifDescr.1 = STRING: Device vmnic0 at 25:00.0 ixgben IF-MIB::ifDescr.2 = STRING: Device vmnic1 at 25:00.1 ixgben IF-MIB::ifDescr.3 = STRING: Device vmnic2 at 26:00.0 ixgben IF-MIB::ifDescr.4 = STRING: Device vmnic3 at 26:00.1 ixgben IF-MIB::ifDescr.5 = STRING: Device vusb0 at 00:00.0 cdce IF-MIB::ifDescr.6 = STRING: Traditional Virtual VMware switch: vSwitch0 IF-MIB::ifDescr.7 = STRING: Traditional Virtual VMware switch: vSwitch1 IF-MIB::ifDescr.8 = STRING: Virtual interface: vmk0 on vswitch vSwitch0 portgroup: Management Network IF-MIB::ifDescr.9 = STRING: Virtual interface: vmk1 on vswitch vSwitch1 portgroup: Mgmt2 [root@localhost mibs]# snmpwalk -m ALL -c public -v 2c 192.168.1.100 -O fn .1.3.6.1.2.1.2.2.1.2 .1.3.6.1.2.1.2.2.1.2.1 = STRING: Device vmnic0 at 25:00.0 ixgben .1.3.6.1.2.1.2.2.1.2.2 = STRING: Device vmnic1 at 25:00.1 ixgben .1.3.6.1.2.1.2.2.1.2.3 = STRING: Device vmnic2 at 26:00.0 ixgben .1.3.6.1.2.1.2.2.1.2.4 = STRING: Device vmnic3 at 26:00.1 ixgben .1.3.6.1.2.1.2.2.1.2.5 = STRING: Device vusb0 at 00:00.0 cdce .1.3.6.1.2.1.2.2.1.2.6 = STRING: Traditional Virtual VMware switch: vSwitch0 .1.3.6.1.2.1.2.2.1.2.7 = STRING: Traditional Virtual VMware switch: vSwitch1 .1.3.6.1.2.1.2.2.1.2.8 = STRING: Virtual interface: vmk0 on vswitch vSwitch0 portgroup: Management Network .1.3.6.1.2.1.2.2.1.2.9 = STRING: Virtual interface: vmk1 on vswitch vSwitch1 portgroup: Mgmt2 |
간단하게 SNMP 프로토콜을 이용하여, ESXi로부터 정보를 획득하는 과정에 대해서 살펴보았습니다.
운영 환경에서 SNMP를 이용한 모니터링을 고려하실 때, 참고가 되었으면 합니다.