Previous Article Next Article 我要怎麼用 RRDTOOL 來取代 MRTG 畫流量圖
Posted in Network

我要怎麼用 RRDTOOL 來取代 MRTG 畫流量圖

我要怎麼用 RRDTOOL 來取代 MRTG 畫流量圖 Posted on 2013 年 07 月 18 日Leave a comment

Google 搜尋一下繁體中文的網站就有一些不錯的 RRDTOOL 教學文章,看一下了解基本概念就夠了 (如果有 MRTG 底子就更容易上手),也不用完全了解啦,因為新手嘛,先體驗比較會有感覺

RRDTOOL 應用比較讓大家知道的就是 cacti 啦,安裝它來玩玩看就可以知道 RRDTOOL 可以作到的比 MRTG 更活,我們再從 cacti 中學習怎麼直接用 RRDTOOL 來畫

會有這想法是因為

  1. MRTG 實在太耗資源了
  2. 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 \
# transffic_in 代表自行定義的變數
# 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 地方會有一紅色水平線,讓我辨識何時超過了流量

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *