Server Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> Server Administration for Redhat Linux
[목차]
제7장 SNMP

    3. SNMP & MRTG 설치하기

1. net-snmp 소스 설치


참고사이트 :

http://www.net-snmp.org/wiki/index.php/Tutorials


아래의 실습은 인터넷의 여러 사이트를 참고하였고, LeeLAB에서 실습에 맞게 재편집하였다.


가. SNMP 설치하기


기존에 설치된 rpm 패키지를 삭제한다.



아래 사이트에서 다운 받는다.

http://sourceforge.net/projects/net-snmp/


압축을 풀고, 아래와 같이 설치한다.


[root@www snmp]# tar xvfz net-snmp-5.7.1.tar.gz


[root@www snmp]# cd net-snmp-5.7.1


[root@www net-snmp-5.7.1]# ./configure --prefix=/web/snmp


생략


         ************** Configuration Section **************


        You are about to be prompted with a series of questions.  Answer

them carefully, as they determine how the SNMP agent and related

applications are to function.


        After the configure script finishes, you can browse the newly

created net-snmp-config.h file for further - less important - parameters to

modify.  Be careful if you re-run configure though, since net-snmp-config.h

will be overwritten.


-Press return to continue-

[엔터]


생략


*** Default SNMP Version:


생략


Default version of SNMP to use (3): 2 [엔터]

SNMP 버전을 지정한다. [1~3]


생략


*** System Contact Information:


생략


System Contact Information (@@no.where): leejinkwan@kunsan.ac.kr[엔터]

관리자 email주소를 지정한다.


생략


*** System Location:

생략


System Location (Unknown): korea[엔터]

주소를 지정한다.


생략


*** Logfile location:


생략


Location to write logfile (/var/log/snmpd.log):[엔터]

로그파일의 위치를 지정한다.


생략


*** snmpd persistent storage location:


생략


Location to write persistent information (/var/net-snmp):[엔터]


생략


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

            Net-SNMP configuration summary:

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


  SNMP Versions Supported:    1 2c 3

  Building for:               linux

  Net-SNMP Version:           5.7.1

  Network transport support:  Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase

  SNMPv3 Security Modules:     usm

  Agent MIB code:             default_modules =>  snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host

  MYSQL Trap Logging:         unavailable

  Embedded Perl support:      disabled

  SNMP Perl modules:          building -- not embeddable

  SNMP Python modules:        disabled

  Crypto support from:        crypto

  Authentication support:     MD5 SHA1

  Encryption support:         DES AES

  Local DNSSEC validation:    disabled


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


[root@www net-snmp-5.7.1]#



[root@www net-snmp-5.7.1]# make && make install



[root@www net-snmp-5.7.1]# cp EXAMPLE.conf /web/snmp/share/snmp/snmpd.conf


환경설정 파일은 snmpd.conf를 설치디렉토리에 EXAMPLE.conf를 복사하여 생성한다.


또는 아래와 같이 새로 snmpd.conf파일을 만들고, 아래 내용으로 복사하여 붙여넣기 한다.

[root@www net-snmp-5.7.1]# cat /dev/null > /web/snmp/share/snmp/snmpd.conf

[root@www net-snmp-5.7.1]# vi /web/snmp/share/snmp/snmpd.conf


com2sec         local           127.0.0.1       public

com2sec         mynetwork       0.0.0.0/0       public

# public 는 community명으로 기본 설정은 public이며 임의의 단어로 설정이 가능하다.


group MyRWGroup v1      local

group MyRWGroup v2c     local

group MyRWGroup usm     local

group MyROGroup v1      mynetwork

group MyROGroup v2c     mynetwork

group MyROGroup usm     mynetwork

view all        included        .1

#view all        included        .1      80

access MyROGroup ""     any     noauth  exact   all     none    none

access MyRWGroup ""     any     noauth  exact   all     all     none


# load ave # Load Average를 체크하기 위해 다음과 같이 설정합니다.

load


# disk used # 하드디스크의 사용량을 체크하기 위해 다음과 같이 설정합니다.

disk /

disk /var

disk /home


# --------------


기존에 실행중인 snmpd 데몬을 종료하기 위해 아래와 같이 한다.

[root@www snmp]# pkill snmpd


다음과 같이 다시 시작하자.

[root@www snmp]# /web/snmp/sbin/snmpd



나. SNMP AGENT 실행


