Google 搜尋一下繁體中文的網站就有一些不錯的 RRDTOOL 教學文章,看一下了解基本概念就夠了 (如果有 MRTG 底子就更容易上手),也不用完全了解啦,因為新手嘛,先體驗比較會有感覺
RRDTOOL 應用比較讓大家知道的就是 cacti 啦,安裝它來玩玩看就可以知道 RRDTOOL 可以作到的比 MRTG 更活,我們再從 cacti 中學習怎麼直接用 RRDTOOL 來畫
會有這想法是因為
- MRTG 實在太耗資源了
- cacti 管理介面實在太複雜了(逛來逛去有時會迷路呢),不過畫圖的介面確實好看
RRDTOOL 基本功能就是 create (產生 RRD檔)、update (更新數值到 RRD裡)、graph (把RRD數據畫成圖)
我們在 cacti 中知道怎麼 rrdtool create RRD、rrdtool graph 的指令參數
在 cacti 的 Data Sources 打開 Turn On Data Source Debug Mode,可以得到它怎麼產生 Network traffic 所要的 RRD 檔
Data Source Debug
/usr/bin/rrdtool create \ /var/www/cacti/rra/1.1.1.1_traffic_in_10.rrd \ --step 300 \ DS:traffic_in:COUNTER:600:0:U \ DS:traffic_out:COUNTER:600:0:U \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:6:700 \ RRA:AVERAGE:0.5:24:775 \ RRA:AVERAGE:0.5:288:797 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:288:797 \
# COUNTER 適用 流量,而 GAUAGE 適用 CPU
# 第一個 600 代表有效期 (heartbeat),在 12:00 要產生資料而沒有產生,前後 300 秒 (共 600 秒)的平均值會算成 12:00 的值,如果都沒有值,則會成為 “UNKNOWN” (UN),而 0:U 代表 MIN:MAX,U = 不限範圍
# 0.5 代表 50% 的 consolidated points 可能為 UNKNOWN
# 1 代表 1 * 300s / 60s = 5 minutes
# 6 代表 6 * 300s / 60s = 30 minutes
# RRA 裡的 600 代表存 600 筆
Graph Management 或 graphs (view) 的地方就有 rrdtool graph 指令參數
RRDTool Command:
/usr/bin/rrdtool graph - \ --imgformat=PNG \ --start=-86400 \ --end=-300 \ --title='1.1.1.1 - Traffic - Fa0/1' \ --rigid \ --base=1000 \ --height=120 \ --width=500 \ --alt-autoscale-max \ --lower-limit='0' \ --vertical-label='bits per second' \ --slope-mode \ --font TITLE:10: \ --font AXIS:7: \ --font LEGEND:8: \ --font UNIT:7: \ DEF:a="/var/www/cacti/rra/1.1.1.1_traffic_in_10.rrd":'traffic_in':AVERAGE \ DEF:b="/var/www/cacti/rra/1.1.1.1_traffic_in_10.rrd":'traffic_out':AVERAGE \ CDEF:cdefa='a,8,*' \ CDEF:cdefe='b,8,*' \ AREA:cdefa#00CF00FF:"Inbound" \ GPRINT:cdefa:LAST:" Current\:%8.2lf %s" \ GPRINT:cdefa:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefa:MAX:"Maximum\:%8.2lf %s\n" \ LINE1:cdefe#002A97FF:"Outbound" \ GPRINT:cdefe:LAST:"Current\:%8.2lf %s" \ GPRINT:cdefe:AVERAGE:"Average\:%8.2lf %s" \ GPRINT:cdefe:MAX:"Maximum\:%8.2lf %s\n"
還有 Linux load average ,或 CPU percentage,這些 cacti 都有範本可參考,很方便的
而 rrdtool update 則
rrdtool update N:In:Out
N 就是 N 或是給它現在的 timestamp
如果用 perl,就用 perl-rrdtool 的,perl 用 library 會比用指令快
建 RRD 檔
RRDs::create("$rrdfile", "-s 300", "DS:In:COUNTER:600:0:100000000", "DS:Out:COUNTER:600:0:100000000", "RRA:AVERAGE:0.5:1:600", "RRA:AVERAGE:0.5:6:700", "RRA:AVERAGE:0.5:24:775", "RRA:AVERAGE:0.5:288:797", "RRA:MAX:0.5:1:600", "RRA:MAX:0.5:6:700", "RRA:MAX:0.5:24:775", "RRA:MAX:0.5:288:797");
曾試過以下的,失敗,可別把 rrdfile 放到下一行
RRDs::create( "$rrdfile", ... ... );
更新資料
RRDs::update("$rrdfile", "N:$in:$out");
畫圖
RRDs::graph("$pngfile", "--start","-$begin", "--end","-$end", "--title","$rrdtitle", "--imgformat","PNG", "--rigid", "--base","1000", "--height","120", "--width","500", "--alt-autoscale-max", "--lower-limit=0", "COMMENT:$from - $to\\c", "COMMENT:$titlecomment\\c", "COMMENT: \\n", "--vertical-label","bits per seconds", "--slope-mode", "-nTITLE:12:$trafficpath/font/default.ttf", "-nAXIS:7:", "-nLEGEND:8:", "-nUNIT:7:", "DEF:a=$rrdfile:In:AVERAGE", "DEF:b=$rrdfile:Out:AVERAGE", "CDEF:cdefa=a,8,*", "CDEF:cdefe=b,8,*", "AREA:cdefa#00CF00FF:Inbound", "GPRINT:cdefa:LAST: Current\\:%8.2lf %s", "GPRINT:cdefa:AVERAGE:Average\\:%8.2lf %s", "GPRINT:cdefa:MAX:Maximum\\:%8.2lf %s\\n", "LINE1:cdefe#002A97FF:Outbound", "GPRINT:cdefe:LAST:Current\\:%8.2lf %s", "GPRINT:cdefe:AVERAGE:Average\\:%8.2lf %s", "GPRINT:cdefe:MAX:Maximum\\:%8.2lf %s\\n", "COMMENT: \\n", "COMMENT:$comment\\c", "HRULE:$hrule#FF0000FF:");
day / week / month / year 不同就在於
1. png 檔名
# day 就是 XXX-day.png
# week 就是 XXX-week.png
# month 就是 XXX-month.png
# year 就是 XXX-year.png
2. –start 與 –end 時間
# day 就是–start=-86400,–end=300
# week 就是–start=604800,–end=1800
# month 就是–start=2678400,–end=7200
# year 就是–start=33053184,–end=86400
3. COMMENT: 加一下註解
# day 就是 Daily (5 Minute Average)
# week 就是 Weekly (30 Minute Average)
# month 就是 Monthly (2 Hour Average)
# year 就是 Yearly (1 Day Average)
-nTITLE:12:指定ttf檔案,我要讓圖片 title 呈現中文字,也可以直接用-nDEFAULT: 連其它地方都是套用這個預設的字型
HRULE:3#FF0000FF:,設定為 3,也就是說 3mbps 地方會有一紅色水平線,讓我辨識何時超過了流量
留言