Computer/Network

[Linux] mrtg setting

알찬돌삐 2005. 5. 24. 09:01
MRTG(Multi Router Traffic Grap her)는 펄(Perl)과 C 언어로 구성돼 있고, 유닉스와
NT에서 동작한다. 일, 주, 월, 년 간으로 트래픽 발생량을 그래프화해 보여주므로
시간대별 흐름을 파악하는데 좋은 분석 도구가 될 수 있다.

대체적으로 MRTG는 네트워크 장비인터페이스별 트래픽 분석, CPU나 메모리 사용률
분석, 모뎀별 포트 사용률 분석 등에 사용되고 있다. 그러나 트래픽 모니터링 뿐만
아니라, SNMP 값(MIB 값)을 이용해 다양한 모니터링이 가능하고 외부 프로그램을
사용할 수 있기 때문에 다양한 변형이 가능하며, MRTG가 생성하는 로그 값을 가공해
새 DB의 구축에도 응용할 수도 있다.

MRTG의 주요 기능

기본적으로 네트워크 장비가 SNMP를 지원한다면 MRTG를 사용할 수 있다. MRTG의 가장
큰 장점이라면 결과치의 흐름을 알 수 있기 때문에 사업 계획을 세우는 자료로 활용할
수 있고, 로그값을 가공해 여러 용도로 이용할 수 있는 것.

로그값을 가공하는 데는 여러 방법이 있겠지만, 필자는 주로 펄 언어를 사용했다.
그러나 PHP를 이용하면 복잡한 CGI 프로그램이 없어도 쉽게 웹 상에서 활용할 수 있을
것이다. 주로 활용되는 분야는 다음과 같다.

·장비의 특정 인터페이스에 대한 트래픽 모니터링

(그림 1)은 MRTG를 이용한 라우터에 관한 일간 그래프다. KT-IX와 155Mbps로 연결된
라우터의 1개 포트에 대한 트래픽을 보여주고 있다.

·CPU 사용률 모니터링

(그림 2)는 주간 그래프로, 라우터의 CPU 사용률을 보여주고 있다. 이를 통해
입출력이 같음을 알 수 있다.

·RAS 장비에 대한 포트 사용률 모니터링

(그림 3)은 가입자들이 014XY로 접속한 포트 수를 보여준다. 이 값은 RAS 장비에서
현재 접속한 사용자 수를 읽어와서 펄 언어로 작성된 프로그램을 이용해 가공한 후,
MRTG를 이용한 그래프 작성법을 이용했다.

·특정 서버에 대한 세션 수 측정

(그림 4)는 일간 그래프로, 프록시 서버의 TCP 세션 수를 보여 준다. 사용된 OID는
‘1.3.6.1.2.1.6. 9.0’.

·MRTG의 로그 값 분석

:
966919200 1545 2958 1545 2958
966918900 1505 2927 1545 2958
966918600 236 1942 236 1942
:

MRTG 그래프는 이 로그 값을 기초로 해서 만들어진다. 형식은 unix time, current_in,
current_out, max _in, max_out로 나타난다. 유닉스 시간은 1970년 1월 1일을 0으로
해서 1초마다 카운트한 값이다. 로그 시간을 보면 5분마다 쌓이는 것을 볼 수 있다.
각 레코드가 공백으로 구분돼 있기 때문에, C언어나 펄 언어 등을 이용해서
current_in 값을 배열로 저장해, 매일 특정 시간대의 평균 트래픽 등을 계산하는데
이용할 수 있다.

유닉스에서 MRTG 구축하기

MRTG는 소스 코드로 제공되기 때문에 다운로드 받은 후 컴파일하는 작업이 필요하다.
따라서 컴파일하기 위해서는 C 컴파일러가 설치돼 있어야 한다. 그외 유닉스에서
MRTG를 수행하는 데 필요한 프로그램으로써는 Perl, gd, libpng, zlib가 있어야 한다.
그리고 웹으로 공유하기 위해서는 웹 서버가 필요하다.

① GCC 설치하기

