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

rrdtool + rrdexec + snmp를 이용한 네트워크 모니터링

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

rrdtool + rrdexec + snmp를 이용한 네트워크 모니터링

--------------------------------------------------------------------------------------
- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2006-06-26
- 사이트 : http://linux.tini4u.net/
- 원제목 : rrdtool + rrdexec + snmp를 이용한 네트워크 모니터링
- 환 경 : CentOS 4.3
- 키워드 : rrdtool, rrdexec, snmp
--------------------------------------------------------------------------------------

RRD는 Round Robin Database의 약자로써 MRTG와 비슷한 Logging&Graping 도구 입니다.
시간의 흐름에 따라 변하는 데이터를 DB화 시켜서 남기고, DB화된 정보를 그래픽 화면으로
출력해서 시작적으로 데이터의 변화를 쉽게 알아볼 수 있도록 도와주는 프로그램이죠.

어떻게 보면 MRTG와 비슷하다고 볼 수 있습니다만, RRD는 MRTG에서 지원하지 못했던
여러가지 기능등을 추가 확장한것이 다릅니다.
물론 RRD 개발사의 소개글을 보면 RRD는 MRTG에서 아이디어를 얻었다고 쓰여 있습니다.

확장된 기능중 일부인 네트워크 트래픽 모니터링 하는것을 예로 들게 되면,
관리하고자 하는 요소가 In/Out bps와 In/Out pps라고 할 경우 기존의 MRTG에서는
bps와 pps를 위한 별도의 그래프가 각각 존재해야만 했습니다.
그러나 RRD에서는 하나의 그래프에 bps와 pps를 모두 관리할 수 있기 때문에
bps와 pps의 차이점을 함께 비교함으로써 유입되거나 유출되는 패킷의 상태를 확인하기 좋습니다.
또한 임계치를 정해두고 그 임계치가 초과하게 되었을 경우 다른색으로 표현할 수도 있습니다.

여기서는 RRD의 설치 및 이용, 그리고 snmp와 연동하여 사용하는 방법까지만 설명합니다.
설치는 RPM으로 설치하겠으며 자세한 내용은 다루지 않도록 하겠습니다.
RRD를 모두 설명한다는 것은 너무 방대한 일이므로 추후에 자세한 설명을 올리도록 하겠습니다.

