본문 바로가기
네트워크 (LAN,WAN)

SNMP와 MRTG 이용 네트워크 시스템 모니터링

by 날으는물고기 2009. 4. 8.

SNMP와 MRTG 이용 네트워크 시스템 모니터링

MRTG는 장비의 CPU, 메모리, 4∼7계층 스위치, 다양한 서버와 애플리케이션의 상태를 모니터링 하는 툴로, 네트워크 관리자라면 한번 이상은 사용해 봄직한 공개용 툴이다. 하지만 알고 있는 것과 실제로 잘 활용하는 것은 별개의 문제. MRTG 설치시 유의할 점과 MRTG 전체 구조의 이해 등을 통해 실력있는 네트워크 관리자의 세계로 한단계 성큼 다가서 보자.

 

네트워크에 연결돼 있는 수많은 스위치, 라우터, 서버 등과 같은 여러 장비들을 관리하는 엔지니어들이 가장 궁금해 하는 것 중에 하나가 바로 '어떻게 장비의 상태를 주기적으로 모니터링할 수 있을까'일 것이다.


과거 네트워크 장비 상태를 점검한다고 하면 대부분 '트래픽'의 양에만 국한됐다. 하지만 최근에는 장비의 CPU, 메모리, 4∼7계층 스위치, 다양한 서버와 애플리케이션까지 등장하면서 보다 다양한 값을 포함하게 됐다.


MRTG 는 이런 상태를 모니터링하는 툴 중 하나로, 'Mutli Router Traffic Grapher'의 줄임말이다. MRTG는 이름에서 알 수 있듯이 기본적으로 라우터에서 가장 중요한 여러 인터페이스들의 'In/Out' 트래픽을 일간, 주간, 월간, 년간을 기준으로 각각 별도의 그래프를 그려주고, 이들의 현재, 평균, 최대치를 한눈에 알 수 있게끔 해주는 아주 유용한 툴이다.

 


 

 

MRTG는 라우터를 기본적으로 하고 있지만 조금만 응용해서 사용한다면 상상 이상의 것들도 모니터링이 가능하다. MRTG 활용으로 유명한 국내 사이트인 www.mrtg.co.kr로 가면 네트워크 장비들의 내부 온도를 나타내는 수치를 이용해, 온도 그래프까지 그려보이고 있다.
그 만큼 네트워크를 하는 사람들에게 MRTG는 잘 알려진 툴이며, 많이들 사용하고 있고, 실제 상용화된 네트워크 제품들이 통계치를 가진 그래프가 필요할 때 많이 사용된다. 아직 MRTG를 접해보지 않은 독자들이 있다면 이번 글을 통해 유용한 툴 하나를 얻을 수 있을 것이다.

 

MRTG의 동작 원리

 

MRTG는 여러 가지 요소가 복합적으로 동작을 하기 때문에 제일 먼저 MRTG가 전체적으로 어떻게 구성돼 있는지를 이해해야만 한다. 필자가 처음 MRTG를 접하고 나서 어느 정도 익숙해지기까지 시간이 많이 걸렸던 것도 바로 이런 부분을 그냥 지나쳤기 때문이었던 것으로 기억한다. 때문에 이 같은 시행착오를 거치지 않으려면 MRTG의 전체 구성을 반드시 이해하고 넘어가는 것이 좋다.
MRTG는 (그림 1)과 같이 모니터링 대상이 되는 시스템과 그 시스템을 모니터링 하는 두 개의 시스템으로 구성된다.

 


 

 

(그 림 1)과 같이 네트워크 장비의 트래픽을 모니터링하고 싶을 경우 MRTG 서버의 SNMP(Simple Network Management Protocol) 요청에 응답하기 위해 시스템에서 제일 먼저 SNMP는 에이전트(Agent)를 구동시켜야 한다. 물론 이때 두 시스템은 네트워크에서 연결이 돼야 한다(인터넷 구간에서도 많이들 사용한다).


