본문 바로가기
  • AI (Artificial Intelligence)
Security/Monitoring

[Monitoring] RRDtool의 기본 개념

by 로샤스 2014. 11. 29.

RRDtool이란?

 

장시간 모니터링에서 문제시되는 것은 데이터의 저장공간과 처리용량, 시스템 사양이 문제시된다. 이러한 시스템에서는 새로운 개념의 데이터베이스의 설계가 필요하게 되었다. 따라서 이러한 시간에 비례한 메모리의 용량 증가를 없애면서 연속적으로 데이터베이스를 구축할 수 있는 기법으로 개발되어진 것이 RRDtool이다. RRDtool은 MRTG의 개발자인 Swiss Federal Institute of Technology의 Tobias Oetiker에 의해 개발되었다.

RRDtool은 Round Robin Database tool을 의미하는데 여기에서 round robin은 고정된 양의 데이터와 현재 요소를 가리키는 포인터와 시간의 흐름에 따라 다음 포인터로 이동하는 방식으로 일련의 반복작업이 연속되는 것을 말한다. RRDtool은 연속적으로 들어오는 데이터들을 고정된 양으로 데이터베이스에 효율적으로 저장하고 그래픽 파일을 생성하는 CLI(command line interface)방식과 프로그램 모듈 형식의 툴이다.

즉, RRD에는 일정 시간 동안 몇 가지 어떤 값을 측정하여 이 정보를 임의 기간동안 RRDtool에 의해 저장하고 사용자에 의해서 그래프 파일을 생성한다.

저장되는 값은 일반적으로 숫자들이 되지만 반드시 그러한 제한이 있지는 않다. 많은 예제들에서 SNMP를 사용하여 장비가 가지고 있는 MIB의 값을 추출하여 이 값을 RRD에 저장하는 것을 볼 수 있다. RRDtool은 데이터베이스를 만들고, 그곳에 데이터를 저장하고, 이 데이터를 추출하여 웹 브라우저를 통해 볼 수 있도록 GIF나 PNG 형식으로 그래프를 만든다. 이 이미지들은 수집된 데이터에 의존한다. 예를 들어 평균 네트워크 사용율이나 최대 사용율 등을 계속 모니터링하면서 볼 수 있게 한다.

RRDtool의 원리를 이용한 것으로서 널리 알려진 것은 MRTG(Multi Router Traffic Grapher)-3이다. 이는 RRDtool을 이용하여 디자인된 트래픽 모니터링 프로그램의 일종이다. 이것은 네트워크 장비나 서버의 온도, 전압, 전송속도, 메모리 사용율, CPU 점유율 등의 정보를 수집하여  만들어진 이미지를 웹 상으로 실기간으로 보여주는 프로그램이다.

이 외에도 RRDtool은 조수흐름, 태양방사열, 소모전력, 전시회관람자 수, 공항주변의 소음, 날씨, 도로교통 통행량, 지하철 공사장 지반 침식 등에 널리 사용이 될 수 있다. 이들은 데이터 수집을 위해 센서를 필요로 한다. 기본적인 구조는 C로 구현이 되었다. 이것은 CLI, Perl-module, python과 tcl의 개발 바인딩, rrdcgi로써 핸들링 된다. 현재(2001.8) Unix 와 NT 버전의 1.0.33이 나와 있다.


* * * * * * *

^^;

@@ 쫌 더 쉽게!!

RRDtool은 연속적으로 변하면서 반복적인 데이터의 흐름을 시간의 흐름에 따라 평균값을 저장하는 방식으로 매우 간략한 하게 장기간 데이터를 보관하고 이를 그래프 파일로 생성을 합니다. 이런 연속적인 데이터의 예로는 네트워크의 흐름정보를 카운터 값으로 보관하고있는 MIB 정보, 사무실 온도, 자동차 도로의 교통 통행량, 날씨의 풍량 등(앞에서도 열거했죠)의 정보들이 있습니다. 암튼 이런 종류의 데이터들을  얼마 되지 않은 크기로 데이터베이스화 하고, 시간단위로 그래프화 하여 이것을 인터넷 상에서 실시간으로 보여 주거나 다른 프로그램에서 쓸 수 있도록 하는 툴입니다.

 

 @@ 그럼 MRTG와는 어떻게 틀리나?