웹(http://gcc.gnu.org)에서 다운로드 받아서 인스톨하면 된다.

② Perl 설치하기

웹에서(www.perl.com) v5.005 이상을 다운로드 받아서 설치한다. 이미 설치가 돼 있는
경우, 버전 확인은 ‘perl -v’로 알 수 있다.

gzip -d stable.tar.gzip (stable이라는 이름에서 최신의 안정된 버전 이라는 뜻으로
추정)
tar -xvf stable.tar
mv ./stable*/ /usr/local/perl/ (프로그램은 주로 /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)가
설치돼 있어야 컴파일이 가능하다.

a. zlib(그래픽 파일을 압축함)

웹(www.info-zip.org/pub/infozip/zlib)에서 최신 버전을 다운받아 설치한다.

gzip -d zlib.tar.gz
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 포맷으로 변형)

웹(www.libpng.org/pub/png)에서 다운로드 한다.

gzip -d libpng-1.0.8.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는
것 같음)
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로 복사함)
make test
make install

c. gd

웹(www.boutell.com/gd)에서 다운로드 한다.

gzip -d gd-1.8.3.tar.gz (stable 이라는 이름에서 최신의 안정된 버전을 말하는 것
같음)
tar -xvf gd-1.8.3.tar
mv ./gd*/ /usr/local/gd/ (program은 주로 /usr/local/ 디렉토리로 이동)
cd /usr/local/gd
make
make install

④ MRTG 설치하기

웹(http://ee-staff.ethz.ch/~oetiker/webtools/ mrtg/pub/beta)에서 최신 버전을
다운로드 한다.

gzip -d mrtg-2.9.0pre21.tar.gz | tar -xvf (gzip과 tar를 한꺼번에 실행함)
mv ./mrtg*/ /usr/local/mrtg/
cd /usr/local/mrtg
./configure --with-gd=/usr/local/src/gd
--with-z=/usr/local/src/zlib
--with-png=/usr/local/src/libpng(라이버러리들이 있는 위치를 지정해줌)
make

MRTG가 이상없이 설치됐다면 run 디렉토리 밑에 mrtg, cfgmaker와 같은 실행 파일이
만들어지게 된다. run 디렉토리 밑에 있는 실행 파일들은 꼭 이 위치가 아니더라도
실행하는 데는 지장이 없다.

⑤ cfg 파일 생성

이제 cfgmaker를 이용해 mrtg.cfg 파일(꼭 이름이 mrtg.cfg일 필요는 없다. cfg
성격에 맞게, router.cfg, switch.cfg 등의 이름을 만들어 주면 된다)을 형식에 맞게
만들어서 실행하면 된다.

cfgmaker --global ‘WorkDir: /home/httpd/mrtg’
--global ‘Options[_]: bits,growright’
--output /home/httpd/mrtg/mrtg.cfg
community at router.abc.xyz

WorkDir은 결과 파일이 만들어질 디렉토리를 말한다. 옵션은 여러 가지가 있는데,
비트를 선택하지 않으면 바이트가 기본값이 되고, growright는 그래프를 오른쪽에서
왼쪽 순서로 그리도록 한다.

Output은 mrtg.cfg 파일이 생성되는 경로를 지정하는 것이고, 마지막 줄은 실제
모니터링 하려고 하는 네트워크 장비를 적어 준다. 여기서 community는 장비마다 SNMP
값을 갖고 올 때 사용하는 고유값인데, 기본적으로 public을 사용한다.
router.abc.zyz는 네트워크 장비의 IP 주소나 호스트명을 적으면 된다.

⑥ MRTG 실행

/usr/local/mrtg/run/mrtg /home/httpd/mrtg/mrtg.cfg

이렇게 실행하면 그 결과 값이 /home/httpd/mrtg 디렉토리 밑에 만들어진다. 처음
실행하면 경고 메시지가 뜨는데, 이는 비교할 수 있는 로그값이 없기 때문이므로
걱정하지 않아도 된다. 위의 명령을 2, 3번 정도 반복하면 정상적인 트래픽을 볼 수
있다.

⑦ 5분마다 MRTG 실행하기

위의 명령이 주기적으로 실행되게 하기 위해서는 crontab을 이용하면 된다. 만일 매
5분마다 실행하기 위해서는 crontab 파일에 다음 한 줄을 추가하면 된다(crontab
파일은 시스템마다 다른데, 우리 환경의 경우 /var/spool/cron/crontabs/root 파일을
이용한다).

0,5,10,15,20,25,30,35,40,45,50,55 * * * *
[CODE]<mrtg-bin>/mrtg <path to mrtg-cfg>/mrtg.cfg[/CODE]

그리고 이를 적용하려면 ‘crontab root’ 하면 된다.

⑧ 아파치 서버 설치

마지막으로 html 파일들을 웹 브라우저를 통해 보기 위해서는 웹 서버를 구동해야
되는데, 유닉스 시스템에서 가장 많이 사용되어지는 아파치(Apache) 서버에 대해
간단히 설명하겠다(보다 자세한 것은 아파치 홈페이지를 참조하기 바란다). 먼저
웹(www.apache.org /dist)에서 최신 버전을 다운로드 받아 설치한다.

gzip -d apapche_1.3.12.tar.gz | tar -xvf
mv ./apache*/ /usr/local/apache/
cd /usr/local/apache
./configure
make
make install
conf/httpd.conf 파일 수정작업(기본적인 웹서버로 동작하기 위해 필요한 설정을 하는
곳)
/usr/local/apache/bin/apachectl start(아파치를 실행)

윈도우 NT에서 MRTG 설치하기

윈도우 NT에서의 MRTG 설치는 간단하다. 윈도우 NT용 펄(perl) 프로그램과 MRTG를
다운로드 받아서 설치하면 된다.

① 펄 설치하기

웹에서(www.ActiveState.com)에서 ActivePerl 616을 다운 받아 설치한다. 설치 후에는
경로가 제대로 설정됐는지 [제어판] → [시스템] → [환경변수]에서 확인.

② MRTG 설치하기

MRTG도 마찬가지로 MRTG
사이트(http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub/beta)에서 윈도우 NT용
최신버전을 다운로드 받아서 설치만 하면 된다(윈도우 NT용은 확장자가 .zip인 파일).
이전 버전에서는 MRTG 파일을 수정해야 됐지만, 이제는 그럴 필요가 없다. MRTG
설치가 끝나면 이제 실제 cfg 파일을 만든 후 MRTG가 제대로 동작하는지 확인하는
과정만 거치면 된다.

③ cfg 파일 생성하기

c:>perl cfgmaker public@10.10.10.1 --global “WorkDir: c:” -output mrtg.cfg

(IP주소가 10.10.10.1인 라우터인 경우 인터페이스별로 고유의 포트 번호를 가진 cfg
파일을 만들게 된다)

④ MRTG 실행하기

c:>perl mrtg mrtg.cfg

이렇게 실행하면 유닉스도 마찬가지지만 에러 메시지가 나타나는데, 2번 더 반복하면
더 이상 에러 메시지없이 정상 그래프를 출력하게 된다. 유닉스와 마찬가지로 5분마다
MRTG를 실행하기 위해서는 윈도우 NT의 AT 스케줄러를 이용하거나 MRTG 스태틱
업데이터(Static Updater) 서비스를 사용할 수도 있지만, 간단히 mrtg. cfg 파일에
‘RunAsDamon: yes’를 추가하면 된다.

전용회선 가입자별로 MRTG 화면 보여주기

ISP나 그외 전용회선을 구축해 회선 임대를 하는 공공기관이나 학교 등에서는 해당
가입자별로 ID와 패스워드를 부여해 접속한 ID별로 MRTG 그래프를 볼 수 있도록 할 수
있다. 이때 이용되는 것은 펄 언어와 아파치 서버(물론 GCI를 처리하는 다른 언어도
사용 가능).

한 ISP와 전용회선으로 연결된 랜드라는 회사에 ID와 패스워드를 부여해 이 ID로 자기
회사의 전용회선 트래픽을 볼 수 있도록 ID 입력창→ 인증창→ MRTG 화면의 순서를
거치면 된다.

① ID와 패스워드 정하기

랜드 - ID: land, 패스워드: ld1234

② cfg 파일 생성

mrtg.cfg파일에 land 라는 이름으로 등록하자. 여기서 WorkDir은 /home/httpd/MRTG/
설정.

③ mrtg 실행

‘mrtg mrtg.cfg’를 실행하면, /home/httpd/MRTG/밑에 land-day.png, land-week.png,
land-mon th.png, land-year.png, land.html 파일이 생성된다.

④ ID별로 디렉토리 생성해 작업하기

ID와 같은 이름으로 home/httpd/land 라는 디렉토리를 만들자.

home/httpd/land 디렉토리에 .htpasswd파일과 .htaccess파일을 생성해 아래와 같이
수정한다. 이 파일의 역할은 웹 상에서 이 디렉토리로 접근하려면 ID와 패스워드를
물어보는 역할을 한다.

mrtg# cat .htaccess
AuthName MRTG (이 값은 시스템마다 다름)
AuthType Basic
AuthUserFile /home/httpd/land/.htpasswd ( 패스워드가 저장된 파일 지정)
AuthGroupFile /dev/null
[CODE]<Limit GET POST> require valid-user </Limit>[/CODE]
mrtg# cat .htpasswd
land:z5EPIRJHqBQV (암호화된 패스워드)

⑤ Symbolic Link 설정 단계

현재 MRTG 결과 파일들은 ‘/home/httpd/MRTG/’에 저장되어 있고, 외부에서 ID별로
접속할 때는 ‘/home/httpd/land/로 연결되도록 구성하고자 한다. 이 경우 실제
파일들이 있는 위치를 ‘ln’명령을 사용하여 symbolic link를 시킬 수 있다.

mrtg# pwd
/home/httpd/land
mrtg# ln -s /home/httpd/MRTG/land-day.png
mrtg# ln -s /home/httpd/MRTG/land-week.png
mrtg# ln -s /home/httpd/MRTG/land-month.png
mrtg# ln -s /home/httpd/MRTG/land-year.png
mrtg# ln -s /home/httpd/MRTG/land.html

⑥ 웹 상에서 입력한 ID를 구분하는 프로그램

마지막으로 웹 상에서 ID(land)를 입력하고 ‘/home /httpd/land/land.html’ 창이
뜨도록 하면, 이 디렉토리에는 ‘.htaccess’파일이 있기 때문에 인증창이 뜨게 된다.
다시 말해 웹페이지에서 ID를 입력받도록 페이지를 만들고, CGI를 이용해 ID별로 해당
MRTG 그래프가 뜨도록 하면 된다. 필자는 CGI 프로그램을 펄을 이용해 작성해 봤다.

[ 웹페이지상에서 ID를 입력 받는 부분]

[CODE]<form method=”GET” action=”http://www.mrtg.co.kr/cgi-bin/id.pl”> <b> ID: </b><INPUT type=”text” name=”fname”>[/CODE]

[펄 프로그램 (id.pl)]

웹페이지에서 넘어온 ID를 이름(fname)과 값(id)으로 분리하는 작업

[CODE] $qs = $ENV{‘QUERY_STRING’}; # ‘fname&land’ 와 같은 형식으로 넘어오기 때문에, ‘&’를 기준으로 분리해 저장 @qs = split(/&/, $qs); foreach $i (0 .. $#qs) { # convert plus chars to spaces $qs[$i] =~ s/+/ /g; # convert the hx characters $qs[$i] =~ s/%(..)/pack(“c”, hex($1))/ge; # split each one into name and value ($name, $value) = split(/=/, $qs[$i],2); # $value변수에 ‘land’가 할당된다. # create the associative element $qs{$name} = $value; } # 실제 html 형식으로 출력하는 부분. print “Content-type: text/html”, “”; print “<HTML>”, “”; print “<HEAD><TITLE>$value MRTG 트래픽</TITLE></HEAD>”, “”; # mrtg.co.kr이라는 도메인을 운영할 경우 아래와 같이 사용 가능 print “\u8221”http://www.mrtg.co.kr/$value/$value.html\u8221”>”, “”; print “</HTML>”, “”; [/CODE]
이상으로 MRTG에 대한 기본적인 내용과 설치 방법, 그리고 몇 가지 응용 예를
살펴봤다. 이외에도 MRTG를 활용해 수 있는 일이 많다.


--------------------------------------------------------------------------------

MRTG 지원 가능한 플랫폼

리눅스 1.2.x, 2.0.x, 2.2.x
SunOS 4.1.3
솔라리스 2.4, 2.5, 2.5.1, 2.6, 7
AIX 4.1.4, 4.2.0.0
HP-UX 9,10,11
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
OpenBSD 2.5, 2.6
디지탈 유닉스 4.0
SCO 오픈 서버 5.0
Reliant UNIX
NeXTStep 3.3
OpenStep 4.2
윈도우 NT 3.51, 4.0, 2000

--------------------------------------------------------------------------------

MRTG 이용해 라우터 포트와 CPU 사용률 체크하기

아래의 cfg 파일은 시스코 카탈리스트 5500 장비에서 MRTG를 이용해 모니터링할 수
있는 방법을 설명한 것으로써 3번과 5번 포트 사용률과 CPU 사용률을 보여주고 있다.

WorkDir: D: (윈도우 NT인 경우),
WorkDir: /home/httpd/mrtg (유닉스인 경우)

Interval: 5 (5분마다 반복)
RunAsDamon: yes (운영체제로 하여금 매 5분마다 mrtg를 실행하도록 함)

3번 포트의 경우 기본적인 키워드만 사용한 경우로써, 10Mbps 이더넷 포트에 대한
트래픽을 보여준다.

MaxBytes는 125×대역폭(bit)를 의미하므로, 10Mbps인 경우 1250000가 된다.
[CODE] Target[cat5500_3]: 3:public@10.10.10.1 MaxBytes[cat5500_3]: 1250000 Title[cat5500_3]: LC-Bridge (sample-device): ether0 PageTop[cat5500_3]: <H1>Traffic Analysis for ether0</H1> <TABLE> <TR><TD>System:</TD><TD>LC-Bridge inAndover</TD></TR> <TR><TD>Maintainer:</TD><TD>Administrator</TD></TR> <TR><TD>Interface:</TD><TD>ether0(3)</TD></TR> <TR><TD>IP:</TD><TD>sample-device(10.10.10.1)</TD></TR> <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s (ethernetCsmacd)</TD></TR> </TABLE> [/CODE]
5번 포트의 경우 추가의 키워드를 적용했고, 웹 페이지에 나타나는 부분도 수정을
했음. 키워드에 관해서는 ‘doc/co nfig.txt’를 참조.

[CODE] Target[cat5500_5]: 5:public@10.10.10.1 MaxBytes[cat5500_5]: 1250000 Title[cat5500_5]: Catalyst 5500 Port 5번 PageTop[cat5500_5]: <H1> Catalyst 5500 Port 5번 트래픽 </H1> <TABLE> <TR><TD>Interface:</TD><TD>Ethernet 1/5</TD></TR> <TR><TD>IP:</TD><TD>10.10.1.1</TD></TR> <TR><TD>Max Speed:</TD> <TD>10.0 Mbit/s (ethernetCsmacd)</TD></TR> </TABLE> [/CODE]
### XScale YScale------------
XScale[cat5500_5]: 1.5
YScale[cat5500_5]: 1.5
WithPeak[cat5500_5]: ymw
Unscaled[cat5500_5]: ymwd
Options[cat5500_5]: growright, bits
Colours[cat5500_5]: GREEN#00eb0c,BLUE#1000ff,DARK GREEN#006600,VIOLET#ff00ff
YLegend[cat5500_5]: Bits per Second
ShortLegend[cat5500_5]: b/s
Legend1[cat5500_5]: Incoming Traffic in Bits per Second
Legend2[cat5500_5]: Outgoing Traffic in Bits per Second
Legend3[cat5500_5]: Maximal 5 Minute Incoming Traffic
Legend4[cat5500_5]: Maximal 5 Minute Outgoing Traffic
LegendI[cat5500_5]: In:
LegendO[cat5500_5]: Out:

카탈리스트 5500의 CPU 사용률을 보기 위해서는 포트 번호 대신 특정 OID(Object ID =
MIB값)가 필요하다. mrtg는 기본적으로 인력과 출력의 2개 값이 필요하므로, CPU
사용률과 같이 값이 하나인 경우에는 ‘&’를 기준으로 같은 OID를 적어 주면
된다.

Target[cat5500_cpu]:1.3.6.1.4.1.9.2.1.58.0&1.3.6.1.4.1.9.2.1.58.0:public@10.10.10.1
RouterUptime[cat5500_cpu]: public@10.10.10.1
MaxBytes[cat5500_cpu]: 100
Title[cat5500_cpu]: CPU LOAD
PageTop[cat5500_cpu]:

CPU Load %


Unscaled[cat5500_cpu]: ymwd
ShortLegend[cat5500_cpu]: %
XSize[cat5500_cpu]: 380
YSize[cat5500_cpu]: 100
YLegend[cat5500_cpu]: CPU Utilization
Legend1[cat5500_cpu]: CPU Utilization in % (Load)
Legend2[cat5500_cpu]: CPU Utilization in % (Load)
Legend3[cat5500_cpu]:
Legend4[cat5500_cpu]:
LegendI[cat5500_cpu]:
LegendO[cat5500_cpu]: Usage
Options[cat5500_cpu]: gauge

출처 : http://www.linuxc.net.