다음으로 MRTG가 구동될 서버에는 모니터링 장비에 정보를 요청하고, 그 값을 로그로 남기고, 그래프를 만드는 MRTG 프로그램을 설치해야 한다. 이들 결과값을 사용자가 웹 브라우저를 이용해서 볼 수 있도록 웹 서버를 설치해야 한다. 웹 서버는 결과값을 만드는데는 필요하지 않고, MRTG의 결과값이 gif, png 형태의 그래프와 HTML 형식으로 만들어지기 때문에 사용될 뿐이다.
여기서 웹 서버는 자주 사용하는 리눅스(유닉스 계열)의 아파치나 마이크로소프트의 윈도우 NT 계열 이상에 설치되는 IIS 또는 개인용 웹서버라고 불리우는 'Persnal Web Server'이어도 상관없다.
다 시 한번 정리하면 모니터링 대상이 되는 시스템에 SNMP가 구동돼야 하고, MRTG가 설치된 서버에 MRTG 프로그램과 웹 서버를 설정하면 모든 작업은 끝난다. 이제 필요할 때마다 웹 브라우저를 이용해 장비 상태를 점검하면 된다.

 

다양한 운영체제 지원

 

MRTG가 가장 많이 사용되는 시스템은 리눅스(유닉스) 계열이고, 최근에는 마이크로소프트의 윈도우 계열에서도 많이 사용한다. 그 이유는 더 편해서라기 보다는 대부분의 사람들이 윈도우를 사용하기 때문일 것이다.
최근 리눅스 배포판들의 경우는 대부분 MRTG를 이미 포함하고 있기 때문에 리눅스가 있다면 바로 사용할 수 있다. 참고로 MRTG는 다음과 같은 다양한 운영체제를 지원한다.

 

·리눅스 1.2.x, 2.0.x, 2.2.x, 2.4.x(인텔, 알파, 스팍, 파워PC)
·리눅스 MIPS, 리눅스 S/390
·SunOS 4.1.3
·MacOSX 10.2.8
·솔라리스 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9
·AIX 4.1.4, 4.2.0.0, 4.3.2
·HPUX 9,10,11
·윈도우 NT 3.51, 4.0, 2k, XP, 2003(95, 98, ME too, but only for die-hards)
·IRIX 5.3, 6.2, 6.5
·BSDI BSD/OS 2.1, 4.x, 3.1
·NetBSD 1.5.x 1.6.x
·FreeBSD 2.1.x, 2.2.x, 3.1, 3.4, 4.x
·OpenBSD 2.x, 3.x
·Digital Unix 4.0
·SCO Open Server 5.0
·Reliant UNIX
·NeXTStep 3.3
·OpenStep 4.2
·Mac OS X 10.1
·기타 유닉스 계열의 운영체제

 

이렇게 다양한 운영체제를 지원하는 것만으로도 MRTG가 얼마나 범용적인 툴인가를 알 수 있다.

 

MRTG 설치시 유의 사항 'Perl 설치하기'

 

이번 기고에서는 지면 관계상 MRTG 설치법에 대해서는 자세히 다루지 않는다. 그렇다고 걱정할 필요는 없다. 다음과 같은 홈페이지를 이용하면, 보다 더 자세한 설치 매뉴얼을 얻을 수 있으니 말이다.

http://www.mrtg.co.kr/
http://oss.oetiker.ch/mrtg/

대 신 MRTG 설치시 주로 고민하게 되는 몇 가지에 대해서만 간단히 짚고 넘어가도록 하겠다. 우선 MRTG는 펄(Perl)과 C를 기본으로 동작하는데, 리눅스의 경우 대부분 펄이 이미 설치돼 있기 때문에 MRTG만 설치하면 되지만, 윈도우에서는 그렇지가 못하다. 때문에 '윈도우용 Perl'을 별도로 설치해야만 한다.
자신의 시스템에 펄이 설치돼 있지 않다면 www.perl.com이나 www.perl.org를 방문해서 별도로 펄을 설치해야 한다. 참고로 펄은 스크립트형 프로그래밍 언어로, 유닉스 계열에서 많이 사용되며, 특히 웹 서버들의 프로그래밍에 많이 사용돼 왔다.


MRTG 실행 파일 활용 1 : cfgmaker

 

MRTG에는 다음과 같은 3개의 실행 파일이 있다.

 

