달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
제 목 : 서버 모니터링 툴의 강자, RRDtool 가이드 (작성중. alpha 버전)
작성자 : 좋은진호(truefeel)
작성일 : 2003.9.22(월)~

그래픽 모니터링 툴인 RRDtool과 그 프론트엔드 툴 HotSaNIC의 설치, 운영가이드이다.

1. RRDtool의 이해
2. RRDtool 설치
3. HotSaNIC 설치
4. RRDtool 직접 다루기
5. 문제 해결
6. 이용 사례



1. RRDtool의 이해

RRDtool에 대해 들어가기 전에 먼저 MRTG 툴을 설명할 필요가 있을 듯 하다.
MRTG(Multi Router Traffic Grapher)는 이름에서도 드러난대로, SNMP 프로토콜을 사용하여
라우터를 거쳐가는 트래픽을 실시간 그래픽을 통해 모니터링하는데 가장 많이 사용한다.
이외에 시스템을 모니터링하는 여러 addon들이 있다.
DISK 사용량, CPU사용량, 메모리 사용량, 데몬, 세션 개수 등..
심지어는 P2P인 당나귀의 트래픽, 프락시 서버인 Squid 트래픽까지 실시간(실시간이라기
보다는 특정 시간간격으로 변화하여 보여준다는게 더 정확하지만)으로 웹에서 볼 수 있다.

RRDtool은 MRTG처럼 실시간 그래픽 모니터링 기능을 가지고 있으면서 보다 더 개선된 형태의
툴이다. 보다 빠르고 시스템 로드를 덜 잡아먹는다. 또한 MRTG의 제약이었던 2개 이상의 데이터를
하나의 그래픽을 통해 표시할 수 있다. 그래픽의 유연성(?)면에서도 단연 RRDtool이 압도한다.

[ MRTG로 트래픽 모니터링하는 화면 ]


[ RRDtool과 HotSaNIC으로 CPU 사용률을 모니터링하는 화면 ]


2. RRDtool 설치

RRDtool :
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

RRDtool의 시스템 요구사항은 다음과 같다.

Perl 5.005 (컴파일시에 문제가 발생하면 더 최신 것을 설치해본다.)
GNU make
GNU gcc

위 RRDtool 사이트에서 최신 버전을 받아온다. /usr/local/rrdtool에 하는 것으로 가정한다.


# tar xvfz rrdtool-1.0.45.tar.gz
# cd rrdtool-1.0.45
# ./configure --prefix=/usr/local/rrdtool
# make install
# make site-perl-install
... 중략 ...
Installing /usr/lib/perl5/site_perl/5.8.0/RRDp.pm
Installing /usr/share/man/man3/RRDp.3pm
... 생략 ...


3. HotSaNIC 설치

HotSaNIC :
http://hotsanic.sourceforge.net/archive/

HotSaNIC은 RRDtool을 사용하는 툴로 시스템 통계정보를 그래프로 생성해준다.

* 시스템 요구 사항

- RRDtool
- iptables 또는 ipchains (네트워크 트래픽 통계용으로 쓰기 위함)

위 사이트에서 받은 최신 버전은 컴파일없이 환경설정만으로 바로 사용하므로
/usr/local에서 압축을 푼다.


# cd /usr/local
# tar xvf HotSaNIC-0-5-0-pre3.tgz ( HotSaNIC/ 디렉토리가 생성된다. )
# cd HotSaNIC



1) 제공하는 모듈

HotSaNIC은 어떤 모듈을 통해 시스템 통계를 제공하는지 알아보고,
그 모듈을 사용할 것인지 안할 것인지를 판단해보자.


---------   ----------------------------------------------------------- ---------------
모듈      처리하는 통계 정보                      truefeel의 권장
---------   ----------------------------------------------------------- ---------------
APCUSV    APC UPS의 현황 (apcaccess 툴 사용)             N
         (APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여

                    모니터링중이 아니라면 N)
APPS     데몬, 응용프로그램별 프로세스 현황                Y
          (프로세스 이름 별도 설정 필요)
DISKIO     각 HDD별(파티션별이 아님) 입출력                   Y
          (별도 설정 필요)
DNET     Distributed.Net관련 RC5, OGR, DES, CSC ???         N
NETWORKS  네트워크 트래픽 (별도 설정 필요)                     Y
PART    파티션별 사용량                                  Y
PING     지정한 서버로 ping time 결과 (ping서버 설정 필요)        ping할 서버가

                                                                                                            있다면