설치가 끝나면 agent와 manager프로그램이 모두 설치되어 있을 것이다. 그리고 여기에 더불어 개발자를 위한 각종 라이브러리와 헤더파일들도 설치된다. 이 라이브러리와 헤더파일들은 개발할때 필요하다.


net-snmp는 agent 프로그램으로 snmpd를 제공한다. agent환경을 제대로 만들려면 복잡해보이는 설정파일을 만들어줘야 하지만 이것은 각자의 몫이다. net-snmp프로젝트 홈페이지에서 제공하는 메뉴얼을 참고하기 바란다. 어쨋든 현재로써는 단지 snmpd를 띄우는 정도로 snmp agent환경을 만들수 있다.


[root@www root]# /web/snmp/sbin/snmpd

                  

이것으로 snmp를 테스트할 최소한의 agent환경이 구축되었다.



다. SNMP MANAGER 테스트


동기적인 데이타 요청 - snmp get, get next


GET과 GET NEXT는 동기적인 정보요청을 위해서 사용한다. manager에서 agent에 대해서 정보를 요청했을때 해당 정보를 agent에서 보내주는 방식이다. GET은 단일정보요청을 위해서 사용하며, GET NEXT는 해당 계층의 하위에 있는 모든 정보의 요청을 위해서 사용된다.


net-snmp는 이러한 정보요청을 위한 manager프로그램으로 snmpget과 snmpnext, snmpwalk를 제공한다.


snmpget은 이름에서 알 수 있듯이 agent로부터 특정한 정보를 얻어내기 위해서 사용한다. 정보를 얻기 위해 필요한 기본정보는 agent가 설치되어 있는 서버의 주소(혹은 이름) 와 커뮤니티(권한을 위한)이름 그리고 얻기 원하는 정보의 OID번호 혹은 MIB의 계층이름이다. 예를들어서 localhost로부터 public권한을 가지고 sysDescr(시스템 부가정보)정보를 얻어오고 싶다면 아래와 같이 하면 된다.

 

[root@www ~]# /web/snmp/bin/snmpget localhost -c public system.sysDescr.0

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.ikunsan.co.kr 2.6.32.26-175.fc12.i686.PAE #1 SMP Wed Dec 1 21:45:50 UTC 2010 i686


혹은 MIB이름대신에 OID번호를 사용해도 된다. 

[root@www snmp]# /web/snmp/bin/snmpget -c public localhost 1.3.6.1.2.1.1.1.0

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.ikunsan.co.kr 2.6.32.26-175.fc12.i686.PAE #1 SMP Wed Dec 1 21:45:50 UTC 2010 i686


[root@www snmp]# /web/snmp/bin/snmpget -c public localhost system.sysUpTime.0 system.sysContact.0

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (6209) 0:01:02.09

SNMPv2-MIB::sysContact.0 = STRING: leejinkwan@kunsan.ac.kr

 


SNMPD 설치가 확인됐으면, MRTG 설치로 바로 넘어가도 된다. 아래는 SNMPD를 조금 더 실습하고자 한다면, 계속 진행한다.

http://csl.changwon.ac.kr/cyberclasses/notes/mib2/


http://www.simpleweb.org/ietf/mibs/modules/html/?category=IETF&module=SNMPv2-MIB


기타 MIB를 알기 위해 위의 사이트를 확인하자.



snmpwalk는 해당 MIB의 하위계층에 있는 모든 정보를 요청한다. 예를들어 system MIB의 하위 계층에 있는 모든 OID에 대한 정보를 요청하길 원한다면 아래와 같이 하면된다. 이게 가능한 이유는 snmpwalk가 정보를 요청하기 위해서 snmp메시지를 만들때 PDU타입을 GET NEXT를 사용하기 때문이다.


[root@www snmp]# /web/snmp/bin/snmpwalk localhost -c public system

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.ikunsan.co.kr 2.6.32.26-175.fc12.i686.PAE #1 SMP Wed Dec 1 21:45:50 UTC 2010 i686

SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (94948) 0:15:49.48

SNMPv2-MIB::sysContact.0 = STRING: leejinkwan@kunsan.ac.kr

SNMPv2-MIB::sysName.0 = STRING: www.ikunsan.co.kr

SNMPv2-MIB::sysLocation.0 = STRING: korea

SNMPv2-MIB::sysORLastChange.0 = Timeticks: (8) 0:00:00.08

SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDMIBObjects.3.1.1

SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance

SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB

SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB

SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip

SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB

SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup

SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance

SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB

SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.

SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.

SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.

SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities

SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations

SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations

SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations

SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.

SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.

SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.

SNMPv2-MIB::sysORUpTime.1 = Timeticks: (6) 0:00:00.06

SNMPv2-MIB::sysORUpTime.2 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.3 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.4 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.5 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.6 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.7 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.8 = Timeticks: (7) 0:00:00.07

SNMPv2-MIB::sysORUpTime.9 = Timeticks: (8) 0:00:00.08

SNMPv2-MIB::sysORUpTime.10 = Timeticks: (8) 0:00:00.08


system하위의 모든 OID에 대한 정보를 얻어오고 있음을 확인할수 있다.

또한 다른 PC의 정보를 요청할 경우는 해당 PC의 port 161 UDP 번을 열어 주어야 한다


snmpgetnext는 snmpwalk의 기능 축소판정도로 볼수 있을것이다. 즉 MIB계층구조에서 현재 요청한 OID의 다음 OID의 정보를 가져온다. 예를들어 system.sysDescr.0에 대한 정보를 요청하면 다음 OID인 system.sysObjectID.0의 정보를 요청하게 될것이다. 이게 가능한 이유는 snmpwalk와 마찬가지로 내부적으로 GET NEXT를 이용하고 있기 때문이다. snmpwalk가 더이상 얻을수 없을때까지 OID를 요청하는것과 달리 snmpgetnext 바로다음의 OID만을 요청한다.


 

[root@www snmp]# /web/snmp/bin/snmpgetnext localhost -c public system system.sysDescr.0

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.ikunsan.co.kr 2.6.32.26-175.fc12.i686.PAE #1 SMP Wed Dec 1 21:45:50 UTC 2010 i686

SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10

[root@www snmp]#




라. 비동기적인 데이타 요청 - snmptrap


기본적으로 GET, GET NEXT를 통한 데이터 요청은 일정한 polling시간을 가지고 manager에서 agent로 필요한 정보를 요청하는 방식이다. 그러나 이걸 이용해서는 비동기적으로 발생하는 정보를 수집할 수가 없다.


이러한 비동기적인 정보는 여러가지가 될 수 있다. 예를들면 특정 네트워크 세그먼트에 문제가 생겼다거나 디스크나 메모리용량을 과다하게 사용하고 있다거나(많은 운영체제의 경우 시스템정보까지도 snmp를 통해서 얻을수 있도록 허용하고 있다)하는 사건들은 비동기적으로 발생할것이다. 이럴경우에는 agent에서 manager측으로 사건을 통보해야 할것이다. 이렇게 agent에서 manager측으로 비동기적으로 사건을 통보하는 것을 SNMP TRAP라고 한다(간단히 말해서 경고메시지 보내는거다).

net-snmp에서는 이러한 trap정보를 전송하고 받기 위해서 snmptrapd와 snmptrap를 제공한다. snmptrapd는 agent에 제공되는 데몬프로그램으로 manager에서의 trap데이타 발생을 기다린다. snmptrap는 agent에 설치되어서 사용될수 있으며 trap데이타를 manager로 전송하는 일을 한다.


이 snmptrap은 꽤 유용하게 사용할수 있다. 간단하게 스크립트로 만들어서 어떤 파일이 변조되었을경우 trap정보를 manager쪽으로 발생시킨다거나, 프로세스 갯수가 일정갯수 이상 초과했을때 이를 전송한다든지 하는 기능을 비교적 간단하게 추가시킬 수 있을 것이다.


SNMP Trap은  Manager가 요청하지 않더라도 Agent에 의해  자의적으로 생성/송신하는 SNMP 메세지 중 하나를 말한다. 이는 주로 시스템이 다운되거나 새로이 부팅될 때 등을 Manager에게 알릴 때 사용된다.


실습을 위해 몇가지 설정을 추가하자. 내용이 없으면 아래와 같이 만든다.


[root@www mibs]# cd /web/snmp/share/snmp/mibs


[root@www mibs]# vi SNMPv1-TEST-MIB.txt

UCD-TRAP-TEST-MIB DEFINITIONS ::= BEGIN

       IMPORTS ucdExperimental FROM UCD-SNMP-MIB;


demotraps OBJECT IDENTIFIER ::= { ucdExperimental 990 }