·cfgmaker
·mrtg
·indexmaker

 

cfgmaker 는 이름에서 짐작할 수 있듯이 MRTG가 구동되기 위한 Config 파일을 만드는데 사용된다. 사실 Config 파일의 포맷을 정확히 알고 있다면 cfgmaker를 사용할 필요가 없지만, 그렇지 않은 경우에는 cfgmaker를 이용해서 설치를 한 후에 간단하게 Config 파일을 만들 수 있다.
그 다음으로 이 Config 파일을 자신이 원하는 형태로 수정을 하면 된다. cfgmaker의 경우, 처음에 Config 파일을 생성할때만 사용된다. 다음은 간단한 cfgmaker 사용법이다.

 

[root@tech mrtg]# cfgmaker > switch.cfg

 

여기에 사용된 'admin'은 실제 모니터링을 할 시스템인 192.168.10.10에 설정된 SNMP 커뮤니티 값이다. 그리고 다음에 있는 switch.cfg는 cfgmaker에 의해 만들어질 Config 파일의 이름이다.
여 기서 cfgmaker는 192.168.10.10 시스템에 직접 SNMP 통신을 해 모든 인터페이스들의 값을 나타내고자 한다. 그러므로 cfgmaker를 구동할 때는 시스템과 SNMP 통신이 가능해야만 한다. 만약에 그렇지 않다면 '에러'를 만나게 될 것이다.

 

MRTG 실행 파일 활용 2 : mrtg

 

MRTG 의 또다른 실행파일인 mrtg는 기본적으로 5분마다 실행돼 Config 파일에 따라서 SNMP 요청을 하고, 그 결과값으로 로그를 남기고 그래프도 만든다. cfgmaker와 indexmaker가 어떤 대상을 모니터링 하고자 할 때 처음에만 사용된다고 한다면, mrtg 파일은 모니터링을 하는 동안 계속해서 사용된다.

 

[root@tech mrtg]# mrtg switch.cfg

 

mrtg 파일은 cfgmaker로 만들어지거나 임의로 만든 Config 파일을 이용해 실행할 수 있다. 이때도 물론 해당 서버와 통신이 가능해야만 정확한 값을 가지고 올 수 있다. mrtg의 경우, 이전에 남은 로그를 비교해서 만들기 때문에 초기에 실행하면 첫번째, 두번째는 에러가 나고, 세번째에야 에러가 없이 동작을 하게 되니, 첫 번째, 두 번째 에러에 너무 당황하지 않아도 된다.
설치 초기에만 mrtg 파일을 수동으로 실행시키고 이후에는 유닉스의 자동 스케줄 프로그램인 cron을 이용해서 5분마다 구동시키면 된다. 다음은 cron에 등록돼 5분마다 실행하도록 추가된 내용이다.

 

*/5 * * * * /usr/local/mrtg-2/bin/mrtg /var/www/html/mrtg/switch.cfg

 

mrtg를 5분마다 실행하는 또 다른 방법으로는 Config 파일에 다음과 같은 항목을 넣어주는 것이다.

 

RunAsDaemon:Yes
Interval:5

 

위와 같은 항목만 넣어주고 mrtg가 실행되면서 데몬으로 동작을 하게된다. mrtg가 cron에서 동작할 경우 매번 Config 파일을 로딩하고 파싱을 해야 하는 반면, 데몬의 경우 그 동작을 한번만 수행하는 장점이 있다.


다만 데몬으로 동작하는 경우는 시스템 구동시 시작되도록 시작 스크립트에 mrtg가 한번 구동되도록 해야 한다는 점을 절대 잊지 말자.

 

MRTG 실행 파일 활용 3 : indexmaker

 

'indexmaker' 파일도 cfgmaker와 마찬가지로 초기에 cfgmaker를 만들고, mrtg 파일을 다음에 한번만 생성하면 된다. 이 파일은 실제 mrtg가 동작하는데 사용되기 보다는 mrtg로 만들어진 결과값을 사용자가 웹 브라우저로 볼 때 만들어지는 HTML 형태의 초기 화면을 만들어주는 역할을 한다. 그러니 mrtg를 구동하고 처음에 한번만 실행을 하면 된다.

 