SENSORS CPU, 마더보드 등의 온도, 전압등의 수치              원하는대로
SHOUTCAST 지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요)  N
SYSTEM  시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률, ...      Y
TRAFFIC  네트워크 인터페이스별(eth0, ...) 트래픽                   Y
        (SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링 가능,
         물론 이 때는 별도 설정 필요)
WORMS  웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수           Y
       (웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능)
--------- ----------------------------------------------------------- ----------------


2) setup.pl로 기본 환경 파일 생성

이제 setup.pl 으로 기본 환경 설정을 해보자.
과정은 길지만 간단하다. 모듈을 보고 Y로 할 것인, N로 할 것인지를 결정한다.
이 설정은 나중에 ./setup.pl으로 변경할 수 있으므로 맘 편하게 진행해라.
(반복되는 내용이라 메시지 중간중간 생략하였다.)


# ./setup.pl
Configuring modules:


Module found: APCUSV
----------------------------------------
Do you want to use this module ? (Y)es / (n)o > n

Module found: APPS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

... 중략 ...

Module found: DISKIO  ... 중략 ...
Module found: DNET   ... 중략 ...
Module found: NETWORKS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up networks ...

Configuring local interfaces.
(i)nternal means an interface pointiong to your local machines (intranet)
(e)xternal means an interface connecten with the internet
(n)one means you don't want to account this interface.

Please answer these:
found: eth0 - (i)nternal, (e)xternal or (n)one ? e

found: lo - (i)nternal, (e)xternal or (n)one ? n

... 중략 ...

Module found: PART   ... 중략 ...
Module found: PING   ... 중략 ...
Module found: SENSORS  ... 중략 ...
Module found: SHOUTCAST ... 중략 ...
Module found: SYSTEM  ... 중략 ...
Module found: TRAFFIC
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up traffic ...

Configuring local interfaces. Please answer these:
found: eth0 - (y)es or (n)o ? y

found: lo - (y)es or (n)o ? n


Please check the settings file and adapt it to satisfy your needs.
If you have any interfaces slower than 100 MBit, please change the
corrosponding default values.

... 중략 ...

Module found: WORMS  ... 중략 ...
----------------------------------------
Ok.
Writing main settings ...
 checking for OS-type (current: not configured)
OSTYPE="Linux"
 checking path to "rrdtimer" (current: not configured)
DAEMONDIR="/usr/local/HotSaNIC"
 checking path to "rrdtool" (current: not configured)
the following possibilities have been detected:
0 /usr/bin
1 /usr/local/rrdtool/bin

which one shall i use (0=default ... 1) ? > 1 ( rrdtool이 2군데 설치된 경우이다.)
BINPATH="/usr/local/rrdtool/bin" (RRDtool 실행이 있는 디렉토리)
LOGDIR="$DAEMONDIR/var/log/"   (로그가 저장될 디렉토리)
PIDFILE="$DAEMONDIR/var/rrdtimer.pid"
DIAGRAMLOG="last"
LOGSIZE="200000"
LOGBACKUPS="5"
DEBUGLEVEL="-1"
STIME="120"
SCHEDULE_MIN="100"
SCHEDULE_MAX="200"
RUN="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic worm
s"
WEBDIR="not configured"
WIDTH="600"
HEIGHT="200"
IMAGEFORMAT="gif"
SHOW="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic wor
ms"
ORDER="traffic system part ping dnet sensors"
DTIME="15" (15분 간격으로 이미지를 갱신한다.)
CTIME="24" (24시간 간격으로 통계화면 메인에 표시될 작은 크기의 이미지를 갱신한다.)
 guessing convert method...
 checking for Image::Magick perl module... not found
 checking path to "convert" from ImageMagick (current: not configured)
detected: /usr/bin/convert
is this corrrect? (y)
 checking path to "snmpwalk" (current: not configured)
detected: /usr/bin/snmpwalk
is this corrrect? (y)
SNMPWALK="/usr/bin/snmpwalk"
 checking path to "snmpget" (current: not configured)
detected: /usr/bin/snmpget
is this corrrect? (y)
SNMPGET="/usr/bin/snmpget"
checking path to "snmpbulkwalk" (current: not configured)
detected: /usr/bin/snmpbulkwalk
is this corrrect? (y)
SNMPBULKWALK="/usr/bin/snmpbulkwalk"

--- Main settings generated. ---