demoTrap TRAP-TYPE

       ENTERPRISE demotraps

       VARIABLES { sysLocation }

       DESCRIPTION "An example of an SMIv1 trap"

       ::= 17


END


[root@www mibs]# vi SNMPv2-TEST-MIB.txt

UCD-NOTIFICATION-TEST-MIB DEFINITIONS ::= BEGIN

      IMPORTS ucdExperimental FROM UCD-SNMP-MIB;



demotraps  OBJECT IDENTIFIER ::= { ucdExperimental 990 }

demonotifs OBJECT IDENTIFIER ::= { demotraps 0 }


demoNotif NOTIFICATION-TYPE

      OBJECTS { sysLocation }

       STATUS current

       DESCRIPTION "An example of an SMIv2 notification"

       ::= { demonotifs 18 }


END


[root@www mibs]# cd /web/snmp/share/snmp/


[root@www snmp]# vi snmptrapd.conf

authCommunity log,execute,net public


# the generic traps

traphandle SNMPv2-MIB::coldStart    /web/snmp/bin/traps cold

traphandle SNMPv2-MIB::warmStart    /web/snmp/bin/traps warm

traphandle IF-MIB::linkDown         /web/snmp/bin/traps down

traphandle IF-MIB::linkUp           /web/snmp/bin/traps up

traphandle SNMPv2-MIB::authenticationFailure /web/snmp/bin/traps auth

# this one is deprecated

traphandle .1.3.6.1.6.3.1.1.5.6     /web/snmp/bin/traps egp-neighbor-loss


# enterprise specific traps

traphandle UCD-TRAP-TEST-MIB::demoTrap /web/snmp/bin/traps demo-trap

traphandle UCD-NOTIFICATION-TEST-MIB::demoNotif /web/snmp/bin/traps demo-notif


[root@www snmp]# cd /web/snmp/bin


[root@www bin]# vi traps

#!/bin/sh


read host

read ip

vars=


while read oid val

do

  if [ "$vars" = "" ]

  then

    vars="$oid = $val"

  else

    vars="$vars, $oid = $val"

  fi

done


echo trap: $1 $host $ip $vars


[root@www bin]# chmod 755 traps

위와 같이 실행 권한을 준다.


다음은 net-snmp에서 제공하는 trap애플리케이션을 이용한 간단한 테스트이다. 먼저 snmptrapd를 manager측에서 실행시켜야 한다. 이 애플리케이션은 옵션없이 실행할경우 데몬모드로 실행되며 표준출력을 시키지 않음으로 다음과 같이 옵션을 주고 실행시켜서 일반모드(forground)에서 받은 trap정보를 표준출력하도록 실행시키도록 하자.


[root@www snmp]# /web/snmp/sbin/snmptrapd -f -Le

NET-SNMP version 5.7.1

대기모드에서 기다리고 있을 것이다.


이제 agent측에서 터미널창을 실행하고, snmptrap를 이용해서 trap정보를 manager로 전송해보도록 하자.

[root@www bin]# /web/snmp/bin/snmptrap -v 2c -c public localhost "" UCD-NOTIFICATION-TEST-MIB::demoNotif SNMPv2-MIB::sysLocation.0 s "Just here"


그러면 manager로 아래와 같은 정보가 전달되는걸 확인할수 있을 것이다.

NET-SNMP version 5.7.1

trap: demo-notif <UNKNOWN> UDP: [127.0.0.1]:58607->[127.0.0.1]:162 DISMAN-EVENT-MIB::sysUpTimeInstance = 1:0:15:59.05, SNMPv2-MIB::snmpTrapOID.0 = UCD-NOTIFICATION-TEST-MIB::demoNotif, SNMPv2-MIB::sysLocation.0 = Just here


다시 아래와 같이 보내면,

[root@www bin]# /web/snmp/bin/snmptrap -v 2c -c public localhost "" UCD-NOTIFICATION-TEST-MIB::demoNotif  SNMPv2-MIB::sysLocation.0 s "Just here"


아래와 같은 메시지가 전달된다.

trap: demo-notif <UNKNOWN> UDP: [127.0.0.1]:52481->[127.0.0.1]:162 DISMAN-EVENT-MIB::sysUpTimeInstance = 1:0:19:32.27, SNMPv2-MIB::snmpTrapOID.0 = UCD-NOTIFICATION-TEST-MIB::demoNotif, SNMPv2-MIB::sysLocation.0 = Just here