[root@tech mrtg]# indexmaker --title '스위치' --output ./switch/index.html switch.cfg

 

위 의 명령어를 실행시키고 나면 'switch'라는 폴더에 'index.html'이라는 파일이 생성됨을 알 수 있을 것이다. 물론 이 페이지를 열게 되면 페이지 맨 위의 제목이 '스위치'로 돼 있다. 참. 이때 간단한 내용이지만 주의할 점은 이 파일이 만들어지는 위치는 당연히 웹 서버의 홈 디렉토리 내부에 위치해야만 웹 브라우저로 볼 수가 있다는 것이다.
지금까지 살펴본 cfgmaker, mrtg, indexmaker 파일이 각각 어떤 역할을 하는지 명확히 구분할 수 있다면 MRTG를 처음 설치하더라도 걱정할 것이 없다.


 

MRTG 팁

 

그래프가 114Mbps 이상에서 이빨 빠진 것처럼 되는 이유와 해결책

 

(화면 1)은 라우터의 기가포트에 대한 트래픽을 나타내는 그래프다.

 


 

(화면 1) 32비트 카운터를 사용할때 볼 수 있는 화면

 

 

자 세히 살펴보면 150Mbps 이상을 계속 사용하고 있음에도 불구하고 이상하게도 트래픽은 항상112Mbps 근처에서 더 이상 증가하지 않는다. 증가하지 않는 이유와 왜 하필 값이 112Mbps 근처가 되는지, 그리고 이 문제를 해결하기 위해서 어떻게 해야 되는지 알아보자.

 

첫째, 왜 한계값이 114Mbps 인가?

 

위와 같은 문제가 생기는 이유는 MRTG가 기본적으로 32비트 카운터를 사용하기 때문이다. 32비트 카운터를 사용할 때 다룰 수 있는 최대값은 2의 32승 = 4,294,967,296이고, 이것을 5분간 평균치로 구하기 위해 300으로 나누면 14,316,557.65333이 된다. 이것을 우리가 알아보기 편한 비트 단위로 환산하기 위해 8을 곱하면 다음과 같다.

 

14,316,557.65333×8 = 114,532,461.22666

 

다시 말하면 (2의 32승 바이트 / 300초)×8 = 약 114Mbps 가 되는 것이다.

 

둘째, 그럼 해결책은 무엇인가?

 

32 비트를 사용하기 때문에 약 114Mbps 영역까지만 제대로 표시할 수 있다. 이 문제를 해결하기 위해서는 상위버전인 64비트 카운터를 이용하면 된다. 물론, 114Mbps 이하의 영역에 있는 100Mbps 이하의 속도를 가지고 있는 인터페이스에서는 평소대로 32비트 카운터를 이용하면 된다.
64비트 카운터를 이용하기 위해서는 CFG 파일 내부에 'Target' 부분의 마지막 부분에 콜론(:)을 다섯 개를 써준 후 숫자 2(64비트 카운터를 의미함)를 써주면 된다. 이때 주의할 점은 구형 기종과 IOS는 64비트 카운터를 지원하지 않는 경우가 있으니 유의해야 된다.

 

Target[10.10.10.1_1]: 1:public@10.10.10.1:
→ Target[10.10.10.1_1]: 1:public@10.10.10.1:::::2


 


 

(화면 2) 64비트 카운터를 사용할때 볼 수 있는 화면

 

 

 

 

라우터의 OID 값 구하는 방법 

 



(화면 3) 라우터 메모리의 OID 값 구하기

 

 

트 래픽에 대한 정보는 MRTG에서 기본적으로 제공하기 때문에 문제가 없지만, 메모리나 CPU 등을 모니터링 하기 위해서는 각각의 OID(Object ID) 값을 알아야 한다. 이번에는 시스코웍스에 포함돼 있는 What's up gold를 이용해 실제 라우터에서 OID 값을 찾는 방법과 이것을 MRTG에 적용하는 방법에 대해 알아보도록 하자.

먼저 라우터 메모리 OID(Object ID) 값을 구해보자. 라우터에 접속한 후 show memory 라는 명령어를 이용하면 다음과 같은 내용을 볼 수 있다.

 