설치시 필요한 모든 패키지의 최신 RPM은 알려드린 주소로 가시면 얻을 수 있으며,
편의를 위해 제 개인 패키지 미러에서도 제공을 해드리고 있습니다. (http://pkg.tini4u.net)

※ RRD Server Setting (RRD DB를 생성하고, 그래프로 출력할 서버)
1. RRD Tool 설치 (최신 RPM 다운로드 : http://rpm.pbone.net/)
[root@localhost]# wget http://pkg.tini4u.net/network/rrdtool-1.0.50-1.2.el4.rf.i386.rpm
[root@localhost]#wget http://pkg.tini4u.net/network/rrdtool-devel-1.0.50-1.2.el4.rf.i386.rpm
[root@localhost]# rpm -Uvh rrdtool-*.i386.rpm


2. Net-SNMP 설치
필자는 snmp와 연동해서 RRD를 운영할 것이므로 Net-SNMP를 설치하도록 하겠습니다.
Net-SNMP는 기존의 UCD-SNMP가 버전이 올라가면서 변경된 이름 입니다.
Net-SNMP는 yum mirror에서 지원을 하므로 추후 업데이트를 위해 yum으로 설치 합니다.
※ beecrypt-devel, elfutils-devel, elfutils-libelf-devel 등 의존성 걸리는 패키지가 있습니다.
  의존성이 걸린 패키지들은 같이 설치되므로 신경쓰지 않으셔도 됩니다.
만약 OS의 버전이 낮아 UCD-SNMP를 지원하는 시스템이라면 필자의 개인패키지 미러에 가시면
Net-SNMP 최신버전을 업로드 해놨으니 UCD-SNMP를 삭제하시고 Net-SNMP를 설치하시면 됩니다.
[root@localhost]# yum -y install net-snmp net-snmp-utils net-snmp-devel


3. olibc 설치 (최신 RPM 다운로드 : ftp://mirror.oops.org/)
필자는 안녕리눅스 제작자이신 김정균님의 Front-End인 rrdexec를 사용할 것이므로,
rrdexec에서 요구하는 olibc를 설치하도록 합니다.
물론, rrdexec를 사용하지 않고 다른 프로그램을 사용하실 분들은 설치하지 않아도 됩니다.
[root@localhost]# wget http://pkg.tini4u.net/network/olibc-0.1.2-1.i386.rpm
[root@localhost]# wget http://pkg.tini4u.net/network/olibc-devel-0.1.2-1.i386.rpm
[root@localhost]# rpm -Uvh olibc-*.i386.rpm


4. dmalloc 설치
세번째 단계에서 필자는 rrdexec를 사용한다고 언급한 적이 있습니다.
따라서 rrdexec에서 요구하는 패키지인 dmalloc와 gettext를 설치하도록 합니다.
dmalloc는 yum mirror에서 지원을 하므로 추후 업데이트를 위해 yum으로 설치 하겠습니다.
gettext는 CentOS 4.x라면 기본적으로 설치되어 있지만 없는 경우에는 yum으로 설치하시기 바랍니다.
[root@localhost]# yum -y install dmalloc
[root@localhost]# yum -y install gettext


5. rrdexec 설치 (최신 RPM 다운로드 : ftp://mirror.oops.org/)
이제 김정균님의 Front-End인 rrdexec를 설치하도록 합니다.
여기서 주의할 사항은 김정균님의 미러에서 직접 패키지를 가져오게 되면 rpm 파일 경로가 틀려서
중간에 에러가 나게 되니 이런 경우엔 src.rpm을 받아서 spec파일을 수정해주거나
아니면 필자가 제공하는 미러에서 다운받아 설치를 하시면 됩니다.
☞ rrdexec.spec 파일의 46 라인을 cp -af /usr/lib/librrd.a ./ 로 수정해주시면 됩니다.
물론 필자는 필자의 미러에 있는 수정된 rpm을 다운받아 설치하도록 하겠습니다.
[root@localhost]# wget http://pkg.tini4u.net/network/rrdexec-2.2.2-1.i386.rpm
[root@localhost]# wget http://pkg.tini4u.net/network/rrdexec-doc-2.2.2-1.i386.rpm
[root@localhost]# rpm -Uvh rrdexec-*.i386.rpm


6. snmp 설정파일 수정
필자는 RRD 데이터를 Net-SNMP를 통해서 가져올 것이므로 snmp가 정상적으로 작동할 수 있도록
snmpd.conf 파일을 수정해 주도록 합니다.
이 파일에 대해서는 추후에 자세한 설명을 올리도록 하겠습니다.
필자의 개인 패키지 미러에 가시게 되면 Net-SNMP가 정상작동을 할 수 있도록 기본 세팅이
설정되어 있는 파일이 있으므로 IP만 변경하시고 그대로 사용하시면 됩니다.
[root@localhost]# wget http://pkg.tini4u.net/network/snmpd.tar.gz
[root@localhost]# mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
[root@localhost]# tar xfpz snmpd.tar.gz -C /etc/snmp/
[root@localhost]# vi /etc/snmp/snmpd.conf
9 라인에서 127.0.0.1을 SNMP 접근을 허용할 서버의 IP로 변경해줍니다. ex) 100.100.100.100
[root@localhost]# service snmpd start
Starting snmpd:                    [ OK ]


7. snmp 작동 여부 확인
이제 모든 설치가 끝났으므로 snmp가 정상적으로 작동하는지 확인을 해야 됩니다.
확인 방법은 snmpwalk -v1 -c 커뮤니티네임 IP 입니다.
(필자는 네트워크 트래픽에 대해서만 모니터링 할 것이므로 ifEntry 필드의 Octets값만 확인합니다.)
[root@localhost]# snmpwalk -v1 -c LTN-Remote 100.100.100.100 ifEntry | grep Octets
IF-MIB::ifInOctets.1 = Counter32: 976510
IF-MIB::ifInOctets.2 = Counter32: 5696222
IF-MIB::ifInOctets.3 = Counter32: 0
IF-MIB::ifOutOctets.1 = Counter32: 978376
IF-MIB::ifOutOctets.2 = Counter32: 820757
IF-MIB::ifOutOctets.3 = Counter32: 0


8. rrd 설정파일 수정
이제 SNMP에서 받아온 결과값을 DB로 저장하고, 그래프로 출력하기 위해 설정파일을 세팅합니다.
rrd.conf 파일의 설정은 반드시 SERVICE: 지시자로 시작해서 END: 지시자로 끝나야 됩니다.
위에서 필자는 김정균님의 Front-End인 rrdexec를 설치했기 때문에 rrd.conf파일이 존재하므로
이 파일을 그대로 사용하든지 아니면 새로 설정파일을 생성하시기 바랍니다.
필자는 네트워크 트래픽 모니터링만을 할 것이므로 설정파일을 새로 만들도록 하겠습니다.
[root@localhost]# mv /etc/rrdexec/rrd.conf /etc/rrdexec/rrd.conf.bak
[root@localhost]# vi /etc/rrdexec/rrd.conf
SERVICE: Ethernet
TITLE: Network Transfer of Linux.Tini4u.Net
IMGTITLE: bit per second
IMGTYPE: png
GRAPH1: rx,AREA,#737373
GRAPH2: tx,LINE3,#CDCDCD
MIN: 0
MAX: 100000000
LGRAPH: 0
TYPE: COUNTER
SIZEOPT: 1000
DATA1: SNMP,LTN-Remote@100.100.100.100:interfaces.ifTable.ifEntry.ifInOctets.2
DATA2: SNMP,LTN-Remote@100.100.100.100:interfaces.ifTable.ifEntry.ifOutOctets.2
DTYPE: *8
PATH: /home/rrd/html
ARRAY: none
COMMENT: (c) 2006 LTN(Linux.Tini4u.Net), by Tini <http://Linux.Tini4u.Net/>\\r
END: Ethernet

만약 여러대의 서버를 모니터링 할 것이라면, SERVICE: 지시자의 내용을 다르게 해야
중복되지 않은 데이터를 얻을 수 있으니 주의하시기 바랍니다.
또한 DATA1,2 지시자에서의 IP는 SNMP 데이터를 가져올 서버의 IP를 적어주셔야 되며,
끝부분의 ifInOctets과 ifOutOctets의 String 넘버는 OS마다 다르므로 snmpwalk를 통해 출력된
이더넷카드 넘버를 적어줘야 됩니다.
만약 어떤것이 이더넷 데이터인지 모르겠으면 아래 명령어로 확인이 가능합니다.
[root@localhost]# snmpwalk -v1 -c LTN-Remote 100.100.100.100 ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: sit0


9. rrd 작동 여부 확인
이제 rrd에서 SNMP의 데이터를 정상적으로 DB로 저장하는지 확인을 해야 됩니다.
아래 명령어를 통해 기본적인 html 파일 및 DB 저장이 가능합니다.
[root@localhost]# rrdexec log
* Ethernet : /home/rrd/html [ N:5696474:821757 ] => [ CODE: 0 ]


10. crontab 설정
RRD 데이터는 지정된 시간동안 꾸준히 저장되어야 하므로 crontab에 등록해서
지정된 시간마다 자동적으로 실행되도록 설정을 해줍니다.
보통 RRD는 5분에 한번씩 데이터를 저장시키는것이 좋습니다. (물론 더 짧게도 가능합니다.)
[root@localhost]# crontab -e
*/5 * * * * su - root /usr/bin/rrdexec log

이제 RRD Server Setting이 모두 끝났습니다.
웹에 접속해서 제대로 그래프가 출력되는지 확인하시면 됩니다.

※ RRD Client Setting (RRD 데이터만 넘겨줄 서버)
1. Net-SNMP 설치
RRD 데이터를 넘겨주기만 할 서버는 단순히 SNMP를 통해 데이터만 넘겨주면 되므로
Net-SNMP 패키지만 설치가 되어 있으면 됩니다.
필자가 위에서도 말했지만 OS의 버전이 낮아 UCD-SNMP를 지원하는 시스템이라면
UCD-SNMP를 삭제하고 필자의 개인패키지 미러에서 Net-SNMP를 다운받아 설치하시길 권장합니다.
[root@localhost]# yum -y install net-snmp


2. snmp 설정파일 수정
RRD 서버에서 SNMP를 통해 데이터를 가져가야 되므로 snmp 설정을 해줍니다.
설정 내용은 RRD 서버와 다른것이 없습니다.
[root@localhost]# wget http://pkg.tini4u.net/network/snmpd.tar.gz
[root@localhost]# mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
[root@localhost]# tar xfpz snmpd.tar.gz -C /etc/snmp/
[root@localhost]# vi /etc/snmp/snmpd.conf
9 라인에서 127.0.0.1을 SNMP 접근을 허용할 서버의 IP로 변경해줍니다. ex) 100.100.100.100
[root@localhost]# service snmpd start
Starting snmpd:                    [ OK ]

이제 RRD Client Setting이 모두 끝났습니다.
RRD 서버에서 Client 정보를 제대로 가져오는지 확인을 하시면 됩니다.
[root@localhost]# snmpwalk -v1 -c LTN-Remote 100.100.100.101 ifEntry | grep Octets
IF-MIB::ifInOctets.1 = Counter32: 1010722
IF-MIB::ifInOctets.2 = Counter32: 5712319
IF-MIB::ifInOctets.3 = Counter32: 0
IF-MIB::ifOutOctets.1 = Counter32: 1012588
IF-MIB::ifOutOctets.2 = Counter32: 825481
IF-MIB::ifOutOctets.3 = Counter32: 0

만약 snmpwalk에서 Timeout: No Response from 100.100.100.101 이라고 나온다면
SNMP가 정상적으로 작동하지 않는것이니 다시한번 잘 살펴보기 바랍니다.
728x90

댓글