이들 net-snmp에서 제공하는 애플리케이션들의 자세한 사용법은 메뉴얼 페이지를 참고하기 바란다.

우리가 해야 할 것은 MRTG를 통해 결과를 볼 수 있게 하는 것이므로, MRTG를 설치해보자.


2. MRTG를 통한 네트워크 트레픽 모니터링


가. MRTG 소개

네트워크의 트래픽을 모니터링하기 위해서 공개용으로 사용하는 툴이 MRTG(Multi Router Traffic Grapher)이다. MRTG를 사용하면 웹을 통해서 로컬 네트워크의 사용을 한눈에 알 수 있다. 그러나 라우터가 SNMP를 지원하는 경우에 한해서 사용할 수 있는 프로그램이다.

http://ee-staff.ethz.ch/~oetiker/webtools/mrtg 웹사이트에 접속해 보면 MRTG에 대한 상세한 정보를 알 수 있다. 웹을 통해서 네트워크 상황의 통계를 보기 때문에 MRTG는 그래픽 라이브러리가 필요하다. 그래픽 라이브러리의 설치에 관해서는 Apache 웹 서버의 webalizer 편을 참조하기 바란다. 참고로 MRTG가 실행되기 위해서는 gd, libpng, zlib가 필요하다. 위 라이브러리를 컴파일하기 어렵다고 생학하는 사람은 rpm패키지를 구해서 설치해도 무방하다. 현재 레드햇과 같은 패키지에는 그래픽 라이브러리가 포함되어 있다. 위 웹사이트에서 파일을 다운로드 받아서 MRTG를 설치해 보도록 하자.



나. MRTG 소스 설치


해상 사이트에서 다운로드 한다. 페도라12에서는 2.9.xx 버전으로 설치하자.


http://sourceforge.net/projects/mrtg.mirror/files/


다음과 같은 패키지들이 기본적으로 mrtg에 필요한 패키지들이다.

[root@www ~]# yum install zlib zlib-devel

[root@www ~]# yum install freetype freetype-devel

[root@www ~]# yum install libpng libpng-devel

[root@www ~]# yum install gd gd-devel

[root@www ~]# yum install perl perl-devel

[root@www ~]# yum install jpeg


압축을 풀고, 컴파일을 하고 설치까지 해보자.


[root@www snmp]# tar xvfz mrtg-2.9.29.tar.gz


[root@www snmp]# cd mrtg-2.9.29



[root@www mrtg-2.9.29]# ./configure --prefix=/web/mrtg


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

Config is DONE!


Type 'make' to compile the software


       ... that wishlist mentioned above does really exist. So if

you feel like showing your appreciation for MRTG, this is the

place to go. I just love CDs and DVDs


                            -- Tobi Oetiker <tobi@oetiker.ch>

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


[root@www mrtg-2.9.29]# make


[root@www mrtg-2.9.29]# make install


make는 컴파일하기 위한 배치파일이고 make install을 하면 해당 디렉토리에 설치가 된다.

설치가 완료되면 /web/mrtg 디렉토리에 모든 파일이 설치되어진다.



3. MRTG 트래픽 분석 서버의 작업 과정