MRTG는 사용자의 편의를 위해 자동화 작업을 하면서 출력 그림들이 거의 똑같지요. 또한 입력데이터도 기본이 입출력 트래픽입니다. 그래서 입력값은 2개 이하. 여기에 최대값을 추가하여 한 그래프에서 나올 수 있는 수치그래프가 얼마되지 않지요(4개). 물론 수치그래프가 많으면 많을수록 그래프를 구별하기가 어려워 힘들 때도 있겠지만요. 하지만  이 툴은 입력데이터의 제한이 없으며, 모니터링 기간, 입력데이터 시간간격조정, 그래프 파일의 디자인 변경과 기간 간격 등을 아주 자유롭게 구성 할 수 있습니다. 좀 더 있는데 여기서 줄이죠.^^

근데 둘은 한통속입니다. 물론 개발자가 같아서 이지만… MRTG의 소스를 보면 RRDtool을 직접적으로 사용을 하고 있는 것을 확인 할 수 있습니다.

 

 @@ RRDtool을 쓰려면 뭘 알아야 하나?

표현이 자유로운 반면 해야 할 일도 많겠죠. 우선 표현하고자 하는 데이터를 추출하고 데이터 저장을 위해 Perl을 좀 알아야 해요. 보고서 기능이 막강한 스크립트죠. 그리고 정작 중요한 RRDtool의 사용방법 이것은 데이터베이스를 어떻게 저장하고 시간간격을 어떻게 하고 데이터의 종류는 어떤 것이고 그래프를 어떻게 표현 할 것인가 하는 것들입니다(음 일반적인 데이터베이스 형식과 유사). 그리고 인터넷상에서 결과 그래프를 보려고 하면 HTML 쯤은 당연하겠죠.

기존에 MRTG을 써본 사용자라면 Perl은 제가 사용했던 소스를 조금만 수정해서 쓰면 거의(?) 완벽하게 네트워크 모니터링 그래프를 만들 수 있을 것 같네요. 또 한가지 네트워크 장비나 서버의 MIB 정보를 담고 있는 부분인 OID값을 알아야 하겠지요. 보편적으로 MRTG는 자동으로 포트 등을 검색을 해서 보여 주지만 여기서는 모두가 수동.

 

 @@ 그래서…

기존 MRTG에 만족을 하지 못했거나, 표현해야 할 데이터들이 네트워크/서버하고 관련이 없거나, 3개 이상의 값을 한 그래프에서 모니터링 하고자 할 경우, 기타 시뮬레이션 모니터링 등에 매우 유용하게 쓸 수 있는 툴입니다. 그래프가 하나하나 생성 될 때마다 신기하고 재밋습니다. 굉장한 툴이예요.

 

RRDtool의 구조와 저장

 

RRD 구조는 레코드, 필드를 갖는 일반 데이터베이스의 형식과 흡사하다. 먼저 데이터 수집이 시작 될 시간을 정하게 되며, 다음으로 데이터베이스의 소스 타입을 정하고, 저장 될 데이터의 저장공간을 확보하게 한다. 이로써 RRD는 생성 당시 데이터베이스의 크기가 정해진다.

생성되는 파일은 rrd 확장자를 가지며 XML 파일로 변환과 복구가 가능하다. 저장되는 데이터는 반드시 숫자일 필요는 없으며 상태나 상황의 저장이 가능하다. 입력 데이터의 저장포맷은 binary로써 데이터 접근에 훨씬 더 빠른 처리를 속도를 나타낸다.

 

다음은 RRDtool의 문법과 RRD 생성의 예제를 보인 것이다.

 

rrdtool function arguments …

 

rrdtool create test.rrd                          \

--start 920804400                                \

            DS:speed:COUNTER:600:U:U   \

            RRA:AVERAGE:0.5:1:12            \

            RRA:AVERAGE:0.5:3:8          

