2008년 7월 10일 목요일

MRTG 구축

  1. MRTG
    MRTG(Multi Router Traffic Grapher)는 SNMP를 지원하는 네트워크장비가 발생하는 트래픽을 모니터링해 주는 소스가 공개된 프로그램입니다. 지정한시간(Defaul는 5분)마다 모니터링한 결과값을 GIF(또는 PNG)이미지로 생성하여 HTML페이지로 뿌려주기 때문에 누구나 쉽게 트래픽 현황을 볼 수 있습니다. (아래 예를 참고)

    보다 자세히 설명드리면, MRTG는 Perl 언어와 C언어로 구성되어 있고, UNIX와 Windows NT에서 동작을 합니다. 그리고 그래프는 일간 그래프외에, 주간, 월간,년간 그래프가 있으므로 시간대별 추위를 파악하는 데, 좋은 분석도구가 될 수 있습니다.

    MRTG는 트래픽 모니터링 뿐만 아니라, SNMP값(MIB값)을 이용하여 다양한 모니터링이 가능합니다. 그리고 외부 프로그램을 사용할 수 있기 때문에 다양한 변형이 가능합니다. 이에 관해서는 RAS장비에 대한 포트모니터링에서 설명드리겠습니다. 그리고 MRTG가 생성하는 log값을 가공하여 새로운 데이터베이스를 구축하여 응용할 수 있습니다. log값을 가공하는데는 여러방법이 있지만, 저는 주로 Perl언어를 사용했습니다. 그러나 PHP를 이용하면 복잡한 CGI용 프로그램을 이용하지 않아도 쉽게 웹상에서 활용할 수 있습니다. 이에 대해서도 아래 예에서 설명드리도록 하겠습니다.

    대체적으로 MRTG는 다음과 같은 용도로 사용하고 있습니다. 네트워크 장비 인터페이스 별 트래픽 분석, CPU나 메모리 사용률 분석, 모뎀별 포트사용률 분석 등입니다.


  1. MRTG 구축하기
  2. [설치가능한 플랫폼]

     
    • Linux 1.2.x, 2.0.x, 2.2.x, 2.4.x (Intel and Alpha and Sparc and PowerPC)
    • Linux MIPS, Linux S/390
    • SunOS 4.1.3
    • Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8
    • AIX 4.1.4, 4.2.0.0, 4.3.2
    • HPUX 9,10,11
    • WindowsNT 3.51, 4.0, 2k
    • IRIX 5.3, 6.2
    • BSDI BSD/OS 2.1, 4.x, 3.1
    • NetBSD (sparc)
    • FreeBSD 2.1.x, 2.2.x, 3.1, 3.4, 4.x
    • OpenBSD 2.5, 2.6, 2.7
    • Digital Unix 4.0
    • SCO Open Server 5.0
    • Reliant UNIX
    • NeXTStep 3.3
    • OpenStep 4.2
    • And about and other sensible Unix
    LINUX환경에서(강추!!)
    Linux에서 MRTG를 설치할 경우 대부분의 프로그램들(Perl, 그래픽라이브러리, Apache서버)이 이미 설치되어 있기 때문에 MRTG만 다운받아서 설치하면 된다.
    단 Linux를 처음 설치할 때 Develope Tool을 설치해야 gcc, make와 같은 프로그램들이 설치된다.
    설치해본 환경 : Wow Linux 7.0
    UNIX환경에서
    MRTG는 소스코드로 제공되기 때문에 다운받은 후 컴파일하는 작업이 필요합니다. 따라서 컴파일하기 위해서는 C 컴파일러가 설치되어 있어야하고, 그외 MRTG를 수행하는 데 필요한 프로그램으로써는 Perl, gd, libpng, zlib가 있어야 합니다.
 
.GCC 설치
http://gcc.gnu.org/ 에서 다운받아서 인스톨하시면 됩니다.
.Perl 설치
Version 5.005 이상 을 다운 받아서 설치하기. 이미 설치가 되어있는 경우 version확인은 ‘perl -v’로 알 수 있습니다.
http://www.perl.com/
#gzip -d stable.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는 것 같음)
#tar -xvf stable.tar
#mv ./perl*/ /usr/local/perl/  (최신 버전이 5.6.0인 경우임,  /usr/local/ 디렉토리로 이동시킵니다.)
#cd /usr/local/perl
#rm -f config.sh (기존에 설치된 config shell파일을 지움)
#sh Configure (configure파일 생성)
#make ( 소스파일이므로 컴파일 함)
#make test
#make install (컴파일 후 인스톨 함)
. 그래픽 생성을 위한 라이버러리
MRTG가 생성하는 그래픽 파일의 형식이 PNG라고 위에서 말씀드렸습니다. 이를 위해서 gd 라이버러리가 필요하고, 이 gd라이버러리는 또 2개의 라이버러리(zlib, libpng, jpeg) 가 설치되어 있어야 컴파일이 가능합니다.
a. zlib (그래픽 파일을 압축함)
http://www.gzip.org/zlib/ 에서 최신버전을 다운받아 설치합니다.
  #gzip -d zlib.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는 것 같음)
  #tar -xvf zlib.tar
  #mv ./zlib*/ /usr/local/zlib/  (program은 주로  /usr/local/ 디렉토리로 이동시킵니다.)
  #cd /usr/local/zlib
  #./configure
  #make
  #make test
  #make install
