rrdtool簡單應用

說明藍色=命令名稱數據庫

淺綠=命令參數c#

淺藍=選項bash

 紫色=目錄app

      系統環境:CentOS  5.8 x86_64框架

不瞭解rrdtool是什麼的先百度,這裏不羅嗦了,直接上實例.ide

建庫即數據抓取腳本:字體

  
  
  
  
  1. #!/bin/bash優化

  2. BIN="/usr/bin/rrdtool"spa

  3. RRD="./test.rrd"code

  4. if ! test -e $RRD ;then 

  5.     $BIN create  test.rrd -s 5 \ 

  6.     DS:eth0:COUNTER:10:U:U \ 

  7.     DS:cpu:GAUGE:10:U:U \ 

  8.     DS:mem_total:GAUGE:10:U:U \ 

  9.     DS:mem_free:GAUGE:10:U:U \ 

  10.     DS:mem_buffer:GAUGE:10:U:U \ 

  11.     DS:mem_cache:GAUGE:10:U:U \ 

  12.     RRA:MAX:0.5:1:600 \ 

  13.     RRA:MAX:0.5:5:600 \ 

  14.     RRA:MAX:0.5:12:600 \ 

  15.     RRA:AVERAGE:0.5:1:600 \ 

  16.     RRA:AVERAGE:0.5:5:600 \ 

  17.     RRA:AVERAGE:0.5:12:600 

  18. fi 

  19. while : 

  20. do

  21.     load=`awk '{print $1*100}' /proc/loadavg` 

  22.     eth0=`grep -oP eth0:[0-9]+ /proc/net/dev` 

  23.     mem_t=`awk '/MemTotal/{print $2}' /proc/meminfo` 

  24.     mem_f=`awk '/MemFree/{print $2}' /proc/meminfo` 

  25.     mem_b=`awk '/Buffers/{print $2}' /proc/meminfo` 

  26.     mem_c=`awk '/Cached/{print $2;exit}' /proc/meminfo` 

  27.     INFO=N:${eth0##*:}:$load:$mem_t:$mem_f:$mem_b:$mem_c 

  28. $BIN update $RRD $INFO

  29.     echo $INFO 

  30.     echo $((i++)) 

  31.     sleep 5 

  32. 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,用這個值來繪圖。

 

 

畫圖參數:

  
  
  
  
  1. rrdtool graph test.png \ 

  2. --start now-300 \ 

  3. DEF:load=test.rrd:cpu:MAX \ 

  4. DEF:eth0=test.rrd:eth0:AVERAGE \ 

  5. DEF:mem_t=test.rrd:mem_total:AVERAGE \ 

  6. DEF:mem_f=test.rrd:mem_free:AVERAGE \ 

  7. DEF:mem_b=test.rrd:mem_buffer:AVERAGE \ 

  8. DEF:mem_c=test.rrd:mem_cache:AVERAGE \ 

  9. CDEF:vload=load,1700,+ \ 

  10. CDEF:veth0=1200,eth0,5,/,+ \ 

  11. CDEF:vmem_t=mem_t,1024,/ \ 

  12. CDEF:vmem_f=mem_f,1024,/ \ 

  13. CDEF:vmem_b=mem_b,1024,/ \ 

  14. CDEF:vmem_c=mem_b,1024,/ \ 

  15. COMMENT:"          名稱           最大值          平均值\n" \ 

  16. COMMENT:"      " \ 

  17. AREA:vmem_t#0000C6:"內存小  " \ 

  18. GPRINT:mem_t:MAX:"%12.0lf" \ 

  19. GPRINT:mem_t:AVERAGE:"%12.0lf\n" \ 

  20. COMMENT:"      " \ 

  21. AREA:vmem_f#00DB00:"空閒容量" \ 

  22. GPRINT:mem_f:MAX:"%12.0lf" \ 

  23. GPRINT:mem_f:AVERAGE:"%12.0lf\n" \ 

  24. COMMENT:"      " \ 

  25. STACK:vmem_b#9F35FF:"buffer " \ 

  26. GPRINT:mem_b:MAX:"%12.0lf" \ 

  27. GPRINT:mem_b:AVERAGE:"%12.0lf\n" \ 

  28. COMMENT:"      " \ 

  29. STACK:vmem_c#00E3E3:"cache  " \ 

  30. GPRINT:mem_c:MAX:"%12.0lf" \ 

  31. GPRINT:mem_c:AVERAGE:"%12.0lf\n" \ 

  32. COMMENT:"      " \ 

  33. LINE1:veth0#6F00D2:"eth0   " \ 

  34. GPRINT:eth0:MAX:"%12.0lf" \ 

  35. GPRINT:eth0:AVERAGE:"%12.0lf\n" \ 

  36. COMMENT:"      " \ 

  37. LINE1:vload#00DB00:"負載    " \ 

  38. GPRINT:load:MAX:"%12.0lf" \ 

  39. GPRINT:load:AVERAGE:"%12.0lf\n" \ 

  40. -t "系統監控" \ 

  41. -v "總表" \ 

  42. -h 250 -w 400 \ 

  43. --lower-limit 0  --upper-limit 2000 --rigid \ 

  44. -y 500:1 

效果圖:

定義畫圖數據DEF:load=test.rrd:cpu:MAX
定義一個變量 load,他的值爲  test.rrd數據庫中 cpu表示的最大值,若數據庫中定義了 AVERAGE,MIN,LAST 等其餘統計方法,可自行修改。

數據處理CDEF:vload=load,1700,+  
如有須要處理的數據,能夠用 CDEF定義虛擬變量來進行進一步處理,數據處理啊採用 逆波蘭表達式。
COMMENT  :用來輸出一個字符串,輸出格式相似c語言。

打印報表 GPRINT:mem_c:AVERAGE:"%12.0lf\n"  
mem_c DEFCDFE 定義的變量AVERAGE爲統計方法,後面的輸出格式相似c語言
畫圖方法(3種):LINE(1|2|3),ARPE,STACK
AREA:填充

LINE{1|2|3}:線條,其中1,2,3 表示粗細

STACK:累加畫圖

其餘參數:

-s|--start-time繪圖開始時間,單位s。 能夠用NOW-秒數表示,也能夠直接用時間串。默認一天前
-e 繪圖結束時間單位秒

-t|--title 圖上顯示的標題

-v|--vertical-label Y軸上的說明文字
-w|--width pixels  繪圖區域,畫圖區寬的大小
-h|--height pixels  繪圖區域,畫圖區高的大小
-u|--upper-limit Y軸正值高度
-l|--lower-limit  Y軸負值高度
--no-minor 不要副格線
--upper-limit
-x|--x-grid GTM:GST:MTM:MST:LTM:LST:LPR:LFM 設置x軸刻度
-x|--x-grid nonex軸不顯示刻度
-y|--y-gridy軸刻度線的間距及刻度線數次數

-y|--y-grid none
y軸不顯示刻度
-Y|--alt-y-grid
最大限度的優化 Y 軸的刻度
-X|--units-exponent Y 軸的值進行調整 -1八、-1五、-十二、-九、-6 、-三、0、三、六、九、十二、1五、18 。0 表示以原值顯示,3 表示數值除以1000,也就是以 k 爲單位顯示,6 就是以M 顯示,9 就是以 G 顯示。
--right-axis 左軸倍數:右軸相加值  如: --right-axis -1,10 左軸 200 則右軸爲 -190
--right-axis-format %1.0lf  定義右軸格式相似c語言
-n|--font FONTTAG:size:[font]  FONTTAG但是  DEFAULT(所有),TITLE (標題)、AXIS(座標軸字體)、UNIT(Y軸單位字體)、LEGEND(圖例字體), size 字體大小,字體類型,如: -n TITLE:10:"/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc"
-c|--color COLORTAG#rrggbb[aa] BACK (背景)、  CANVAS(圖形背景) 、SHADEA(左側和頂部邊界)、SHADEB(右邊和底部邊框 )、 GRID, MGRID(網格)、 FONT(字體顏色)、 AXIS(座標軸)、FRAME(框架周圍)、ARROW (箭頭顏色)
-g|--no-legend  用於取消圖表下方的圖例
-b|--base value  默認 1k=1000 ,使用 –b 能夠進行調整,例如 –b 1024
VRULE:time#color[:legend]  垂直分割線
HRULE:value#color[:legend] 水平那個分割線
--imgformat  PNG  設置輸出類型,類型有   PNG|SVG|EPS|PDF 四種
-N|--no-gridfit   去除直角,是圖像看着更圓滑
-E|--slope-mode   增長平滑度
--zoom  2   對生成的圖形進行縮放,如 100X100 按 2倍放大 就變成 200X200
-W|--watermark 水印   在圖片下方加印水印
-L|--units-length 字符數 左Y軸左側和右Y軸右側分別增長多少個字符的寬度,右Y軸不設置不增長
--disable-rrdtool-tag 關閉右側 RRDTOOL \ TOBI OETIBER 水印

 加參數後效果圖:

畫圖參數:

  
  
  
  
  1. rrdtool graph test.png \ 

  2. --start now-300 \ 

  3. DEF:load=test.rrd:cpu:MAX \ 

  4. DEF:eth0=test.rrd:eth0:AVERAGE \ 

  5. DEF:mem_t=test.rrd:mem_total:AVERAGE \ 

  6. DEF:mem_f=test.rrd:mem_free:AVERAGE \ 

  7. DEF:mem_b=test.rrd:mem_buffer:AVERAGE \ 

  8. DEF:mem_c=test.rrd:mem_cache:AVERAGE \ 

  9. CDEF:vload=load,1700,+ \ 

  10. CDEF:veth0=1200,eth0,5,/,+ \ 

  11. CDEF:vmem_t=mem_t,1024,/ \ 

  12. CDEF:vmem_f=mem_f,1024,/ \ 

  13. CDEF:vmem_b=mem_b,1024,/ \ 

  14. CDEF:vmem_c=mem_b,1024,/ \ 

  15. COMMENT:"          名稱           最大值          平均值\n" \ 

  16. COMMENT:"      " \ 

  17. AREA:vmem_t#0000C6:"內存小  " \ 

  18. GPRINT:mem_t:MAX:"%12.0lf" \ 

  19. GPRINT:mem_t:AVERAGE:"%12.0lf\n" \ 

  20. COMMENT:"      " \ 

  21. AREA:vmem_f#00DB00:"空閒容量" \ 

  22. GPRINT:mem_f:MAX:"%12.0lf" \ 

  23. GPRINT:mem_f:AVERAGE:"%12.0lf\n" \ 

  24. COMMENT:"      " \ 

  25. STACK:vmem_b#9F35FF:"buffer " \ 

  26. GPRINT:mem_b:MAX:"%12.0lf" \ 

  27. GPRINT:mem_b:AVERAGE:"%12.0lf\n" \ 

  28. COMMENT:"      " \ 

  29. STACK:vmem_c#00E3E3:"cache  " \ 

  30. GPRINT:mem_c:MAX:"%12.0lf" \ 

  31. GPRINT:mem_c:AVERAGE:"%12.0lf\n" \ 

  32. COMMENT:"      " \ 

  33. LINE1:veth0#6F00D2:"eth0   " \ 

  34. GPRINT:eth0:MAX:"%12.0lf" \ 

  35. GPRINT:eth0:AVERAGE:"%12.0lf\n" \ 

  36. COMMENT:"      " \ 

  37. LINE1:vload#00DB00:"負載    " \ 

  38. GPRINT:load:MAX:"%12.0lf" \ 

  39. GPRINT:load:AVERAGE:"%12.0lf\n" \ 

  40. -t "系統監控" \ 

  41. -v "總表" \ 

  42. -h 250 -w 400 \ 

  43. --lower-limit 0  --upper-limit 2000 --rigid \ 

  44. -y 500:1 \ 

  45. -X 0 \ 

  46. --no-gridfit \ 

  47. --slope-mode \ 

  48. --zoom 1.5 \ 

  49. --right-axis-label "test" \ 

  50. --right-axis "2:10"  \ 

  51. --right-axis-format %1.0lf \ 

  52. --watermark "`date`" 

相關文章
相關標籤/搜索