rrdtool的完整例子

rrdtool的完整例子

RRDtool是一種環形數據庫工具,我們可以將數據存入該數據庫中,而不用擔心數據太多,因爲這個數據庫是環形的,新的數據會覆蓋最老的數據。

這與Windows上的taskman類似。RRDtool主要由Tobias Oetiker 編寫,這哥們還寫了MRTG。RRDtool主要是爲了替代MRTG的。

網上有很多RRDtool的介紹和教程,例如:RRDtool主頁上的ChinaUnix上的這一篇。不過這些文章上給出的例子程序基本不能直接運行,都

存在着若干小錯誤,就連RRDtoo Tutorial上給出的例子都不能直接運行。 我在學習RRDtool時被弄得很鬱悶。本文給出了一個完整的用Shell寫的Demol程序,

大家可以參考一下。

通常來說,一個RRDtool的程序基本可以分成兩部分:

  1. 用rrdtool create命令創建一個rrdtool的數據庫,並且有rrdtool update命令更新它;
  2. 用rrdtool graph命令畫圖。

我的Demo程序不能取得系統Load average(5分鐘,10分鐘,15分鐘),把這個三個數據插入數據庫中,然後畫圖。

1. 創建數據庫及更新數據庫:

複製代碼
 1 #!/bin/bash
 2 
 3 # create a rrd file
 4 
 5 rrdfile=loadavg.rrd
 6 STEP=2
 7 HEARTBEAT=4
 8 now=`date +%s`
 9 
10  if [ ! -f $rrdfile ]
11 then
12     rrdtool create $rrdfile --start $now --step $STEP \
13         DS:loadavg5:GAUGE:$HEARTBEAT:U:U              \
14         DS:loadavg10:GAUGE:$HEARTBEAT:U:U             \
15         DS:loadavg15:GAUGE:$HEARTBEAT:U:U             \
16         RRA:MAX:0.5:3:3600
17  else
18     echo "$rrdfile already exists, remove it"
19 fi
20 
21 TEMPLATE_STR="loadavg5:loadavg10:loadavg15"
22 
23  while :
24  do
25     loadavg5=`cat /proc/loadavg  | awk '{print $1}'`
26     loadavg10=`cat /proc/loadavg | awk '{print $2}'`
27     loadavg15=`cat /proc/loadavg | awk '{print $3}'`
28     rrdtool update $rrdfile                           \
29         --template $TEMPLATE_STR                      \
30         N:$loadavg5:$loadavg10:$loadavg15
31 
32     sleep $STEP
33 done
34 
複製代碼

 

2. 畫圖

複製代碼
 1 #!/bin/bash
 2 
 3 rrdfile=loadavg.rrd
 4 PIC=loadavg.png
 5 
 6 rrdtool graph $PIC                    \
 7     --title "System Load Average"     \
 8     --vertical-label "Load Average"   \
 9     --color "BACK#CCCCCC"             \
10     --color "CANVAS#CCFFFF"           \
11     --color "SHADEB#9999CC"           \
12     --height 200                      \
13     --width  400                      \
14     --slope-mode                      \
15     --alt-autoscale                   \
16     --lower-limit 0                   \
17     DEF:max_loadavg5=$rrdfile:loadavg5:MAX      \
18     DEF:max_loadavg10=$rrdfile:loadavg10:MAX    \
19     DEF:max_loadavg15=$rrdfile:loadavg15:MAX    \
20     LINE1:max_loadavg5#0000FF:loadavg5          \
21     LINE1:max_loadavg10#00FF00:loadavg10        \
22     LINE1:max_loadavg15#FF0000:loadavg15        \
23     COMMENT:"Last update\: $(date '+%Y-%m-%d %H\:%M\:%S' -r $rrdfile)"
24 
複製代碼

 

圖:

發佈了7 篇原創文章 · 獲贊 5 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章