1) MRTG의 SNMP 매니저시스템에서 SNMP Agent 시스템에게 원하는 자료를 요청한다. (/web/mrtg/conf/****.cfg내의 ssCpuRawUser.0등과 같은 MIB값을 요청)

2) SNMP 에이젼트에 요청할 경우 보안을 위해 Community Name을 묻게 되며 community 권한으로 가능한 것들에 대한 것만 찾아서 응답해준다. (/web/snmp/share/snmp/snmpd.conf파일의 커뮤니티 이름에 대한 정보를 참조)

3) 각각의 객체은 각종 하드웨어와 장비의 정보를 가지고 있고 그것을 SNMP Agent에서 관리하고 있다가 정보를 전송하는 방식이다.(각각의 객체정보를 모아놓은 DB를 MIB(M info Base)라 한다)


4. MRTG cfg생성 및 분석


설치가 완료된 다음 해야 할 작업은 환경설정 단계이다. 환경설정을 위해서 mrtg.cfg 파일이 필요한데, 이 파일을 모두 수동으로 생성할 필요는 없다. /web/mrtg/bin 폴더에 보면 cfgmaker  유틸리티가 있다. 이 유틸리티를 사용해서 mrtg.cfg 파일을 생성해 보도록 하자. 옵션으로 사용되는  WorkDir은 웹서버로부터 접근이 가능한 위치여야 하며 IP  주소는 라우터의 IP주소이다.


가. mrtg cfg 파일 생성하기 : cfgmaker 명령 사용


[root@www mrtg-2.17.4]# mkdir /web/mrtg/conf

[root@www mrtg-2.17.4]# cd /web/mrtg/conf


아래와 같이 하여 mrtg 설정 파일을 만든다.


[root@www conf]# /web/mrtg/bin/cfgmaker --global "WorkDir: /web/httpd/htdocs/mrtg" --global "Options[_]:bits,growright" --output /web/mrtg/conf/mrtg.cfg public@localhost

--base: Get Device Info on public@localhost:

--base: Vendor Id:

--base: Populating confcache

--snpo: confcache public@localhost: Descr lo --> 1

--snpo: confcache public@localhost: Descr Intel Corporation 82540EM Gigabit Ethernet Controller --> 2

--snpo: confcache public@localhost: Ip 10.0.2.15 --> 2

--snpo: confcache public@localhost: Ip 127.0.0.1 --> 1

--snpo: confcache public@localhost: Name lo --> 1

--snpo: confcache public@localhost: Name eth0 --> 2

--snpo: confcache public@localhost: Type 24 --> 1

--snpo: confcache public@localhost: Type 6 --> 2

--snpo: confcache public@localhost: Eth  --> 1

--snpo: confcache public@localhost: Eth 08-00-27-ed-3b-4a --> 2

--base: Get Interface Info

--base: Walking ifIndex

--base: Walking ifType

--base: Walking ifAdminStatus

--base: Walking ifOperStatus

--base: Walking ifSpeed

--base: Writing /web/mrtg/conf/mrtg.cfg


설정파일명은 각자 알아서 만든다. 여기서는 mrtg.cfg로 한다.


[root@www conf]# /web/mrtg/bin/cfgmaker --global "WorkDir: /web/httpd/htdocs/mrtg" --global "Options[_]:bits,growright" --output /web/mrtg/conf/mrtg.cfg public@localhost:::::2

--base: Get Device Info on public@localhost:::::2

--base: Vendor Id:

--base: Populating confcache

--snpo: confcache public@localhost:::::2 Descr lo --> 1

--snpo: confcache public@localhost:::::2 Descr Intel Corporation 82540EM Gigabit Ethernet Controller --> 2

--snpo: confcache public@localhost:::::2 Ip 10.0.2.15 --> 2

--snpo: confcache public@localhost:::::2 Ip 127.0.0.1 --> 1

--snpo: confcache public@localhost:::::2 Name lo --> 1

--snpo: confcache public@localhost:::::2 Name eth0 --> 2

--snpo: confcache public@localhost:::::2 Type 24 --> 1

--snpo: confcache public@localhost:::::2 Type 6 --> 2

--snpo: confcache public@localhost:::::2 Eth  --> 1

--snpo: confcache public@localhost:::::2 Eth 08-00-27-ed-3b-4a --> 2

--base: Get Interface Info

--base: Walking ifIndex

--base: Walking ifType

--base: Walking ifAdminStatus

--base: Walking ifOperStatus

--base: Walking ifSpeed

--base: Walking ifHighSpeed

--base: snmpget public@localhost:::::2 for ifHighSpeed.1 -> 10 Mb/s

--base: snmpget public@localhost:::::2 for ifHCInOctets.1 -> 437537

--base: snmpget public@localhost:::::2 for ifHighSpeed.2 -> 1000 Mb/s

--base: snmpget public@localhost:::::2 for ifHCInOctets.2 -> 5599143

--base: Writing /web/mrtg/conf/mrtg.cfg


public@localhost:::::2는 트래픽 정보를 수집하는 라우터에 관한 정보로 localhost는 라우터의 아이피나 호스트명, IP의 정보이며, public은 community를 통해 SNMP Request로 접근함을 의미한다. :::::2는 SNMP v2로 접근하는 것을 의미한다.


이제 MRTG를 실행해 보도록 하자. MRTG실행파일은 /web/mrtg/bin 디렉토에 mrtg라는 실행 파일이 있다. 이 명령을 실행하면 라우터로부터 데이터를 가져온 다음에 그래프를 생성하고 웹페이지를 만들어 준다. 매개 변수로 들어간 값은 mrtg 환경 설정 파일의  위치이다. 실행을 시키면 로그파일이 없다는 에러 메시지가 나오지만 이런 현상은 정상적인 에러 메시지이다.


[root@www conf] mkdir /web/httpd/htdocs/mrtg

MRTG에 의해 생성된 웹페이지들이 저장될 홈페이지 디렉토리에 mrtg라는 폴더를 만든다.


[root@www conf]# env LANG=C /web/mrtg/bin/mrtg /web/mrtg/conf/mrtg.cfg

Rateup WARNING: /web/mrtg/bin/rateup could not read the primary log file for localhost_2

Rateup WARNING: /web/mrtg/bin/rateup The backup log file for localhost_2 was invalid as well

Rateup WARNING: /web/mrtg/bin/rateup Can't remove localhost_2.old updating log file

Rateup WARNING: /web/mrtg/bin/rateup Can't rename localhost_2.log to localhost_2.old updating log file


실행 파일을 2번 실행할때까지 나오는 에러 메시지는 정상적이다. 메번 mrtg를 수동으로 실행한다는 것은 불가능하기 때문에 cron 데몬을 이용해서 5분에 한번 실행하도록 한다. /etc/crontab 파일에 스케줄링할 작업을 추가한다. 작업의 스케줄링 방법에 대해서 모른다면 crontab 명령에 대한 문서를 참고한다.

실행 명령을 추가하기 위해 아래와 같이 실행한다.


[root@www mrtg]# useradd mrtg


[root@www mrtg]# crontab -e

*/5 * * * * env LANG=C /web/mrtg/bin/mrtg /web/mrtg/conf/mrtg.cfg


vi 에디터 사용법과 같다. 위와 같이 추가한다.


MRTG를 반복적으로 실행하기 위해서는 CRONTAB이나 Run-Level 스크립트 방법을 이용해야 한다. 위의 방법은 crontab을 이용하는 방법으로 위와 같이 설정했다면 아래의 run-level 스크립트로 데몬형태로 실행하는 것은 넘어간다.


스케줄링을 하지 않고 데몬으로 띄우고 싶다면 mrtg.cfg파일에 RunAsDaemon: Yes를 적어준다.


[root@www mrtg]# cd /web/mrtg/conf

[root@www conf]# vi mrtg.cfg

생략

RunAsDaemon: Yes

생략

[root@www mrtg]# /web/mrtg/bin/mrtg /web/mrtg/conf/mrtg.cfg

Daemonizing MRTG ...


[root@www mrtg]# ps axf | grep mrtg

실행된 프로세서를 확인할 수 있다. 환경 설정 파일에 데몬 옵션을 적어주면 데몬으로  MRTG가 실행된다는 것을 알려준다. 부팅시 실행을 시켜서 시스템이 꺼져도 항상 데몬으로 실행할 수 있도록 하는 것도 관리자의 몫이다. 따라서 init.d 디렉토리에 다음과 같은 내용의 스크립트를 만들어 두도록 하자.


[root@www mrtg]# cd /etc/init.d/

[root@www init.d]# vi mrtg

#! /bin/sh

cd /web/mrtg/bin && ./mrtg --user=mrtg /web/mrtg/conf/mrtg.cfg

~

위와 같이 입력하자.


[root@www init.d]# chmod 755 mrtg

[root@www init.d]# /etc/init.d/mrtg


여기까지는 run-level 스크립트로 데몬형태로 구동하는 방법이다. crontab으로 실행한다면, 다음 부터 진행한다.

indexmaker를 통해 실제 보여줄 웹페이지를 만든다.


[root@www conf]# /web/mrtg/bin/indexmaker --output=/web/httpd/htdocs/mrtg/index.html /web/mrtg/conf/mrtg.cfg


[root@www conf]# ls /web/httpd/htdocs/mrtg/

index.html             localhost_2-week.png  localhost_2.log  mrtg-m.png

localhost_2-day.png    localhost_2-year.png  localhost_2.old  mrtg-r.png

localhost_2-month.png  localhost_2.html      mrtg-l.png


2개 이상의 서버를 모니터링 하려면 mrtg.cfg를 다른 이름으로 각각 만들어야 한다. indexmaker 할때 .cfg를 모두 명기해 준다.


웹브라우저를 통해 확인해 보자.




[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.