Writing start/stop script "rrdgraph" ... Ok.

Now adapt all settings files to satisfy your needs.
They are all linked to the directory /var/settings .


3) 필요한 디렉토리 생성

이제 RRDtool의 웹용 이미지와 html이 저장될 디렉토리와 로그 파일 저장 디렉토리를 생성한다.
디폴트로 로그는 HoSaNIC 홈의 var/log에 생성된다.
(html 홈은 /usr/local/apache/htdocs/ 라고 가정)


# mkdir /usr/local/apache/htdocs/rrdtool
# mkdir var/log


4) 환경 파일의 주요 설정

HoSaNIC 홈/settings가 주 설정 파일이고
HoSaNIC 홈/modules/모듈명/settings는 각 모듈별 설정 파일이다.

주 settings 파일에서 주요 설정을 살펴보자.(반드시 확인할 것에 * 표시해둠)


# BINPATH  = rrdtool 실행 파일이 있는 경로 (*)
BINPATH="/usr/local/rrdtool/bin"

# LOGDIR   = HoSaNIC의 로그 파일 경로
# LOGSIZE  = 로그 파일 크기
# LOGBACKUPS = 지정한 개수만큼 로그는 로데이터션되어 백업된다.
#       로그 파일명은 HotSaNIC.log, HotSaNIC.log.1, ...
LOGDIR="$DAEMONDIR/var/log/"
LOGSIZE="200000"
LOGBACKUPS="5"

# RUN  = 실행할 모듈 목록 (*)
# SHOW = 웹페이지로 표시할 모듈 목록 (*)
# ORDER = 표시할 모듈의 순서를 지정(먼저 쓴 것부터 왼쪽에 표시함)
RUN="apps diskio networks part ping sensors system traffic"
SHOW="apps diskio networks part ping sensors system traffic"
ORDER="traffic system part ping sensors"

# WEBDIR   = 생성된 이미지, html이 저장될 디렉토리 (*)
# IMAGEFORMAT = 이미지 파일 형식 (gif 또는 png)
WEBDIR="/usr/local/apache/htdocs/rrdtool"
IMAGEFORMAT="gif"

# DTIME = 지정한 간격으로 이미지를 생성한다. (단위는 분)
# CTIME = 지정한 간격으로 모니터링 메인화면의 작은 이미지를 생성한다. (단위는 시간)
#     따라서 처음 설치한 후 지정한 시간내에 convert.pl 명령을 하지 않으면 메인화면의
#     이미지는 최소 지정 시간동안 볼 수 없다.
DTIME="15"
CTIME="24"

# CONVERTPATH = ImageMagick 를 사용하여 이미지를 생성한다. convert 경로를 지정한다.
CONVERTPATH="/usr/bin/convert"

# REFRESH = 지정한 초단위로 웹페이지를 리프레쉬해서 보여준다. 기본 300초(5분)
REFRESH="300"



각 모듈별 설정은 해당 디렉토리의 settings을 보면 자세히 설명이 되어 있다.
여기서는 ping, diskio, apps에 대해서만 예를 들어본다.

* ping 모듈 ( HoSaNIC홈/modules/ping/settings )

 192.168.123.15(파일서버)에 대해 ping을 한다면, 다음을 추가하면 된다.


HOST=192.168.123.15,File Server


 설정했는데 ping 이미지가 생성안된다면 '5. 문제해결'에 해결방법을 설명해뒀다.

* diskio 모듈 ( HoSaNIC홈/modules/ping/settings )

/proc/stat 에서 disk_io 라인을 살펴보면 다음과 같이 되어 있다.

disk_io: (2,0):(1,1,2,0,0) (3,0):(306090,39930,942826,266160,5212040)
(3,1):(55015,28746,1435800,26269,909568) (8,0):(50,50,253,0,0)

여기서 (3,0) = hda, (3,1) = hdb, (8,0) = sda를 각각 의미한다.
따라서 hda와 hdb의 disk 입출력을 보려면 다음과 같이 설정한다.


DEV=3_0,hda
DEV=3_1,hdb


* apps 모듈 ( HoSaNIC/modules/apps/settings )


APP=httpd,Apache
APP=sendmail,Sendmail
APP=mysqld,Mysql Server
APP=hanterm,hanterm
APP=xmms,xmms
APP=MozillaFirebird-bin,Mozilla Web Browser


5) 실행

