[Linux] NET-SNMP 사용자 정의 MIB를 등록/사용하는 방법
저희 회사는 SUSE Linux Enterprise를 사용하고 있는데요,
# hostnamectl | grep System
Operating System: SUSE Linux Enterprise Server 12 SP4
free
명령어를 사용하여 메모리 사용률을 확인하면, 98%(≒used/total)로 계산됩니다. 이유는 used 항목에 실제 애플리케이션만이 아니라 buffers와 cached도 포함하기 때문에, 실제 사용한 메모리보다 높아 보이게 됩니다.
# free
total used free shared buffers cached Mem: 131763624 128780944 2982680 37430372 1695652 110570072 -/+ buffers/cache: 16515220 115248404 Swap: 34606072 0 34606072
그래서 /proc/meminfo 파일의 MemTotal와 MemAvailable를 사용해서 메모리 사용률을 관리하고 있습니다.(Daily Health Check Script 글 참고)
사용률 = 1 – (MemAvailable/MemTotal) = 42%
# cat /proc/meminfoMemTotal: 131763624 kB MemFree: 3163984 kB MemAvailable: 76549736 kB Buffers: 1696748 kB Cached: 108333552 kB SwapCached: 0 kB <!--more-->
아래 절차는 사용자 정의 MIB를 등록해서 WhatsUp Gold에서 자동으로 메모리 사용률을 모니터링하는 절차를 알아보겠습니다.
- 기본적으로 Linux서버에 SNMP를 사용하기 위한 패키지들이 설치되어 있어야 합니다.
# systemctl status snmpd[0m snmpd.service - LSB: Net-SNMP agent Loaded: loaded (/etc/init.d/snmpd; bad; vendor preset: disabled) Active: active (running) since Thu 2025-04-10 14:43:46 KST; 6 days ago Docs: man:systemd-sysv-generator(8) Process: 26249 ExecStop=/etc/init.d/snmpd stop (code=exited, status=0/SUCCESS) Process: 26257 ExecStart=/etc/init.d/snmpd start (code=exited, status=0/SUCCESS) Tasks: 1 (limit: 512) CGroup: /system.slice/snmpd.service 붴26268 /usr/sbin/snmpd -r -A -LF n /var/log/net-snmpd.log -p /var/run/snmpd.pid Apr 10 14:43:46 kvmeccprd systemd[1]: Stopped LSB: Net-SNMP agent. Apr 10 14:43:46 kvmeccprd systemd[1]: Starting LSB: Net-SNMP agent... Apr 10 14:43:46 kvmeccprd snmpd[26257]: Starting snmpd..done Apr 10 14:43:46 kvmeccprd systemd[1]: Started LSB: Net-SNMP agent.
- 메모리 사용률을 계산하기 위한 쉘스크립트 파일을 생성하고 실행시켜 봅니다. “41”이라는 값이 출력되는 것을 확인할 수 있습니다.
# vi memusage.sh#!/bin/bash avail=`cat /proc/meminfo | grep MemAvailable | awk '{print $2}'` total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` usage=$((total - avail)) echo $((usage * 100 / total))# chmod +x memusage.sh; ./memusage.sh41
- net-snmp 환경설정 파일(
/etc/snmp/snmpd.conf
)에 2단계에서 작성한 스크립트 파일을 등록해 보겠습니다. 사용자 정의 명령어(extend)를 사용해서 아래와 같이 환경설정 파일의 적당한 위치에 추가합니다.# vi /etc/snmp/snmpd.conf# sec.name source community com2sec notConfigUser default public # Second, map the security name into a group name: # groupName securityModel securityName group notConfigGroup v1 notConfigUser group notConfigGroup v2c notConfigUser # Third, create a view for us to let the group have rights to: # Make at least snmpwalk -v 1 localhost -c public system fast again. # name incl/excl subtree mask(optional) view systemview included .1.3.6.1 # Finally, grant the group read-only access to the systemview view. # group context sec.model sec.level prefix read write notif access notConfigGroup "" any noauth exact systemview none none extend MemUsageRate /root/memusage.sh - snmpd 데몬을 재시작한 후 사용자 정의 MIB가 정상적으로 등록되었는지 확인해 보겠습니다.
NET-SNMP-EXTEND-MIB::nsExtendObjects
는 NET-SNMP에서 사용자 정의 명령어(extend)를 관리하기 위한 객체들의 루트 노드이고,
nsExtendConfigTable
는 extend로 정의된 명령어 설정 정보 테이블입니다.
아래 숫자 42는 /root/memusage.sh 스크립트의 출력값입니다.# systemctl restart snmpd# snmpwalk -v2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendObjects | grep MemUsageRateNET-SNMP-EXTEND-MIB::nsExtendCommand."MemUsageRate" = STRING: /root/memusage.sh NET-SNMP-EXTEND-MIB::nsExtendArgs."MemUsageRate" = STRING: NET-SNMP-EXTEND-MIB::nsExtendInput."MemUsageRate" = STRING: NET-SNMP-EXTEND-MIB::nsExtendCacheTime."MemUsageRate" = INTEGER: 5 NET-SNMP-EXTEND-MIB::nsExtendExecType."MemUsageRate" = INTEGER: exec(1) NET-SNMP-EXTEND-MIB::nsExtendRunType."MemUsageRate" = INTEGER: run-on-read(1) NET-SNMP-EXTEND-MIB::nsExtendStorage."MemUsageRate" = INTEGER: permanent(4) NET-SNMP-EXTEND-MIB::nsExtendStatus."MemUsageRate" = INTEGER: active(1) NET-SNMP-EXTEND-MIB::nsExtendOutput1Line."MemUsageRate" = STRING: 42 NET-SNMP-EXTEND-MIB::nsExtendOutputFull."MemUsageRate" = STRING: 42 NET-SNMP-EXTEND-MIB::nsExtendOutNumLines."MemUsageRate" = INTEGER: 1 NET-SNMP-EXTEND-MIB::nsExtendResult."MemUsageRate" = INTEGER: 0 NET-SNMP-EXTEND-MIB::nsExtendOutLine."MemUsageRate".1 = STRING: 42# snmpwalk -v2c -c public localhost NET-SNMP-EXTEND-MIB::nsExtendConfigTableNET-SNMP-EXTEND-MIB::nsExtendCommand."MemUsageRate" = STRING: /root/memusage.sh NET-SNMP-EXTEND-MIB::nsExtendArgs."MemUsageRate" = STRING: NET-SNMP-EXTEND-MIB::nsExtendInput."MemUsageRate" = STRING: NET-SNMP-EXTEND-MIB::nsExtendCacheTime."MemUsageRate" = INTEGER: 5 NET-SNMP-EXTEND-MIB::nsExtendExecType."MemUsageRate" = INTEGER: exec(1) NET-SNMP-EXTEND-MIB::nsExtendRunType."MemUsageRate" = INTEGER: run-on-read(1) NET-SNMP-EXTEND-MIB::nsExtendStorage."MemUsageRate" = INTEGER: permanent(4) NET-SNMP-EXTEND-MIB::nsExtendStatus."MemUsageRate" = INTEGER: active(1) snmptranslate
명령어를 사용해서 사용자 정의 MIB의 OID를 확인한 후,snmpwalk
명령어를 사용해서 해당 OID의 값을 확인해 보겠습니다.
OID: .1.3.6.1.4.1.8072.1.3.2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116.101# snmptranslate -On NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"MemUsageRate\".1.3.6.1.4.1.8072.1.3.2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116.101# snmpwalk -v2c -c public localhost .1.3.6.1.4.1.8072.1.3.2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116.101NET-SNMP-EXTEND-MIB::nsExtendOutputFull."MemUsageRate" = STRING: 41< 참고로 NET-SNMP-EXTEND-MIB::nsExtendObjects 계층구조는 아래와 같습니다. > NET-SNMP-EXTEND-MIB::nsExtendObjects = .1.3.6.1.4.1.8072.1.3.2 ├── nsExtendNumEntries = .1.3.6.1.4.1.8072.1.3.2.1 ├── nsExtendConfigTable = .1.3.6.1.4.1.8072.1.3.2.2 │ └── nsExtendConfigEntry = .1.3.6.1.4.1.8072.1.3.2.2.1 ├── nsExtendOutput1Table = .1.3.6.1.4.1.8072.1.3.2.3 │ └── nsExtendOutput1Entry = .1.3.6.1.4.1.8072.1.3.2.3.1 └── nsExtendOutput2Table = .1.3.6.1.4.1.8072.1.3.2.4 └── nsExtendOutput2Entry = .1.3.6.1.4.1.8072.1.3.2.4.1- 마지막 단계로 WhatsUp Gold에서 사용자 정의 OID를 모니터링하는 방법을 알아보겠습니다.
- 먼저 데이터를 정상적으로 가져올 수 있는지 확인해야 합니다.
ANALIZE > Tools > SNMP MIB Walker
메뉴로 선택합니다.
- ① snmp서비스 데몬이 실행되고 있는 호스트의 IP주소를 입력합니다.
- ② 5단계에서 확인한 OID의 마지막 숫자를 제외하고 입력합니다.
(.1.3.6.1.4.1.8072.1.3.2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116) - ③
Walk
버튼을 클릭하면 MIB 정보와 함께 42라는 값이 출력됩니다. - ④
2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116.101
값 위에 마우스를 올려놓으면 Object ID와 Instance값을 확인할 수 있습니다.
Object ID : 1.3.6.1.4.1.8072.1.3
Instance: 2.3.1.2.12.77.101.109.85.115.97.103.101.82.97.116.101
SETTING > Libraries > Monitors
메뉴로 이동합니다.- Monitors Library 화면에서
"+"
버튼을 클릭하고Performance Monitor
메뉴를 선택합니다.
- Select Performance Monitor Type 화면에서
SNMP Performance Monitor
항목을 선택합니다.
- Add SNMP Performance Monitor 화면에서 Counter와 Instance 값을 입력합니다.
Counter
는 6-④의 Object ID이고Instance
는 6-④의 Instance입니다.
- Device별로 Performance Monitor를 등록하는 화면에서
MemUsageRate
를 선택하면 됩니다.
- 먼저 데이터를 정상적으로 가져올 수 있는지 확인해야 합니다.
Linux서버 취약점 분석/조치법 중 SNMP 서비스 점검 글을 함께 보시면 좋습니다.