b. libpng (zlib가 만든 그래픽 파일을 PNG포맷으로 변형)
http://www.libpng.org/pub/png/ 에서 최신버전을 다운받아 설치합니다.
#gzip -d libpng-1.0.8.tar.gz
#tar -xvf libpng-1.0.8.tar
#mv ./libpng*/ /usr/local/libpng/  (program은 주로  /usr/local/ 디렉토리로 이동시킵니다.)
#cd /usr/local/libpng
#cp scripts/makefile.std makefile  ( scripts 디렉토리 밑에서 해당 OS에 맞는 makefile선택하여 makefile로 복사함. linux인 경우 makefile.linux를 복사)
#make test
#make install
c. jpeg
http://www.ijg.org 에서 최신버전을 다운받아 설치합니다.
#gzip -d jpegsrc.v6b.tar.gz
#tar -xvf jpegsrc.v6b.tar
#mv ./jpegsrc*/ /usr/local/jpeg/ 
#cd /usr/local/jpeg
#./configure
#make
#make test
#make install

 

(참고) sun의 경우 include 파일(*.h)이 '/usr/local/include'에 복사가 되지 않아서 gd를 compile할 때 에러가 생기는 경우가 있음. 따라서 '/usr/local/include/'에 jpeg~.h 파일이 없으면 copy해 주어야 됨.

 

d. gd
http://www.boutell.com/gd/ 에서 최신버전을 다운받아 설치합니다.
#gzip -d gd-1.8.3.tar.gz
#tar -xvf gd-1.8.3.tar
#mv ./gd*/ /usr/local/gd/ 
#cd /usr/local/gd
#make
#make install
. MRTG 설치
http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/에서 최신버전을 다운받아 설치합니다.
#gzip -d mrtg-2.9.17.tar.gz | tar -xvf  (gzip과 tar를 한꺼번에 실행함.)
#mv ./mrtg*/ /usr/local/mrtg/
#cd /usr/local/mrtg
#./configure   --with-gd=/usr/local/gd       \
 --with-z=/usr/local/zlib        \
 --with-png=/usr/local/libpng  ( liberary들이 있는 위치를 지정해줌. ‘\’는 다음줄을 의미합니다.)
#make
MRTG가 이상없이 설치되었다면 bin 디렉토리 밑에 mrtg, cfgmaker와 같은 실행파일이 만들어지게 됩니다. bin 디렉토리 밑에 있는 실행 파일들은 꼭 이 위치가 아니더라도 실행하는 데는 지장이 없습니다.
. cfg파일 생성
이제 cfgmaker를 이용하여 mrtg.cfg파일(꼭 이름이 mrtg.cfg일 필요는 없습니다. cfg성격에 맞게, router.cfg, switch.cfg등의 이름을 주면 됩니다.)을 형식에 맞게 만들어서 실행하면 된다.
#cfgmaker --global 'WorkDir: /home/httpd/mrtg'  \
          --global 'Options[_]: bits,growright'     \
          --output /home/mrtg/cfg/mrtg.cfg        \
           community@router.abc.xyz