자~ 이제 웹페이지를 생성하고 rrdgraph만 실행하면 모니터링할 수 있다.


# ./makeindex.pl
# ./rrdgraph start



이제 웹브라우저를 띄우고 보면 된다. 아직 이미지도 안나온는데 뭘 보라는 것일까?
최소 15분(settings의 DTIME)이 지내야 모듈내의 큰 이미지들이 생성되고
24시간(CTIME)이 지나면 메인의 작은 이미지가 보일 것이다.
24시간 전이라도 적당한 시기에 ./convert.pl을 실행하면 메인에서도 이미지를 볼 수 있다.

부팅할 때 자동으로 rrdgraph가 실행되록 하려면 어떻게 해야할까?
rrdgraph 스크립트를 /etc/rc.d/init.d 에 복사를 한 후 chkconfig로 서비스를 추가한다.


# cp rrdgraph /etc/rc.d/init.d
# chkconfig -add rrdgraph



4. RRDtool 직접 다루기

HoSaNIC은 이미 정해진 모듈을 통해서 RRDtool을 다루는 것이다.
이제 시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여 통계용 이미지를 생성하는
방법을 알아본다. 간단히 과정을 정리해보면.

- RRDtool용 자체 DB(일반적으로 .rrd로 지정)를 생성한다.(create) ->
- 데이터를 업데이트하거나 (update) 가져온다.(fetch) ->
- 이미지를 생성한다. (graph)

1) rrdtool 명령 익히기

DB 생성, 이미지 만드는 것은 모두 RRDtool홈/bin/rrdtool 명령을 통해서 한다.


* 형식 : rrdtool [명령] [명령 옵션...]
* 예  : rrdtool create coffeenix_status.rrd DS:....


rrdtool에서 사용 가능한 명령은 무엇이 있을까?


---------- -----------------------------------------------------------------------
명 령   설 명
---------- -----------------------------------------------------------------------
create   새로운 RRD DB를 만든다.
update   DB에 새 데이터를 저장한다.
graph    저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png)
dump    RRD DB의 데이터를 XML 포맷으로 뽑아준다.
restore   XML 포맷에서 RRD DB로 저장한다.
fetch    RRD DB에서 데이터를 얻어온다.
tune    RRD DB의 설정을 변경한다.
last    RRD DB의 최종 업데이트 시간을 알려준다.
info    RRD DB의 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값...)
rrdresize  RRA 크기를 변경한다. 가능하면 사용하지 말기를
xport    RRD DB의 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정)
---------- -----------------------------------------------------------------------


2) 샘플 DB 생성

3) 이미지 만들기

5. 문제 해결

1) HoSaNIC 로그 파일을 보니 Can't locate RRDs.pm in @INC (@INC contains... 오류가 있습니다.

  RRDtool 설치할 때 make site-perl-install 를 하지 않아 RRDs.pm 펄 모듈이
  설치되지 않아서 입니다.
  RRDtool 소스 디렉토리에 가서 make site-perl-install을 하세요.
 
2) makeindex.pl 실행할 때 다음 오류가 발행합니다.
  WEBDIR (path to HotSaNIC's output directory) does not exist.

  시스템 모니터링 결과가 저장될 웹디렉토리를 생성하지 않았다.
  위 글중 '3 - 3) 필요한 디렉토리 생성'을 확인해봐라.

3) 시간이 한참지났는데 ping 이미지가 생성이 안됩니다. 물론 ping설정은 했습니다.
  로그를 보니 Can't locate asm/unistd.ph in @INC (did you run h2ph?).. 가 있습니다.

  펄용 헤더 파일이 없기 때문입니다. 펄 헤더로 변환해주는 h2ph로 해결할 수 있습니다.

  cd /usr/include; h2ph -r -l .

6. 이용 사례

  • http://kornet.hanirc.org/chanstat/
     HanIRC의 채널별 사용자 통계를 보여준다. 5분간격의 데이터를 1시간 단위로 자동 업데이트한다.
     장혜식님의 py-rrdtool을 사용한 페이지
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/gallery/

    * 참고 자료
  • RRDtool 매뉴얼
     
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/manual/index.html
  • itup님의 RRDtool 튜토리얼, 논문 자료
     
    http://myhome.hanafos.com/~itup/index.html
     
  • 이은태님의 'RRDTool로 서버의 상황을 파악하자.'
     
    http://kltp.kldp.org/stories.php?story=03/02/13/1717339

  •  
    Posted by tornado
    |