說明:藍色=命令名稱數據庫
淺綠=命令參數c#
淺藍=選項bash
紫色=目錄app
系統環境:CentOS 5.8 x86_64框架
不瞭解rrdtool是什麼的先百度,這裏不羅嗦了,直接上實例.ide
建庫即數據抓取腳本:字體
#!/bin/bash優化
BIN="/usr/bin/rrdtool"spa
RRD="./test.rrd"code
if ! test -e $RRD ;then
$BIN create test.rrd -s 5 \
DS:eth0:COUNTER:10:U:U \
DS:cpu:GAUGE:10:U:U \
DS:mem_total:GAUGE:10:U:U \
DS:mem_free:GAUGE:10:U:U \
DS:mem_buffer:GAUGE:10:U:U \
DS:mem_cache:GAUGE:10:U:U \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:5:600 \
RRA:MAX:0.5:12:600 \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:5:600 \
RRA:AVERAGE:0.5:12:600
fi
while :
do
load=`awk '{print $1*100}' /proc/loadavg`
eth0=`grep -oP eth0:[0-9]+ /proc/net/dev`
mem_t=`awk '/MemTotal/{print $2}' /proc/meminfo`
mem_f=`awk '/MemFree/{print $2}' /proc/meminfo`
mem_b=`awk '/Buffers/{print $2}' /proc/meminfo`
mem_c=`awk '/Cached/{print $2;exit}' /proc/meminfo`
INFO=N:${eth0##*:}:$load:$mem_t:$mem_f:$mem_b:$mem_c
$BIN update $RRD $INFO
echo $INFO
echo $((i++))
sleep 5
done
說明:
-s|--step 採集的間隔
--start 時間串(這裏沒寫,默認是當前時間)
DS: eth0 : COUNTER : 10 : U : U
| 標識 | 類型 | 心跳 | 最小值 | 最大值
標識:根據本身習慣定義
類型(4種): GAUGE | COUNTER | DERIVE | ABSOLUTE
GAUGE:實際值,不對輸入的值進行任何修改,如:輸入 50,60 輸出 50,60
COUNTER:必須是遞增的數據,具體的數據爲後一個數據減去前一個數據,如:兩次接受的數據爲 50、60 那麼輸出值就是10/setp,其實就是兩個差值,它表示的是通過一個刷新週期。注:
DERIVE:和 COUNTER 相似。但能夠是遞增數據,也能夠遞減數據,或者一會增長一下子減小。如:輸入 40,50,30 輸出 10/step,-20/step
ABSOLUTE:直接用真實值除以採集間隔,至關於GAUGE/step,如:輸入 50,60 輸出 50/step,60/step
特殊類型:
COMPUTE :不接受輸入,數據源爲本rrd中已經定義的DS,它的定義是一個表達式,可以對DS數據源進行計算得出新數據。
例如 DS:eth0_bytes:COUNTER:600:0:U DS:eth0_bits:COMPUTE:eth0_bytes,8,*
只能用於本數據庫(test1.rrd庫中的DS數據不能做爲test2.rrd中COMPUTE的數據源)。
心跳:設定心跳時間,例子中設置的是10s,兩個刷心週期。若某一時刻沒有產生數據,則這個時刻的先後5s中產生數據的平均值爲這個時刻的值,若是兩個週期內沒有收到結果,網數據文檔裏插入UNKNOWN
最大值,最小值:記錄數據的最小值和最大值,U:U 表明不限範圍。
注:最大值和最小值對於GAUGE就是指輸入值,可是對於其它類型是指計算值,而不是輸入值。
RRA: MAX : 0.5 : 1 : 600
| 統計 | 比例 | PDP | CDP
統計(4種):AVERAGE,MAX,MIN,LAST 如:RRA:MAX:0.5:5:600 中保存了5個PDP
AVERAGE :5個的平均值
MAX :5箇中最大值
MIN :5箇中最小值
LAST :最後一個值
比例:0.5 表示一個 CDP 中的全部 PDP 若是超過一半的值爲 UNKNOWN ,則該 CDP 的值就被標爲
UNKNOWN。
PDP:每一個週期統計的值,如例子中週期爲5,則5秒產生一個PDP
CDP:一個或多個 PDP 合併爲(計算出)一個 CDP,存入RRA,用這個值來繪圖。
畫圖參數:
rrdtool graph test.png \
--start now-300 \
DEF:load=test.rrd:cpu:MAX \
DEF:eth0=test.rrd:eth0:AVERAGE \
DEF:mem_t=test.rrd:mem_total:AVERAGE \
DEF:mem_f=test.rrd:mem_free:AVERAGE \
DEF:mem_b=test.rrd:mem_buffer:AVERAGE \
DEF:mem_c=test.rrd:mem_cache:AVERAGE \
CDEF:vload=load,1700,+ \
CDEF:veth0=1200,eth0,5,/,+ \
CDEF:vmem_t=mem_t,1024,/ \
CDEF:vmem_f=mem_f,1024,/ \
CDEF:vmem_b=mem_b,1024,/ \
CDEF:vmem_c=mem_b,1024,/ \
COMMENT:" 名稱 最大值 平均值\n" \
COMMENT:" " \
AREA:vmem_t#0000C6:"內存小 " \
GPRINT:mem_t:MAX:"%12.0lf" \
GPRINT:mem_t:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
AREA:vmem_f#00DB00:"空閒容量" \
GPRINT:mem_f:MAX:"%12.0lf" \
GPRINT:mem_f:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_b#9F35FF:"buffer " \
GPRINT:mem_b:MAX:"%12.0lf" \
GPRINT:mem_b:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_c#00E3E3:"cache " \
GPRINT:mem_c:MAX:"%12.0lf" \
GPRINT:mem_c:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:veth0#6F00D2:"eth0 " \
GPRINT:eth0:MAX:"%12.0lf" \
GPRINT:eth0:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:vload#00DB00:"負載 " \
GPRINT:load:MAX:"%12.0lf" \
GPRINT:load:AVERAGE:"%12.0lf\n" \
-t "系統監控" \
-v "總表" \
-h 250 -w 400 \
--lower-limit 0 --upper-limit 2000 --rigid \
-y 500:1
其餘參數:
-s|--start-time繪圖開始時間,單位s。 能夠用NOW-秒數表示,也能夠直接用時間串。默認一天前
-e 繪圖結束時間單位秒
-t|--title 圖上顯示的標題
CANVAS(圖形背景)
、SHADEA(左側和頂部邊界)、SHADEB(右邊和底部邊框
)、
GRID,
MGRID(網格)、
FONT(字體顏色)、
AXIS(座標軸)、FRAME(框架周圍)、
ARROW
(箭頭顏色)
加參數後效果圖:
畫圖參數:
rrdtool graph test.png \
--start now-300 \
DEF:load=test.rrd:cpu:MAX \
DEF:eth0=test.rrd:eth0:AVERAGE \
DEF:mem_t=test.rrd:mem_total:AVERAGE \
DEF:mem_f=test.rrd:mem_free:AVERAGE \
DEF:mem_b=test.rrd:mem_buffer:AVERAGE \
DEF:mem_c=test.rrd:mem_cache:AVERAGE \
CDEF:vload=load,1700,+ \
CDEF:veth0=1200,eth0,5,/,+ \
CDEF:vmem_t=mem_t,1024,/ \
CDEF:vmem_f=mem_f,1024,/ \
CDEF:vmem_b=mem_b,1024,/ \
CDEF:vmem_c=mem_b,1024,/ \
COMMENT:" 名稱 最大值 平均值\n" \
COMMENT:" " \
AREA:vmem_t#0000C6:"內存小 " \
GPRINT:mem_t:MAX:"%12.0lf" \
GPRINT:mem_t:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
AREA:vmem_f#00DB00:"空閒容量" \
GPRINT:mem_f:MAX:"%12.0lf" \
GPRINT:mem_f:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_b#9F35FF:"buffer " \
GPRINT:mem_b:MAX:"%12.0lf" \
GPRINT:mem_b:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
STACK:vmem_c#00E3E3:"cache " \
GPRINT:mem_c:MAX:"%12.0lf" \
GPRINT:mem_c:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:veth0#6F00D2:"eth0 " \
GPRINT:eth0:MAX:"%12.0lf" \
GPRINT:eth0:AVERAGE:"%12.0lf\n" \
COMMENT:" " \
LINE1:vload#00DB00:"負載 " \
GPRINT:load:MAX:"%12.0lf" \
GPRINT:load:AVERAGE:"%12.0lf\n" \
-t "系統監控" \
-v "總表" \
-h 250 -w 400 \
--lower-limit 0 --upper-limit 2000 --rigid \
-y 500:1 \
-X 0 \
--no-gridfit \
--slope-mode \
--zoom 1.5 \
--right-axis-label "test" \
--right-axis "2:10" \
--right-axis-format %1.0lf \
--watermark "`date`"