본문 바로가기

work/snmp

[강좌] ucd-snmp 설치 (Linux 2.4.18-3 (Redhat 7.3))

// 제  목: ucd-snmp 설치
// 작성자: 김영대(
http://www.howto.pe.kr )  

0.설치환경
  O/S: Linux 2.4.18-3 (Redhat 7.3)
 
1.소개
   SNMP(Simple Network Management Protocol)는 네트웍 장비들로 부터 필요한 정보를 가져와 장비상태를
모니터링하거나 해당 장비의 관련 설정값을 변경하는 등의 작업을 하여 네트웍 장비의 전체상황을 관리
할수 있는 프로토콜이다. 관리대상이 되는 장비들에는 Agent 가 설치되어 있어야 하고 이들 Agent 로부터
정보를 받는 호스트를 Manager 라 한다. SNMP는 RFC-1157에 정의되어 있으며 네트웍 장비를 생산하는
대부분의 업체에서는 RFC-1157 을 따라 생산함으로써 다른 네트웍 장비와의 호환성을 유지하게 한다
SNMP의 RFC-1157 문서는 아래의 URL에서 볼수 있다
   
ftp://ftp.isi.edu/in-notes/rfc1157.txt
ucd-snmp 는 망관리 프로토콜인 SNMP 를 이용할수 있도록 해주는 공개 소프트웨어이다. ucd-snmp 는
현재 버전 5대로 올라가면서 프로젝트의 이름을 net-snmp 로 변경한 상태이다. 일반적으로 많이 사용되고
있는 ucd-snmp의 버전은 4대이다.

