Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

rrdpython

좀 간단하게 RRD 정보를 제어할 수 없을 까 해서, Python 관련 모듈을 찾아봤다. 그중 rrdpython을 찾아서, 이걸 사용하기로 했다. 이 모듈을 사용한 가장 큰 이유는 컴파일등의 과정없이 apt-get으로 바로 설치할 수 있어서였다.
# apt-get install python-rrdtool

예제

사용법을 익히는 가장 좋은 방법은 역시 코드를 직접 만들어 보는거, joinc의 전체 트래픽을 모니터링할 수 있는 프로그램을 만들어 보기로 했다. 먼저 RRD 데이터베이스 파일을 만들었다.
# rrdtool create traffic.rrd --start 1340723000 --step 300 \
DS:input:COUNTER:600:U:U \
DS:output:COUNTER:600:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:6:700 RRA:AVERAGE:0.5:24:775

#!/usr/bin/python

import rrdtool
import sys
import re
import time

proc = '/proc/net/dev'
iname = 'eth0:'

infile = open(proc, "r")
while infile:
  line = infile.readline()
  if len(line) == 0: 
    break       
  index = line.find(iname)
  if index > 0:
    trafficinfo=line[index+len(iname):]
    items = re.split(" +", trafficinfo)
    inbyte = items[0]
    outbyte = items[8]

uptime = int(time.time())
rtv = rrdtool.update('traffic.rrd',  "{0}:{1}:{2}".format(uptime,inbyte, outbyte))

starttime = time.time() - (3600 * 24)
rtv = rrdtool.graph('traffic.png',
  '--imgformat', 'PNG',
  '--width', '540',
  '--height', '100',
  '--start', "%i" % starttime,
  '--end', "-1", 
        '--vertical-label', 'Traffic',
        '--title', 'Input/Output Traffic',
  'DEF:input=/var/www/moniwiki/script/traffic.rrd:input:AVERAGE',
  'DEF:output=/var/www/moniwiki/script/traffic.rrd:output:AVERAGE',
  'LINE1:input#990033',
  'LINE1:output#FF0000'
  )     
이 프로그램이 하는 일을 정리하자면
  1. proc파일 시스템을 이용 트래픽 정보를 가져온다. 네트워크 인터페이스별 트래픽 카운팅 정보는 /proc/net/dev에 있다.
  2. 트래픽 정보를 파싱해서 가져온 정보로 rrd update를 한다.
  3. update 하면서, 하루 동안의 정보를 가져와서 png 이미지로 만든다.
이 프로그램을 crontab에 넣어서 5분마다 이 프로그램을 실행하게 했다.

http://www.joinc.co.kr/script/traffic.png