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 地方會有一紅色水平線,讓我辨識何時超過了流量
留言