0.다운받기(소스)
ucd-snmp-4.2.6.tar.gz (
http://net-snmp.sourceforge.net )
 
1.설치하기
이전에 Redhat 설치시 RPM 형태로 설치된 snmp 가 있는지 확인하고 이를 제거한다.
또한 실행중인 snmpd 데몬도 종료시킨다
기본으로 설치된 ucd-snmp 는 전체 패키지가 설치된것이 아니므로 다시 설치해야 한다. 소스로 설치할 것이다
다운받은 파일을 임의의 디렉토리에서 압축을 풀고 생성된 디렉토리로 이동한다
  [root root]# tar xvfz ucd-snmp-4.2.6.tar.gz
  [root root]# cd ucd-snmp-4.2.6
 
configure 를 하게되면 몇가지 질문들이 나오는데 그냥 기본값을 사용할것이므로 엔터키를 치고 넘어간다
  [root ucd-snmp-4.2.6]# ./configure
 
configure 작업이 끝났으므로 이제 컴파일을 한다
  [root ucd-snmp-4.2.6]# make
  [root ucd-snmp-4.2.6]# make install
 
설치가 완료되면 아래의 위치에 파일들이 설치된다
  /usr/local/bin  일반적인 명령어들
  /usr/local/sbin  데몬들
  /usr/local/lib  라이브러리들
  /usr/local/include/ucd-snmp  헤더파일들

2.SNMP Agent(snmpd)를 위한 환경설정
/usr/local/share/snmp 에 snmpd.conf 파일을 만들어야 하는데 미리 만들어진것을 복사하여 사용하면 된다
  [root ucd-snmp-4.2.6]# cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
 
/usr/local/share/snmp 로 이동하여 좀전에 복사한 파일을 일부 수정한다
  [root ucd-snmp-4.2.6]# cd /usr/local/share/snmp
  [root snmp] vi snmpd.conf
  ...
  com2sec local     localhost         private
  com2sec mynetwork 211.225.118.0/24  public
  ...
  group MyRWGroup v1         local
  group MyRWGroup v2c        local
  group MyRWGroup usm        local
  group MyROGroup v1         mynetwork
  group MyROGroup v2c        mynetwork
  group MyROGroup usm        mynetwork

위의 내용은 private 라는 그룹(community) 의 IP 는 localhost 이고 접근 권한은 Read/Write 이며,
public 이라는 그룹의 IP는 211.225.118.0/255.255.255.0 이고 접근 권한은 Read Only 를 의미한다
Agent 로 동작할 경우 아무데서나 접근하지 못하도록 하는것이다

3.테스트
snmpd 데몬을 아래와 같이 띄운다
  [root root]# /usr/local/sbin/snmpd
 
아래처럼 하여 private 그룹 권한으로 localhost를 system OID 의 정보를 읽을 수 있다
  [root root]# snmpwalk localhost private system
 
아래처럼 하여 public 그룹 권한으로 외부의 211.255.118.38 의 system OID 의 정보를 읽을 수 있다
물론 211.255.118.38 의 snmpd.conf 에 pubic 그룹이 위와 같이 같은 네트워크 대의 접근을 허용했어야 한다
  [root root]# snmpwalk 211.255.118.38 public system

4.유용한 OID 모음  
1.CPU
  1.1 정보
  [root root]# snmpwalk localhost private systemStats

  enterprises.ucdavis.systemStats.ssIndex.0 = 1
  enterprises.ucdavis.systemStats.ssErrorName.0 = systemStats
  enterprises.ucdavis.systemStats.ssSwapIn.0 = 0
  enterprises.ucdavis.systemStats.ssSwapOut.0 = 0
  enterprises.ucdavis.systemStats.ssIOSent.0 = 7
  enterprises.ucdavis.systemStats.ssIOReceive.0 = 8
  enterprises.ucdavis.systemStats.ssSysInterrupts.0 = 131
  enterprises.ucdavis.systemStats.ssSysContext.0 = 62
  enterprises.ucdavis.systemStats.ssCpuUser.0 = 0
  enterprises.ucdavis.systemStats.ssCpuSystem.0 = 0
  enterprises.ucdavis.systemStats.ssCpuIdle.0 = 98
  enterprises.ucdavis.systemStats.ssCpuRawUser.0 = Counter32: 31282
  enterprises.ucdavis.systemStats.ssCpuRawNice.0 = Counter32: 102
  enterprises.ucdavis.systemStats.ssCpuRawSystem.0 = Counter32: 10047
  enterprises.ucdavis.systemStats.ssCpuRawIdle.0 = Counter32: 3421252
 
  1.2 부하(1/5/15 분)
  [root root]# snmpwalk localhost private enterprises.ucdavis.laTable.laEntry
  [root root]# snmpwalk localhost private enterprises.ucdavis.laTable.laEntry.laLoad.1
  [root root]# snmpwalk localhost private enterprises.ucdavis.laTable.laEntry.laLoad.2
  [root root]# snmpwalk localhost private enterprises.ucdavis.laTable.laEntry.laLoad.3
 
2.Disk
  [root root]# snmpwalk localhost private dskEntry
 
  enterprises.ucdavis.dskTable.dskEntry.dskIndex.1 = 1
  enterprises.ucdavis.dskTable.dskEntry.dskPath.1 = /
  enterprises.ucdavis.dskTable.dskEntry.dskDevice.1 = /dev/hda2
  enterprises.ucdavis.dskTable.dskEntry.dskMinimum.1 = 10000
  enterprises.ucdavis.dskTable.dskEntry.dskMinPercent.1 = -1
  enterprises.ucdavis.dskTable.dskEntry.dskTotal.1 = 38574396
  enterprises.ucdavis.dskTable.dskEntry.dskAvail.1 = 33272604
  enterprises.ucdavis.dskTable.dskEntry.dskUsed.1 = 3342264
  enterprises.ucdavis.dskTable.dskEntry.dskPercent.1 = 9
  enterprises.ucdavis.dskTable.dskEntry.dskPercentNode.1 = 3
  enterprises.ucdavis.dskTable.dskEntry.dskErrorFlag.1 = 0
  enterprises.ucdavis.dskTable.dskEntry.dskErrorMsg.1 =
 
3.Memory
  [root root]# snmpwalk localhost private memory
 
  enterprises.ucdavis.memory.memIndex.0 = 0
  enterprises.ucdavis.memory.memErrorName.0 = swap
  enterprises.ucdavis.memory.memTotalSwap.0 = 779144
  enterprises.ucdavis.memory.memAvailSwap.0 = 779144
  enterprises.ucdavis.memory.memTotalReal.0 = 385112
  enterprises.ucdavis.memory.memAvailReal.0 = 19064
  enterprises.ucdavis.memory.memTotalFree.0 = 798208
  enterprises.ucdavis.memory.memMinimumSwap.0 = 16000
  enterprises.ucdavis.memory.memShared.0 = 0
  enterprises.ucdavis.memory.memBuffer.0 = 33460
  enterprises.ucdavis.memory.memCached.0 = 236116
  enterprises.ucdavis.memory.memSwapError.0 = 0
  enterprises.ucdavis.memory.memSwapErrorMsg.0 =  
 
5.Network
  5.1 bandwidth
  [root root]# snmpwalk localhost private interfaces.ifTable.ifEntry.ifSpeed
  interfaces.ifTable.ifEntry.ifSpeed.1 = Gauge32: 10000000  -> lo
  interfaces.ifTable.ifEntry.ifSpeed.2 = Gauge32: 10000000  -> eth0

  [root root]# snmpwalk localhost private  interfaces.ifTable.ifEntry.ifPhysAddress
  interfaces.ifTable.ifEntry.ifPhysAddress.1 =
  interfaces.ifTable.ifEntry.ifPhysAddress.2 = 0:1:2:fd:17:45
 
  5.2 traffic
  [root root]# snmpwalk localhost private interfaces.ifTable.ifEntry.ifInOctets
  interfaces.ifTable.ifEntry.ifInOctets.1 = Counter32: 39057       -> lo
  interfaces.ifTable.ifEntry.ifInOctets.2 = Counter32: 43247592  -> eth0

  [root root]# snmpwalk localhost private interfaces.ifTable.ifEntry.ifOutOctets
  interfaces.ifTable.ifEntry.ifOutOctets.1 = Counter32: 39509
  interfaces.ifTable.ifEntry.ifOutOctets.2 = Counter32: 2168525

  [root root]$ snmpwalk localhost private interfaces.ifTable.ifEntry.ifInUcastPkts  
  interfaces.ifTable.ifEntry.ifInUcastPkts.1 = Counter32: 574
  interfaces.ifTable.ifEntry.ifInUcastPkts.2 = Counter32: 592010

  [root root]$ snmpwalk localhost private interfaces.ifTable.ifEntry.ifOutUcastPkts
  interfaces.ifTable.ifEntry.ifOutUcastPkts.1 = Counter32: 580
  interfaces.ifTable.ifEntry.ifOutUcastPkts.2 = Counter32: 18896  
 
6.성능측정시 자주 사용되는 OID
  Network I/O:
    incoming network traffic: .1.3.6.1.2.1.2.2.1.10
    outgoing network traffic: .1.3.6.1.2.1.2.2.1.16

  Sysyem Load:
    Load5, Load10 and Load15:.1.3.6.1.4.1.2021.10.1.3

  CPU Usage:
    CPU_usr, CPU_nice, CPU_nice and CPU_idle:.1.3.6.1.4.1.2021.11

  Memory Usage:
    MEM_free, Swap_MEM_Free:.1.3.6.1.4.1.2021.4

  Disk Usage:
    FreeDSK, UsedDsk:.1.3.6.1.4.1.2021.9