workdir은 결과파일이 만들어질 디렉토리를 말합니다. option은 여러가지가 있는데, 위의 bits를 하지 않으면 byte가 기본값이 되고, growright는 그래프를 오른쪽으로 순서대로 그리도록 합니다. 마지막 줄은 실제 모니터링 하려고 하는 네트워크 장비를 적어 줍니다. 여기서 community는 장비마다 SNMP값을 가지고 올 때 사용하는 고유값인데, 기본적으로 public을 사용합니다. router.abc.zyz는 네트워크 장비의 IP주소나 host명을 적으면 됩니다.
. MRTG실행 (2가지 방법이 가능)
  a. perl명령어와 같이 사용하는 방법
    #perl  /usr/local/mrtg/run/mrtg  /home/httpd/mrtg/mrtg.cfg
    이 방법은 perl이 제공하는 여러 가지 옵션을 같이 사용할 수 있는 장점이 있습니다.
  b. mrtg에 perl명령어를 포함 시키는 경우
    이 경우에는 mrtg 실행파일을 vi편집기 등을 이용해서 연다음 perl명령어가 있는 위치를 적어주고 mrtg가 실행가능하도록 되어 있으면 됩니다.
    #vi mrtg
  #! /usr/local/perl/perl   -> 이렇게 하시면 됩니다.
   # -*- mode: Perl -*-
   BEGIN{
   $main::OS = 'UNIX';
   #$main::OS = 'NT';
   #$main::OS = 'VMS';
              - 생략 -

   #/usr/local/mrtg/run/mrtg /home/httpd/mrtg/mrtg.cfg
위와같이 하면 결과 값이 /home/httpd/mrtg 디렉토리 밑에 만들어진다. 처음 실행하면 warning 메시지가 뜨는데, 이는 비교할 수 있는 log값이 없기 때문이므로 걱정을 안해도 됩니다. 위의 명령을 2,3번 정도 반복하면 더 이상 warning 메시지도 나타나지 않고 정상적인 트래픽을 볼 수 있을 것이다.
. 5분마다 mrtg 실행하기
위의 명령이 주기적으로 실행되게 하기 위해서는 cron과 crontab엔트리 이용하면 된다. 여기서 cron의 기능과 crontab엔트리의 구성에 대해서 설명하면 다음과 같다.
 

cron은 주기적 실행을 위해 프로그램을 스케줄하는 것을 허용하는 UNIX기능이다.  즉 매시간, 매일, 혹은 한달 간격으로 동일한 작업을 하기위해서 cron을 사용하면 된다.  cron명령어는 cron프로그램을 시작시킨다. 이것은 아무런 옵션도 가지지 않는다. 한번 시작되면 cron은 종료되지 않는다.  이것은 일반적으로 시스템 초기화 스크립트에 의해 자동적으로 시작된다.

#ps -ef | grep cron 명령어로 (linux는 -ef 대신 aux) 현재 cron 데몬이 실행중인 지 확인, 실행이 안되어 있는 경우 #whereis cron으로 찾아서 실행하면 된다.
#/usr/sbin/cron     ( Solaris의 경우)
#/usr/sbin/crond   (Linux의 경우)

cron은 cron데몬에 의해 서비스된다.  어떻게 실행되는지와 언제 실행되는지는 시스템의  cron 스케줄에 저장된 crontab 엔트리(entries)에 의해 cron에 명시된다.  어떠한 사용자라도 cron 스케줄에 엔트리를 추가할 수 있다.  crontab 엔트리는 일반적으로 /var/spool/cron/crontabs (또는 HP-UX를 위한 /usr/spool/cron/crontabs 그리고 Linux시스템의 /var/spool/cron)에 각 사용자를 위한 분리된 파일들에 저장된다. 사용자들의 crontab파일들은 그들의 사용자 이름 뒤에 명명된다. 예를 들어, root의 crontab파일은 /var/spool/cron/crontabs/root 이다. (linux의 경우 /var/spool/cron/root 를 만들면 된다.)

crontab 엔트리는 정규적 간격으로 명령을 실행시키기 위해 cron을 직접 접근한다. crontab 파일의 각 라인은 다음의 형식을 가진다. crontab파일은 'crontab -e'를 이용하면 되고, 만일 Super user로 login한 경우 직접 vi 에디터를 이용하여 crontab 파일을 편집할 수 있다.

[형식]  minutes   hours   day-of-month   month   weekday   command

[실제예] 0,5,10,15,20,25,30,35,40,45,50,55 * * * *  <mrtg-bin>/mrtg <path to mrtg-cfg>/mrtg.cfg ( 5분마다 mrtg실행. '*'는 항상을 의미)

저장하고 나온후 변경된 사항을 적용하기 위해서 crontab명령을 이용하면 된다.

#crontab root

참고로, mrtg를 실행하는 부분을 '<mrtg-bin>/mrtg <path to mrtg-cfg>/mrtg.cfg'  로하지 않고, '<mrtg-bin>/mrtg.sh'와 같이 shell script를 만들어서 실행하면 결과파일들이 WorkDir에 지정된 경로에 제대로 만들어 질 것입니다. 이렇게 하지 않으면 가끔 결과파일들이 업데이트가 되지 않고 그래프가 수평선이 되는 경우가 있습니다.

#cat mrtg.sh
#!/bin/sh
 /usr/local/mrtg/run/mrtg  /home/httpd/mrtg/mrtg.cfg
mrtg.sh의 속성은 실행가능으로 되어있어야 합니다 ( #chmod 755 mrtg.sh )
 
- 참고자료 : System Administration - O'REILLY -

     
    . Apache 서버 설치
    마지막으로 html 파일들을 웹브라우저를 통해서 보기위해서는 웹서버를 구동해야 되는데, unix 시스템에서 가장 많이 사용되어지는 Apache 서버에 대해 간단히 설명하였습니다. 보다 자세한 것은 Apache 홈페이지를 참조하시길 바랍니다.
    http://www.apache.org/dist/ 사이트에가셔서 최신 버전을 다운 받아서 설치하시면 됩니다.
    #gzip  -d apapche_1.3.20.tar.gz | tar -xvf
    #mv ./apache*/ /usr/local/apache/
    #cd /usr/local/apache
    #./configure
    #make
    #make install
     
    #/usr/local/apache/bin/apachectl start  (아파치를 실행합니다) 

댓글 없음:

댓글 쓰기