7206vxr#show memory

           Head        Total         Used          Free     ...
Processor  62AE40C0   206683968    29212292    177471676    ...
      I/O  F000000    16777216     7282508     9494708      ...
   ....

 

여기서 Used, Free 부분을 모니터링하려고 한다.

 

7200 라우터 전체 메모리 = 시스템 메모리 + 프로세서 메모리 + I/O 메모리

 

What's up gold를 실행 후 Net Tools의 SNMP에서 What 부분을 셀렉터(...) 클릭한다(화면 4). 

 

iso → org → dod → internet → private → cisco → ciscoMgmt → ciscoMemoryPoolObjects → ciscoMemoryPoolTable → ciscoMemoryPoolEntry

 

 


(화면 4) Net Tools의 SNMP를 실행한 화면

 

(화면 4)에서 우리가 모니터링하려고 하는 대상은 다섯 번째와 여섯 번째에 해당하는 다음과 같은 것이다.

 

ciscoMemoryPoolUsed → 1.3.6.1.4.1.9.9.48.1.1.1.5
ciscoMemoryPoolFree → 1.3.6.1.4.1.9.9.48.1.1.1.6 

 

자, 이제 맨 마지막에 instance 값을 붙이는 일만 남았다(보통 CPU처럼 한개만 있는 항목은 0을 사용함). instance는 굳이 한글로 번역한다면 '종류' 혹은 '인덱스 번호' 정도로  해석할 수 있다. 메모리의 경우에도 프로세서 메모리, I/O 메모리, Fast 메모리, PCI 메모리 등 많은 종류가 있는데 이런 것을 구별하기 위하여 instance라는 것이 필요한 것이다.
처음에 show memory를 실행시켰을 때 나온 값을 보면 7200라우터의 주된 항목으로 프로세서 메모리와 I/O 메모리가 보임을 알 수 있다. instance 값에 대한 확인은 메모리 타입이나 메모리 이름으로 알 수 있다. 이제 ciscoMemoryPoolEntry를 선택하고, Get All Subitems를 체크한 후 start 버튼을 클릭하면 된다.
(화면 5)에서 instance 값이 1번은 프로세서 메모리이고, 2번은 I/O 메모리이기 때문에 우리가 MRTG에 기록하는 값(OID+instance)은 각각 다음과 같다.

 

 


 

 

(화면 5) instance 값 확인하기

 

ciscoMemoryPoolUsed → 1.3.6.1.4.1.9.9.48.1.1.1.5.1  1.3.6.1.4.1.9.9.48.1.1.1.5.2
ciscoMemoryPoolFree → 1.3.6.1.4.1.9.9.48.1.1.1.6.1  1.3.6.1.4.1.9.9.48.1.1.1.6.2


 

 

라우터의 CPU 사용률 모니터링하기

 

 

 


(화면 6) 라우터의 CPU 사용률을 모니터링한 화면

 

 

What's up gold 실행 후 Net Tools의 SNMP탭에서 What 부분을 셀렉터(...) 클릭해 보자.

 

iso → org → dod → internet → private → cisco → local → lsystem에서 avgBusy1과 avgBusy5 항목을 찾을 수 있다(화면 7).

 

 



(화면 7) avgBusy1과 avgBusy5 항목 확인하기

 

과연 이 값이 맞는지 라우터에 들어가서 다음과 같이 직접 확인해 보자.

 

7206vxr#show processes cpu
CPU utilization for five seconds: 19%/18%; one minute: 20%; five minutes: 20%
PID Runtime(ms)   Invoked      uSecs   5Sec   1Min   5Min    TTY Process
1           0         1          0     0.00%  0.00%  0.00%   0 Chunk Manager
2         288   1147692          0     0.00%  0.00%  0.00%   0 Load Meter
3          12       112        107     0.08%  0.00%  0.00%   2 Virtual Exec
...
...

 