## test.rrd라는 이름의 RRD파일을 만듦

## 시작시간

## COUNTER형인 데이터소스 네임이 speed인 것을 만듦

## 업 데이트 최대시간간격 600초, 최소치와 최대치 정의 없음

## 5분 동안의 평균데이터를 12회(12회5분=1시간) 구해 저장

## 15분 동안의 평균데이터를 8회(2시간) 구해 저장

아래의 그림은 test.rrd의 데이터베이스 구조를 도식화 한 것이다.

DS(Data Sources)는 데이터 구조를 정의하며 RRA(Round Robin Archives)는 저장데이터의 정의와 크기를 정의한다. 나머지 공간은 실질적으로 데이터가 저장되는 공간을 확보하게 된다. 이는 최초 데이터베이스 생성시 그 데이터베이스의 크기가 확정됨을 의미하고 주기적으로 반복되어 저장된다.

 

 

 

 

DS 형에는 다음과 같이 4가지가 있다. 연속 증가하는 값을 갖는 COUNTER, 표시값을 나타내는 GAUGE, 증감값을 갖는 DERIVER, 절대값을 갖는 ABSOLUTE가 있다. 아래의 그램은 이들의 상관관계를 그림으로 보인것이다.


 

데이터 저장은 멀티스텝 프로세싱으로 저장이 된다. 입력 값이 들어오면 RRDtool은 샘플링 하고 RRA의 정의를 참고하여 재 샘플링 과정을 거쳐 RRA 저장공간에 저장하게 된다. 이는  동시에 두개 이상의 입력과정이 처리됨을 의미한다.

RRD의 저장은 RRDtool의 명령형식과 모듈형식으로 이루어진다.

 

명령형식은 command line에서 다음과 같은 옵션과 데이터를 주게 된다.

rrdtool update rrdfile utime1:value1:value2 utime2:value3:value4

## rrdfile   : RRD 파일 이름

## utimen   : UNIX time

## value  : 입력 데이터

모듈형식은 Perl source에 다음과 같은 RRD shared module이 추가된다.

 

require 'RRDs.pm';

RRDs::update("$rrdfile", "$utime:$value");

 

지정범위의 계산된 평균값을 얻는 방법은 다음과 같다.

 

rrdtool fetch test.rrd AVERAGE --start 920804700 --end 920809200

 

## test.rrd 에서 20:05 ~ 21:20 까지의 데이터의 평균값을 구함.

입력값                              출력값

                                          speed

20:05   12345              920804700      NaN

20:10   12357              920805000      0.04

20:15   12363              920805300      0.02

20:20   12363              920805600      0.00

## NaN : Not a Number

## 20:10 : 12357 - 12345 = 12  300s = 0.04

 

다음은 DS COUNTER 형에 따른 300초 단위의 평균값을 얻는 계산법이다.

 

07:10  300       앞 데이터 없음. 결과값 없음. ”U”.

07:20  600        600 - 300 = 300  300s = 1 따라서 초당 얻어지는 값은 1이 된다.

07:30  900        900 - 600 = 300  300s = 1

07:40 1800       1800 - 900 = 900  300s = 3

 

RRDtool은 이 결과를 토대로 하여 그래프의 수치 데이터를 얻는다.

 

그래프 표현

 

RRDtool의 그래프는 기본적으로 저장된 데이터에 의존하며 생성 파일종류, 크기, 표현시간 등 매우 유연한 그래프를 만들어낸다. 생성된 그래픽 파일은 별도의 수동조작이 없으면 기본값을 적용하여 최대한의 상태를 적용하여 생성한다. 뿐만 아니라 저장된 데이터에 몇몇 수학적 연산을 적용시켜 나타나는 결과값들을 적용시킬 수 있다.

















출처 : http://cafe.daum.net/_c21_/bbs_search_read?grpid=1IlMD&fldid=HIFC&contentval=0001Dzzzzzzzzzzzzzzzzzzzzzzzzz&nenc=&fenc=&q=vi+editor&nil_profile=cafetop&nil_menu=sch_updw
















댓글