blogging

RRDtool의 데이터를 가져와서 그래프 그리기

hongiiv 2008. 7. 10. 20:28
반응형
클러스터에서 시스템 모니터링을 위해 Ganglia를 사용하고 있는데, ganglia는 RRDtool을 이용해서 시스템의 온갖 정보를 저장하고 그래프로 출력을 해준다. 단점이라고는 할 수 없지만, 내가 원하는 데이터만 내가 원하는 형태로 그래프로 출력하기 위해서는 RRD 데이터를 가져와서(fetch) 그래프로 그리는 수 밖엔 없다.

어제는 클러스터의 6개월간의 시스템 로드 현황을 그래프로 그릴 일이 있었는데, ganglia에서는 시간, 일, 주, 달, 년 단위로 밖에는 그래프로 그려 주지 않기 때문에 6개월간만을 그리기 위해서는 직접 RRD 데이터를 가져와서 그리는 수 밖에는 없다. 여기에서는 RRDtool의 데이터를 가져와서 R을 통해서 그래프를 그리는 과정에 대해서 설명하려고 한다. 어딘가에는 나 같은 사람이 있겠지,,ㅎㅎ

Picture 4
시간, 일, 주, 월, 년 단위 밖엔 그려주지 않는단 말이지,,,

RRDTool 데이터 가져오기
데이터를 가져오기전에 ganglia가 각각의 정보(load, cpu idle, cpu_nuce, disk_free, mem_free 등등의 CPU, DISK, Memory, Network 등등에 관한 정보)를 어떻게 저장하는 보도록 하자. 우선 RRDtool의 fetch 옵션을 가지고 load_one(1분동안의 시스템 로드 정보) 데이터를 보면 다음과 같다.

# rrdtool fetch load_one.rrd AVERAGE

Picture 2

첫번째 컬럼은 시간, 그리고 sum, num은 ganglia에서 지정한 데이터 타입이며, 우리가 사용할 1분 동안의 시스템 로드값은 sum이다. 여기서 데이터를 가져올때 우리는 기간을 지정하지 않았다. 6개월 즉 2008년 1월 ~ 6월까지의 데이터만을 가져와야 한다. 위의 명령어에 기간만 추가해주면 된다. 여기서의 시간은 UNIX의 Time Stamp를 사용한다. 간단하게 2008년 1월과 6월을 계산해서 넣어준다. 간단하게 python으로( 더 간단한 방법 없나요 ㅜㅜ)

Picture 5

# rrdtool fetch load_one.rrd AVERAGE --start 1199145600 --end 1214784000

이렇게 가져온 데이터는 적절하게 월별로 평균을 내서 다음과 같은 형태로 만든다. (python을 이용하면 쉽겠죠 ^^) 첫번째 라인은 헤더, 두번째 라인부터 1월 ~ 6월의 시스템 로드를 나타낸다.

++++++++++++++
system_load.txt
++++++++++++++
SYSTEM_LOAD
16.4625979726
16.4639281452
1.52861077135
3.00024432871
2.60617867756
5.51132032397

R을 통해서 그래프를 그려보자. 데이터를 읽고, 색상들을 plot_colors에 넣어 놓고 필요할때 마다 꺼내 쓰고 ^^;;, y축의 최대크기를 지정한 후, plot한 후 각x,y축과 각종 라벨들을 생성~~

data<-read.table("system_load.txt",header=T)
plot_colors<-c("blue","red","forestgreen","deepskyblue","darkred",
    "yellow","GreenYellow","HotPink4","LightCyan4","SlateBlue3","turquoise4")

max_y<-max(data$SYSTEM_LOAD)
plot(data$SYSTEM_LOAD,type="o",col=plot_colors[1],axes=FALSE,
     ann=FALSE,lty=1,pch=10,ylim=c(1,max_y))

axis(1,at=1:6,lab=c("JAN","FEB","MAR","APR","MAY","JUN"))
axis(2,las=0,at=1*0:max_y)
box()
title(xlab="Month",col.lab=rgb(0,0.5,0))
title(ylab="System Load",col.lab=rgb(0,0.5,0))
title(main="Monthly Load Average", col.main="red",font.main=4)

완성된 그래프는 다음과 같겠죠 ^^;;
User inserted image
자~ 지금까지 RRD의 데이터를 가져온 후 R을 통해서 원하는 포맷의 그림으로 그려봤습니다.



반응형