(1) 주절주절

몇 가지 기능을 갖춘 SNMP Agent를 한동안 개발을 했는데, 참고할 만한 문서가 거의 없군요.
한글로 된 것이 아예없다고 해도 과언이 아니네요.
검색을 해도 쓰레기(?)같은 문서들만 나오고...,

그나마 참고할만한 내용들은 Sourceforge User Group 정도
이 곳에 문의를 하면 친절한 답변을 받을 수 있어서 좋습니다.
다만 짧은 영어로 현재의 문제점을 적나라하게 설명하는게 쉽지가 않군요.

SNMP 프로그래밍이라고 하면 보통 SNMP Server 프로그램(Server)과  SNMP Application 프로그램(Client) 정도로 생각해도 무방합니다. 여기서 말하는 Server는 SNMP를 통해 정보를 제공하는 쪽을 말하고, Client는 Server로부터 정보를 받는 응용프로그램을 말합니다.
(장비가 SNMP를 지원한다는 말도 장비 자체가 SNMP Server라고 생각하시면 됩니다.)

Client는 많은 이해를 필요로 하지 않기때문에  비교적 구현이 쉽고 또한 참고할 만한 문서도 많습니다.
반면 Server의 구현은 request-response처리에 대한 이해가 필수로 필요하고, 장비 혹은 소프트웨어적인 지식도 많이 필요합니다. 물론 프로토콜도 알면 좋겠죠.
좀전에 말했다시피 문서도 많지가 않습니다. ㅡ.,ㅡ(혹시 아시는 분은 리플리플..!!)

그래서 간단히 장비의 상태를 체크하는 SNMP 서버프로그램을 만들어보면서 정리를 하고자 합니다.
물론, 직접 SNMP프로토콜을 구현하는 것은 아니고, net-snmp 의 sub-agent를 만들면서..


(2) SNMP 서버란? - 간단히 생각해보기.

192.168.1.100(서버)         
|--------------------|
|                              |                    192.168.1.200 (사용자)
|  [SNMP 서버]        -|--------------[SNMP 클라이언트]
|     |             |         |  
|     |             |         |
|  [장비1]    [장비2].. |
|____________________|


서버(192.168.1.100)의 상태나 장비1, 장비2의 상태를 사용자(192.168.1.200)가 한 눈에 알 수 있도록 하는 것에 SNMP프로토콜의 목적이 있습니다. SNMP(Simple Network Manament Protocol)은 RFC를 보시면 자세한 내용을 참고할 수 있으므로.., 사실 잘 몰라도 오픈소스를 이용해서 구현이 가능하므로 볼 일이 있을까요?)

SNMP 서버로는 많은 분들이 net-snmp 서버를 사용합니다.
서버의 CPU상태, MEMORY상태, DISK상태, NETWORK상태, 프로세스 감시 등등
서버의 각종 상태를 이미 SNMP로 구현해놓았기 때문에 이것을 사용하면 아주 아주 편합니다.


그러나..


net-snmp 서버에서 구현이 안된 것은 어떻게 해야할까요?

예를 들어 특정 하드웨어가 작동하는지 안하는지를 알고 싶다거나
웹서버의 로그중 특정 ip가 등록되면 알려준다던지,
시스템로그의 보안상의 문제가 문제가 기록되면 알려준다든지..등등..
net-snmp가 기본적으로 제공하지 않는 것들 말입니다.


직접 만들어 줘야 합니다. -_-; 당연...


그래서 필요한 것이 Private MIB이라는 것입니다.

MIB이란 것은 Management Information Base, 즉 "관리될 정보"란 뜻으로
어떤 것을 알고 싶은지를 적어놓은 텍스트 파일입니다.

SNMP서버와 SNMP클라이언트는 바로 MIB정보를 통해 SNMP통신을 합니다.

예를 들어, EXAM-MIB.txt파일에 a="어떤 정보"라고 적혀있습니다.

서버는 EXAM-MIB.txt 파일을 읽어서 a값을 달라는 요청이 오면 "어떤 정보"를 응답으로 보냅니다.
반대로 클라이언트는 EXAM-MIB.txt 파일을 읽어서 a 값을 달라고 서버에게 요청할 수가 있습니다.
----------------------------------------------------
[서버]                     [클라이언트]
a = 어떤정보,            a 요청하고, 어떤 정보를 받아옴

따라서 "어떤정보"를 알기위한 SNMP프로그래밍을 한다면
"a=어떤정보"라고 적힌 EXAM-MIB.txt 파일을 서버와 클라이언트 둘다 갖고 시작해야겠죠.

EXAM-MIB.txt 파일을 만드는 방법은 다음에 설명하고,
EXAM-MIB.txt 파일을 갖고 있다면 그 다음에 할 일은
서버에서 EXAM-MIB.txt 에 적힌 내용을 제공하는 것입니다.

"제공한다" 라는 것은 요청을 받으면 요청을 이해한 다음, 해당 결과를 응답으로 보내는 일을 말합니다.

net-snmp 서버에서는 위와 같은 처리를 크게 3가지 방법으로 구현할 수 있습니다.

1. net-snmp 서버 compile시, 모듈로 프로그래밍을 해서 컴파일 한다.
2. 원하는 기능을 shared object로 만든후, net-snmp 서버실행시 dynamic load 한다.
3. net-snmp를 실행하고,  원하는 부분을 별도의 프로그램으로 만들어서 net-snmp서버와 통신하며 정보를 주고 받는다.

1,2번이 약간 쉽지만(사실, 1,2,3 비슷비슷..) 제일 바람직한 3번의 방법을 통해 구현해 볼랍니다.

3.번의 방법을 흔히 Master Agent - SubAgent 구조라고 부릅니다.

기본적으로 다운로드 받은  net-snmp가 Master Agent가 되고 내가 직접 만든 프로그램이 Sub Agent가 되는 것입니다.

Posted by 백구씨쥔장
,