MRTG(Multi Router Traffic Grapher)를 이용한 네트웍 트래픽 모니터링 글쓴날 : 2000년 2월 17일(목) 글쓴이 : 문태준 (http://www.taejun.pe.kr, taejun@taejun.pe.kr, taejun@hitel.net) 참고자료 리눅스월드(이건 국내판입니당) 97년 11월호 MRTG 자료 http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html (mrtg 홈페이지입니다. www.mrtg.org 해도 됩니다) TCP/IP 관련 서적 http://www.taejun.pe.kr/board2/include/linuxinfo/files/php1ua66O/mrtg-japan.html (이건 무식하게 MRTG 일본번역자료를 다시 한일번역프로그램으로 돌린 것입니다. 이런것을 이용하여 일본리눅스 문서 프로젝트 자료를 번역하는 것도 재미있을듯. 저도 예전에 좀 해보고 말았지요. 잡담이 길었네용~~) 0. 들어가며 네트웍이 점차 보편화되고 이제 조그만 사무실에서도 보통 전용선을 사용하는 많이 사용하고 있지요. 그러면서 체계적으로 네트웍에 대한 모니터링을 하는 것도 중요해질 것입니다. 상용 네트웍 관리툴말고로 리눅스(및 기타 유닉스)에서는 MRTG라는 공개툴을 이용하여 네트웍 상황을 모니터링할 수 있습니다. 이전에 SNMP에 대해서 설명합니다. ㅇ SNMP(Simple Network Management Protocol) 네트웍에 연결되어 있는 장치에서 네트웍에 관련된 정보를 모으고 문제점등을 보고할 수 있는 기능을 제공하는 프로토콜입니다. C/S 모델을 기반으로 작동하며 각 네트웍 장비에 Agent 가 있고 중앙(클라이언트)의 Manager에서 정보를 관리합니다. 자세한 내용은 TCP/IP 관련 서적을 참고하세요. ㅇ MRTG란 무엇인가? The Multi Router Traffic Grapher (MRTG)는 네트워크의 부하를 감시하는 툴입니다. MRTG는 현재 네트워크의 상태를 HTML로 만들어서 사용자가 쉽게 볼 수 있지요. http://www.ee.ethz.ch/stats/mrtg/ 에서 예를 볼 수 있습니다. (설정을 조정하면 웹출력화면에서 한글도 지원이 됩니다.) 대부분의 UNIX와 NT에서 작동합니다. 당근 리눅스도 지원되니깐 제가 이 글을 쓰는 것이겠지요? 라우터에서 트래픽 카운터를 읽는 SNMP를 사용하는 펄 스크립트와 트래픽 데이타를 수집하고 쉽게 읽을 수 있도록 그래픽 화면으로 변환하는 C로 구성되어있답니다. 속도가 요구되는 부분을 C로 작성 한 것이지요. 리눅스에서 넷스케이프로 보면 되겠지요? MRTG는 매일매일의 트래픽 상황, 과거 7일간, 4주간, 1년간 트래픽 상황을 그래프로 생성합니다. 로그를 효율적으로 관리하기 때문에 로그가 커질 염려는 하지 않아도 되고 2년간의 자료를 보관합니다. 그래서 비교적 저스펙의 하드웨어에서도 50개 이상의 네트웍 링크를 모니터링할 수 있습니다. 또한 네트웍 트래픽뿐만 아니라 모든 SNMP 변수에 대해서도 모니터링이 가능합니다. 외부 프로그램을 이용해서 MRTG가 모니터링할 수 있는 자료를 모을 수도 있습니다. 또한 시스템 부하, 로그인세션 , 모뎀의 가용성 등도 mrtg를 이용해 모니터링할 수 있다. 2개이상의 데이터 소스를 하나의 그래프로 나타낼 수도 있습니다. MRTG를 이용해 squid도 모니터링가능한데 doc 디렉토리에 참고 문서가 있답니다. ㅇ MRTG의 특징 1.대부분의 Unix플랫폼과, WindowsNT상에서 동작 합니다 2.간단하게 커스터마이즈할 수 있도록 Perl를 사용하고 있습니다. 3.이식성이 좋은 펄을 사용해 SNMP 부분을 프로그래밍했습니다. 그래서 별도로 SNMP 패키지를 설치할 필요가 없습니다. 4.로그를 정리하기 위한 독자의 알고리즘의 채용을 하고 있으므로, MRTG의 로그파일의 사이즈가 커지지 않습니다. 5.MRTG에는 반자동의 설정용툴을 지원합니다. 6.MRTG는 라우터 포트설정이 변경되면 자동으로 체크하여 사용자에게 알려줍니다.(메일) 7. 속도가 중요한 부분은 C로 작성되었습니다. 8.Thomas Boutell의 GD library 를 사용합니다. 그래프는 GIF 포맷으로 만들어집니다. 9. MRTG가 생성하는 HTML파일을 상세하게 설정하는것이 가능. 10.MRTG는 GNU PUBLIC LICENSE 로 제공됩니다. MRTG의 역사, 릴리즈 노트 등응 생략합니다. contrib 디렉토리에 위에서 말한 cpu부하등의 정보를 모니터링하는 툴과 문서가 있습니다. 00INDEX cfgmaker_cisco/ get-multiserial/ mrtgindex.cgi/ 00INDEX~ cisco_ipaccounting/ ircstats/ mrtgmk/ 14all/ cisco_tftp/ jm/ ovmrtg/ GetSNMPLinesUP/ ciscoindex/ mrtg-archiver/ ping-probe/ NSI/ cpuinfo/ mrtg-blast/ portmasters/ PMLines/ cpumon/ mrtg-dynip/ rdlog2/ TCH/ diskmon/ mrtg-ipacc/ rumb-stat/ ascendget/ distrib/ mrtg-ipget/ stat/ atmmaker/ forecd/ mrtg-mail/ whodo/ cfgmaker_ATM/ get-active/ mrtgidx/ xlsummary/ 1. mrtg 설치하기 http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html 1.MRTG의 최신판을 다운 로드 http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub/ mrtg-2_8_9_tar.gz tar xvfz mrtg-2_8_9_tar.gz 하면 풀리겠지요? [root@taejun mrtg-2.8.9]# ls ANNOUNCE CHANGES COPYING COPYRIGHT MANIFEST Makefile.in README configure* ------>> 첫 환경설정 configure.in contrib/ ----->> 각충 추가 프로그램 doc/ ------>> 문서 images/ -------->> 이미지 파일. install-sh* run/ ---->> 실행스크립트. 제일 중요 src/ translate/ --->> 지원언어 제가 사용할때는 2.8.9 였습니다. 이전버전는 모르겠는데 HTML 생성시 한글을 지원해서 좋더라구요. 최근에 추가된듯. Kensoon Hwang 사용하는 분들 이분에게 감사의 편지라도.... 2. GD 라이브러리가 없으면 아래 사이트에서 받아서 컴파일 http://www.boutell.com/gd/ 3. Perl 5.004_4 이상 버전이 있어야합니다. http://www.perl.com/perl/info/software.html 4. ./configure 시스템에 맞는 Makefile을 만들어주지요. 펄이나 GD경로가 맞는지 확인해보아야하는데 아마 자동으로 찾아줄 것입니다. 저도 변경하지 않고 그냥 했지요. ok 5. make rateup실행 파일을 만들기 위해서 make 를 실행합니다. rateup 프로그램은 db 파일을 업데이트하고 그래픽 이미지등을 생성하는 프로그램이라고 하네요. 신경쓰지 말고 그냥 make 6. MRTG에서 생성할 웹페이지 디렉토리를 정합니다. /usr/local/www/htdocs/mrtg 라고 가정하지요. 그러면 여기에 imags 디렉토리 밑의 mrtg*.gif 파일을 다 복사해 줍니다. 7. run 디렉토리에 실행파일이 있습니다. 확인합시다. BER.pm SNMP_Session.pm SNMP_util.pm cfgmaker* cfgmaker_ip* cfgmaker_phys indexmaker* locales_mrtg.pm mrtg* 8. 다음에 자신의 mrtg.cfg파일을 작성 합니다. 이 파일에 관한 정보는config.html에 있습니다. 아마 처음에는 익숙하지 않은 것입니다. doc 디렉토리에 샘플파일이 있으니 이것을 참고하는 것도 좋습니다. 이걸 자동으로 만드는 툴이 cfgmaker입니다. (라우터의 포트번호를 알아내는 프로그래이랍니다) cfgmaker @ mrtg.cfg 라우터의 community@route 주소 를 지정해야지요. 라우터의 community 이름을 모른다면 public을 사용해보고 그래도 안되면 관리자에게 문의하세요. ./cfgmaker public@203.239.148.193 > mrtg.cfg 이런 식으로 하면 됩니다. 보통 라우터는 gateway주소겠지요? 여기서 mrtg.cfg 설정하는 것이 좀 여러운 부분입니다. 위에서 자동으로 생성된 파일을 다음과 같이 수정합니다. 이건 제일 윗줄에 적으면 되죠. Language는 직접 추가해야합니다. WorkDir: /usr/local/www/htdocs/mrtg/ Language: korean --->> 한글 설정 대략 이런 형태로 설정될 것입니다. WorkDir: /usr/local/www/htdocs/mrtg Target[love]: 2:public@myrouter.somplace.edu MaxBytes[love]: 64000 Title[love]: Traffic Analysis ISDN PageTop[love]:

Stats for our ISDN Line

WorkDir: /usr/local/www/htdocs/mrtg --> 웹 파일이 생성될 디렉토리 Target[love]: 2:public@myrouter.somplace.edu --> [love] -> 체크하고자하는 라우터의 포트에 붙이는 이름. 나중에 보면 love.html로 됩니당. --> 2 : 라우터의 포트번호 --> public : 라우터의 commnunity 이름 --> myrouter.somplace.edu : 라우터 주소지정 MaxBytes[love]: 64000 -->> 전송속도를 나타냅니다. Title[love]: Traffic Analysis ISDN -->> 말그대로 이에 대한 제목이라고 보면 됩니다. PageTop[love]:

Stats for our ISDN Line

-->> 웹페이지 제일 위에 올라가는 말입니다. 쩝. 위 설명을 좀 빈약하군요. doc 밑의 config.html 이나 config.txt를 참고하세요. 그리고 한국사람들은 한글 지원을 추가합시다!!! 9. 이제 MRTG를 실행해야겠지요? run 디렉토리에서 ./mrtg mrtg.cfg 만약 설정파일에 에러가 있다면 에러를 냅니다. 에러가 없다면 이제 라우터에서 트래픽 자료를 수집하지요. 그런데 처음에 실행하면 MRTG가 로그 파일이 없다고 에러 메시지가 나오는데 두세번 실행하면 없어지니 너무 놀라지 마세요. 10. MRTG를 crontab에 등록합니다. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * \ /usr/local/mrtg/run/mrtg /usr/local/mrtg/run/mrtg.cfg (실제로 작성할때는 위에서 \ 는 빼야겠지요? 여러줄의미) 첫컬럼이 무지 긴데 */5 로 해도 되겠지요. 이제 /usr/local/www/htdocs/mrtg/ 로 가서 웹에서 확인해보세요. 여기까지 하였다면 축하~~~~~~~ 2. 기타 2.1. 개요 페이지 만들기 링크가 많다면 페이지가 여러개 필요합니다. 위에서 Target[love] 라고 되어있는데 이렇게 [ ] 안에 들어가 있는 문자열로 웹의 mrtg 디렉토리 밑에 love.html 과 관련 그래픽파일이 생깁니다. 그렇다면 이러한 타겟에 대한 개요 페이지를 만들면 편리할 것입니다. 그러니깐 여러가지 링크에 대한 주메뉴화면이라고나 할까요. indexmaker 이렇게 설명이 되어있는데요. 저의 경우는 이렇게 했습니다. indexmaker -t 'All My Router' -r . -o \ /usr/local/www/htdocs/mrtg/index.html mrtg.cfg (실제로 작성할때는 위에서 \ 는 빼야겠지요? 여러줄의미) 명령어의 도움말 보시면 이해가 갑니다. 여기까지 설명하기에는 헥헥~ 2.2. 프락시, 로컬 캐쉬 문제 MRTG는 기본적으로 5분마다 그래프를 업데이트합니다. 그런데 프락시나 로컬 캐쉬때문에 문제가 생길 수 있다고 합니다. 아파치 서버를 사용한다면 mrtg.cfg 에서 WriteExpire와 아파치 웹서버의 MetaDir 키워드를 적절히 세팅해야합니다. 이에 대해선 MRTG 홈페이지 참고. 제가 잘 되니깐 별로 고민안하게 되네요. 2.3. 추가기능 MRTG의 본래의 목적은 트래픽 감시입니다만, 어떤 SNMP변수도 모니터링할 수 있습니다. 모뎀 뱅크 상황, 서버의 부하, 인터페이스의 에러율 등. 이에 대해서는 mibhelp.txt 와 contrib 디렉토리를 참고하세요. 4. 마치며 대략 이정도로 정리를 합니다. 설정 파일에 대한 설명은 이후로 미룹니다. 물론 몇십년이 될지 장담은 못 하겠지요. 네트웍에 대해 정확히 모니터링해서 쓸데없이 대용량의 회선쓰지말고 돈을 절약합시다. SNMP에 대해서는 관련 서적을 참고하시구요. 저도 잘 모릅니다.