위 의 결과를 통해 avgBusy1: CPU 1분간 평균값, avgBusy5: 5분간 평균값 항목이 정확하다는 것을 알 수 있다. 따라서 우리가 구하고자 하는 값은 avgBusy1 = 1.3.6.1.4.1.9.2.1.57.0, avgBusy5.0 = 1.3.6.1.4.1.9.2.1.58.0이다. 아래는 MRTG 설정의 예이다.

 

 Target[cpu]: 1.3.6.1.4.1.9.2.1.57.0&1.3.6.1.4.1.9.2.1.58.0:public@1.1.1.1
 MaxBytes[cpu]: 100
 Options[cpu]: growright,gauge
 Unscaled[cpu]: dwmy
 YLegend[cpu]: CPU Utilization
 ShortLegend[cpu]: %
 LegendI[cpu]: 1 Min:
 LegendO[cpu]: 5 Min:
 Legend1[cpu]: AvgBusy 1 Min
 Legend2[cpu]: AvgBusy 5 Min
 Title[cpu]: 7206 Router CPU utilization
 PageTop[cpu]: <H1>7206 Router CPU utilization</H1>

 

 

 

index(html 파일 목차) 만들기

 

 

MRTG 를 이용해서 그래프와 html 파일을 생성시켰다면 이제는 이것을 웹으로 보여줘야 할 일이 남아 있다. 물론, html 파일을 사용자가 직접 메모장에서 수정할 수 있지만, MRTG에서 제공하는 indexmaker를 이용하면 간단하게 index 파일을 만들 수 있다.

 

·cfg 화일 만들기

 

 C:\mrtg\bin>perl cfgmaker --ifdesc=alias public@1.1.1.1> 7206.cfg

 

 


(화면 8-1) CPU utilization

 

 

 


(화면 8-2) GigabitEthernet0/1 "KOREN21-1Gbps"

 

 

 


(화면 8-3) GigabitEthernet0/3 "KT-Metro-155Mbps"

 

 

 


(화면 8-4) GigabitEthernet2/0 "FireWall-1Gbps"

 

 

 


(화면 8-5) Serial5/0 "Seoul-EI"

 

위의 명령에서 --ifdesc=alias 옵션을 주는 이유는 (화면 8)에서 보듯이 그래프의 제목을 라우터에 설정된 description으로 지정해 주기 위해서이다. 실제로 라우터에서는 다음과 같이 설정돼 있다.

 

   ...
   ...
   interface GigabitEthernet0/1
      description "KOREN21-1Gbps"

   interface GigabitEthernet0/3
      description "KT-Metro-155Mbps"

   interface GigabitEthernet2/0
      description "FireWall-1Gbps"

   interface Serial5/0
      description "Seoul-E1"
   ...
   ...

 

·index 파일 만들기 : [형식] perl indexmaker [옵션] [cfg파일]

 

C:\mrtg\bin>perl indexmaker --output=c:\mrtgdata\7206\index.html 7206.cfg

 

 

 

수식을 이용한 그래프


어 느 날 이런 문의가 들어왔다. 본사와 지사간에는 E1 전용회선을 3회선 이용하고 있고 MRTG를 이용해 모니터링하고 있다. 평소에는 상사에게 MRTG를 이용해 각 인터페이스의 트래픽 그림을 보여주면서 3개의 회선의 이용도가 이 정도이다라고 보고했다. 그런데 어느 날 갑자기 상사가 각 인터페이스별로 그래픽을 따로 표시할 것이 아니라 하나로 합쳐서 전체 6Mbps 중에 회선 이용률이 얼마나 되는지 알 수 있도록 하라고 지시를 내린 것이다. 이런 상황에서도 당황해 할 필요 없다. MRTG는 자체내에서 그런 것을 아주 간단하게 제공하고 있기 때문이다.

 

  Target[sum]: 1:public@1.1.1.1 + 2:public@1.1.1.1 + 3:public@1.1.1.1
   ...
   ...

 

위 의 설정처럼 하면 3개 인터페이스의 트래픽을 하나로 합쳐서 보여줄 수 있다. 그리고 덧셈뿐만 아니라 나머지 사칙연산도 지원하고 있는데, 사칙연산을 이용할 때 주의해야 할 점은 연산자라는 것을 확실히 구분하기 위해 연산자 앞뒤에는 반드시 공백이 있어야 된다는 것이다.

 

 

출처 : 온더넷

728x90

댓글