SNMP
[ simple network management protocol ]
SNMP를 간단하게 설명하면 다음과 같습니다.
Simple Network Management Protocol TCP/IP 네트워크 관리 프로토콜 : TCP/IP 기반의 네트워크에서 네트워크 상의 각 호스트에서 정기적으로 여러 가지 정보를 자동적으로 수집하여 네트워크 관리를 하기 위한 프로토콜.
바로 네트워크 장비를 관리하고 또 감시하기 위해서 TCP/IP 계층 중 응용 계층에서 이용되는 프로토콜입니다. 다른 것들보다 좀 더 단순한 형태의 네트워크 관리 프로토콜이라고 생각하면 될듯합니다.
그럼 먼저 SNMP가 나타난 배경에 대해서 알아보도록 합시다.
SNMP가 쓰이기 전에 일반적으로 사용되는 네트워크 관리는 ICMP에 의존했었다. ICMP는 Network계층의 프로토콜로써, 운영체제에 관계없이 사용할수 있는 간단한 프로토콜이였습니다.. 이 프로토콜을 이용해서 우리는 네트워크로 연결된 각각의 호스트가 작동하고 있는지, 작동한다면 어느정도의 응답시간을 가지고 작동하는지 등의 간단한 정보를 얻을수 있었으며, 초기에는 이정도로도 필요한 네트워크 관리가 가능했었습니다..
ICMP를 이용한 가장 유용한 도구는 아마도 ping 프로그램일 것입니다.
그러나 인터넷의 사용이 보편화되고 네트워크에 연결된 호스트의 수가 증가하자 거기에 따라서 네트워크 구성역시 복잡해지고, ICMP만을 가지고는 이러한 네트워크의 관리를 효율적으로 할수 없게 되었습니다.
그래서 몇가지 프로토콜에 대한 연구가 진행되었고, SGMP, HIMS, CMIP/CMIS등이 제안되게 되었습니다.. 이중에서 SGMP를 발전시킨 SNMP가 사실상 네트워크 관리를 위한 표준적인 프로토콜로 자리잡게 되었습니다. 다른 프로토콜들이 사용되지 않은데에는 몇가지 이유가 있었습니다. CMIP/CMIS는 너무 방대하고 너무 복잡했으며, HEMS의 경우에는 실제 적용사례가 적었기 때문입니다.
어쨋든 SNMP는 거의 대부분의 운영체제에서 사용되어 지고 있습니다. 여러분이 사용하는 Linux, 그밖의 대부분의 유닉스와, 윈도우계열 운영체제는 기본적으로 SNMP프로토콜을 사용하는 도구들을 제공하고 있고, 그외에도 router등 TCP/IP를 네트워크 프로토콜로 사용되는 운영체제들 역시 SNMP는 필수적으로 제공하고 있습니다.
SNMP로 할수 있는것을 설명해 보겠습니다.
네트워크상의 호스트들이 어떤 구조를 이루고 있는지 지도를 그리는게 가능하다.
각 네트워크 세그먼트간 네트워크 사용량, 에러량, 처리속도, 응답시간 등 성능 분석에 필요한 통계정보를 얻어낼수 있다.
SNMP의 주목적이 네트워크관리관리 이기는 하지만 SNMP특유의 유연한 확장성을 이용하여서 시스템정보(CPU, MEMORY, DISK 사용량)의 정보를 얻어올 수 있도록 많은 부분이 확장되었다. 이 정보는 네트워크문제를 해결하는데 큰도움을 준다. 예를들어 특정 세그먼트의 네트워크 사용량이 갑자기 급증했는데, 특정 호스트의 CPU사용율까지 갑자기 증가했다면, 우리는 해당 호스트에서 문제가 발생했을것이란걸 유추해낼수 있을것이다.
SNMP 기본 명령어
GET: 관리자가 에이전트로 원하는 특정 정보 요청
GET NEXT: GET과 동일하며 MIB의 다음 정보 요청시 사용
GET BULK: MIB 테이블 복구시 사용
SET: 관리장치 데이터의 수정이나 할당을 위한 명령어
TRAPS: 에이전트가 관리자에게 특정 정보를 알리기 위해 사용
INFORM: TRAPS 명령어와 비슷하지만 관리자의 확인 과정이 추가
RESPONSE: 응답 전송
MBI 란?
SNMP는 네트워크를 관리하기 위한 프로토콜이다. 그렇다면 무엇을 관리할 것인가(관리객체)를 결정해야 할것이다. 관리객체를 결정했다면, 이러한 관리객체를 효과적으로 관리하기 위해서 이를 분류해야 할것이다. 이게 바로 MIB이다.
MIB는 Man In Black의 줄임말이 아니다. Management Information Base의 줄임말인데, 관리되어야할 자원 객체의 분류된 정보를 말한다. 관리되어야할 객체는 시스템정보, 네트워크사용량, 네트워크 인터페이스정보 등이 된다.
이 MIB객체들은 관리하기 편하도록 Tree구조를 가지게 된다
SNMP 값을 가져오려면 일단 명령을 실행하는 서버와 값을 가져오려고 하는 서버에 모두 SNMP가 설치되어 있어야 합니다. 두 서버에 모두 설치가 되어 있으면 원하는 값을 가져올 수 있게 됩니다. 그렇다면 SNMP 값을 가져오는데 어느 정도의 시스템 리소스를 사용하게 될까요? 그것은 어떤 SNMP 값을 가져오는가에 따라서 다르게 됩니다. 그리고 시스템의 사양에 따라서도 조금씩 차이가 있습니다.
SNMP 값을 가져오는 데 해당 시스템의 리소스를 너무 많이 차지하게 된다면 서버에 영향을 미칠 수 있으므로 먼저 테스트해 보는 것이 좋습니다. SNMP 값을 가져오는 데는 주로 cpu system 리소스가 사용됩니다. 앞에서 테스트했던 cpu, Load Averages 값을 가져오는 것은 1% 미만의 cpu system을 사용하게 됩니다. 그러나 메모리의 값을 가져오는 것은 10% 정도까지 cpu system 리소스를 사용할 수도 있습니다. 물론 서버마다 차이가 있으니 테스트해 보면 됩니다.
그렇다면 1초에 한번씩 cpu 값을 가져오는 것은 큰 문제가 없어 보입니다. 해당 시스템을 모니터링하려면 1초에 한 번씩 값을 가져와서 출력해 주기 위해서입니다. 그러나 메모리의 값을 1초에 한 번씩 가져오는 것은 뭔가 문제가 있어 보입니다. 왜일까요? 1초에 한 번씩 해당 서버의 cpu system 리소스를 사용하게 되면 10% 정도의 cpu system 리소스를 사용하게 되기 때문에 뭔가 문제가 있어 보입니다.
그리고 프로그램을 하나만 실행시키는 것이 아니라 여러 사람이 모니터링 프로그램을 실행시켜서 사용하고 있다면 1초에 한 번씩 메모리 값을 가져오는 것은 문제가 있습니다. 그럴 경우에는 적당히 간격을 조정하면 됩니다. 한 5초 정도의 주기로 값을 가져오면 될 것입니다. 1초, 5초에 한 번씩 값을 가져오는 이유는 실시간 모니터링을 위해서입니다.
마지막으로 SNMP 메세지를 보겠습니다.
Version : SNMP 프로토콜의 버전번호.
Community name
- 매니저와 에이전트간의 관계를 나타냄.
- 인증, 접근통제 등의 목적으로 사용됨.
- 보통은 간단하게 public을 사용한다.
PDU(Physical Data Unit)
- Physical Data Unit의 줄임말.
- 실제 전송되는 필요한 정보들을 담고있는 Unit.
- Unit이라 하는 이유는 실제 전송되는 정보들의 부가 속성을 나타내기 위한 몇가지 값들을 포함하고 있기 때문.
- PDU는 PDU타입(Get인지 Set인지 Get Next인지 등등)과 Request-id, 실제보내고자 하는 데이터(OID와 OID에 대한 값들)로 구성.
SNMP 메시지는 UDP포트를 이용하여 전송된다.
- agent는 162 udp포트
- manager는 161 udp포트
'IT이야기 > 기타' 카테고리의 다른 글
vi 편집기 명령어(VI 편집기) (0) | 2017.02.23 |
---|---|
crontab(스캐줄러) 사용법 (0) | 2017.02.22 |
무료 아이콘 사이트(무료이미지) (0) | 2017.01.12 |
SVN, CVS (0) | 2016.09.02 |
리눅스 명령어 (0) | 2016.07.05 |