본문 바로가기

work/snmp

UCD-SNMP 설치

snmp history
리눅스에서 사용할 수 있는 SNMP는 cmu-snmp(Carnegie Mellon University)가 있다.
이 놈은 다시 ucd-snmp(UCDavis - Univerisity of California at Davis )로 변경(?)되었다.
200/10/18에 ucd-snmp를 net-snmp라는 프로젝트명으로 변경하면서 sourceforge로 이전했다.
현재 sourceforge에 net-snmp라는 project로 들어가 있다. 하지만 소스파일의 이름은 여전히
ucd-snmp로 되어 있다. 현재 ucd-snmp버전이 4.2.x대인데 5.0이후로는 net-snmp라는 명칭으로
배포할 모양이다. 즉, 정리하면 net-snmp는 cmu-snmp와 ucd-snmp에 기반했다.

http://net-snmp.sourceforge.net and http://sourceforge.net/projects/net-snmp 


snmp 설치
[root@ns ucd-snmp-4.2.1]# ./configure
[root@ns ucd-snmp-4.2.1]# make
[root@ns ucd-snmp-4.2.1]# umask 022
[root@ns ucd-snmp-4.2.1]# make install
[root@ns ucd-snmp-4.2.1]# cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf
[root@ns ucd-snmp-4.2.1]# cd perl/SNMP/        
[root@ns SNMP]# perl Makefile.PL
[root@ns SNMP]# make
[root@ns SNMP]# make test
[root@ns SNMP]# make install


SNMP AGENT(snmpd)를 위한 환경설정
보통 위에서처럼 EXAMPLE.conf를 복사해 와서 수정하는 방법을 많이(?) 사용한다.
그리고 나서 아래의 예와 같이 수정한다. ip/netmask는 자신의 환경에 맞게 설정한다.
보통 아래에 나온 부분만 수정하면 된다.

#       sec.name  source          community
#com2sec local     localhost       COMMUNITY
#com2sec mynetwork NETWORK/24      COMMUNITY
com2sec local     localhost        private
com2sec mynetwork 211.104.51.96/29 public

syslocation  "Seoul Korea"
sysservices 76
syscontact  "kang myung gyu, kang@dbakorea.pe.kr"

자신이 직접 설정파일을 생성하고 싶다면 snmpconf라는 것을 사용하면 된다.
snmpconf로 perl로 된 스크립트인데 메뉴방식으로 snmpd.conf, snmp.conf, snmptrapd.conf파일을 
생성할 수 있게 해준다.

설정파일을 검색하는 곳
/usr/local/share/snmp
/usr/local/lib/snmp
$HOME/.snmp
환경변수 SNMPCONFPATH


[root@ns SNMP]# cd /usr/local/share/snmp/
[root@ns snmp]# snmpconf	설정파일 생성
[root@ns snmp]# chmod 600 snmpd.conf

설정을 끝냈다면 snmpd를 쉘상에서 실행한다.
[root@ns snmp]# snmpd



테스트
snmptest로 접속해보면 다음과 같다.
[root@ns ucd-snmp-4.2.1]# snmptest localhost public 
Variable: sysLocation.0
Variable: sysServices.0
Variable: sysContact.0
Variable: 엔터
Received Get Response from 127.0.0.1
requestid 0x78794697 errstat 0x0 errindex 0x0
system.sysLocation.0 = "Seoul Korea"
system.sysServices.0 = 76
system.sysContact.0 = "kang myung gyu, kang@dbakorea.pe.kr"


보통 라우터의 경우 자체OS에 snmp agent가 심어져 있지만, 일반 호스트서버의 경우,
위와 같이(snmpd) agnet를 실행해줘야 한다.

사용된 변수(udpInDatagrams)의 이름은 대소문자를 구분함
테이블이 아닌 일반변수의 경우, 마지막에 .0을 붙여서 질의한다.


snmp application의 사용예

snmpget
[kang@ns kang]$ snmpget localhost public udpInDatagrams.0    

snmpwalk
[kang@ns kang]$ snmpwalk localhost public udpInDatagrams.0
[kang@ns kang]# snmpwalk localhost public interface
[kang@ns mrtg]$ snmpwalk -Of localhost private memory (full oid output)
[kang@ns mrtg]$ snmpwalk -On localhost private memory (oid를 숫자형식으로 출력)

snmpgetnext
[kang@ns kang]$ snmpget localhost public udpInDatagrams.0
udp.udpInDatagrams.0 = Counter32: 3404
[kang@ns kang]$ snmpgetnext localhost public udpInDatagrams.0
udp.udpNoPorts.0 = Counter32: 285
[kang@ns kang]$ snmpgetnext localhost public udpNoPorts.0
udp.udpInErrors.0 = Counter32: 0
[kang@ns kang]$ snmpgetnext localhost public udpInErrors.0
udp.udpOutDatagrams.0 = Counter32: 3594


snmptest
[root@ns ucd-snmp-4.2.1]# snmptest localhost public     
Variable: sysDescr.0
Variable: sysObjectID.0
Variable: sysUpTime.0
Variable: sysContact.0
Variable: sysName.0
Variable: sysLocation.0
Variable: sysServices.0
Variable: 
Received Get Response from 127.0.0.1
requestid 0x449D7035 errstat 0x0 errindex 0x0
system.sysDescr.0 = Linux ns.dbakorea.pe.kr 2.4.4 #2 Wed May 2 11:52:31 KST 2001 i586
system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux
system.sysUpTime.0 = Timeticks: (23439) 0:03:54.39
system.sysContact.0 = "kang myung gyu, kang@dbakorea.pe.kr"
system.sysName.0 = ns.dbakorea.pe.kr
system.sysLocation.0 = "Seoul Korea"
system.sysServices.0 = 76
Variable: 

snmptranslate
[kang@ns mrtg]$ snmptranslate .1.3.6.1.4.enterprises.ucdavis.dskTable.dskEntry.dskPercent.1 
.1.3.6.1.4.1.2021.9.1.9.1


SNMP MIB관계


UCD-SNMP AGENT
ucd-snmp AGENT는 대부분의 정보를 mib tree중 .1.3.6.1.4.1.2021섹션에 질의하여 REPORT한다.

.iso.org.dod.internet.private.enterprises.ucdavis (.1.3.6.1.4.1.2021)



161은 snmp, 162번 포트는 snmp-trap이 사용하는 포트이다.
company.com에 snmp agent가 동작중인가는 다음과 같이 파악할 수 있다.
nmap -sU -p 161,162 company.com

MRTG 리소스모니터링 예제
/usr/local/src/mrtg-2.9.10/contrib/

SNMP에 관한 링크
http://www.ieng.com/univercd/cc/td/doc/cisintwk/ito_doc/snmp.htm
http://net-snmp.sourceforge.net/tutorial/mrtg/index.html

MIB 목록
/usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt

참고 매뉴얼 페이지
snmpd.conf, snmp.conf, snmptrapd.conf, snmp_config