[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/meminfo
MemTotal: 131763624 kB MemFree: 3163984 kB MemAvailable: 76549736 kB Buffers: 1696748 kB Cached: 108333552 kB SwapCached: 0 kB <!--more-->

아래 절차는 사용자 정의 MIB를 등록해서 WhatsUp Gold에서 자동으로 메모리 사용률을 모니터링하는 절차를 알아보겠습니다.

  1. 기본적으로 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.
  2. 메모리 사용률을 계산하기 위한 쉘스크립트 파일을 생성하고 실행시켜 봅니다. “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.sh
    41
  3. 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
  4. 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 MemUsageRate
    NET-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::nsExtendConfigTable
    NET-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)
  5. 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.101
    NET-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
  6. 마지막 단계로 WhatsUp Gold에서 사용자 정의 OID를 모니터링하는 방법을 알아보겠습니다.
    1. 먼저 데이터를 정상적으로 가져올 수 있는지 확인해야 합니다. ANALIZE > Tools > SNMP MIB Walker 메뉴로 선택합니다.
      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
    2. SETTING > Libraries > Monitors 메뉴로 이동합니다.
    3. Monitors Library 화면에서 "+" 버튼을 클릭하고 Performance Monitor 메뉴를 선택합니다.
      Performance Monitor 등록
    4. Select Performance Monitor Type 화면에서 SNMP Performance Monitor 항목을 선택합니다.
      Performance Monitor
    5. Add SNMP Performance Monitor 화면에서 Counter와 Instance 값을 입력합니다. Counter는 6-④의 Object ID이고 Instance는 6-④의 Instance입니다.
      Add SNMP Performance Monitor
    6. Device별로 Performance Monitor를 등록하는 화면에서 MemUsageRate를 선택하면 됩니다.

Linux서버 취약점 분석/조치법 중 SNMP 서비스 점검 글을 함께 보시면 좋습니다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다