Rrdtool

4,182 views
4,097 views

Published on

0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,182
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
109
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Rrdtool

  1. 1. RRDTOOL [email_address] Abel [email_address]
  2. 2. 講者簡介 <ul><li>楊禎葆 , 在一些論壇上慣用 abel/abelyang 等 ID, 目前任職於 TWNIC 技術組工程師 , 主要負責 </li></ul><ul><ul><li>DNS 的日常維護 </li></ul></ul><ul><ul><li>郵件 </li></ul></ul><ul><ul><li>系統管理 </li></ul></ul><ul><ul><li>網站開發及程式撰寫 (PERL,PHP,C) </li></ul></ul><ul><ul><li>RFC 編寫 , 協議研宄 </li></ul></ul><ul><ul><li>ENUM/VoIP/IP-PBX 之研究與應用 </li></ul></ul><ul><ul><li>教育訓練之規劃、教材編撰、講課 </li></ul></ul><ul><ul><li>客服 </li></ul></ul><ul><ul><li>網路 ( 有線、無線、憑證、路由、 VPN 等相關軟硬體 ) 管理 </li></ul></ul><ul><ul><li>ISO 27001 </li></ul></ul><ul><ul><li>… </li></ul></ul>
  3. 3. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  4. 4. 寫在一開始 <ul><li>學習 rrdtool 的必要預備知識 </li></ul><ul><ul><li>對系統需有一定的了解 </li></ul></ul><ul><ul><ul><li>系統有那些資訊 </li></ul></ul></ul><ul><ul><li>懂一 Script Language </li></ul></ul><ul><ul><ul><li>Shell Script 、 PHP 、 Perl 、 python… </li></ul></ul></ul><ul><ul><li>SNMP </li></ul></ul><ul><ul><ul><li>了解一般主機設備的 SNMP 設定方式及取值方法 </li></ul></ul></ul><ul><ul><li>監控的意義 </li></ul></ul><ul><ul><ul><li>觀測資料 </li></ul></ul></ul><ul><ul><ul><li>了解變異 </li></ul></ul></ul><ul><ul><ul><li>異常通知 </li></ul></ul></ul><ul><ul><ul><li>趨勢預測 </li></ul></ul></ul>
  5. 5. 縮寫 / 術語 <ul><li>DS Data Source </li></ul><ul><li>DST Data Source Type (gauge,counter…) </li></ul><ul><li>RRA Round Robin Archives </li></ul><ul><li>PDP Primary Data Point (update 的資料 </li></ul><ul><li>CF Consolidation Function (MIN/MAX/AVERAGE…) </li></ul><ul><li>CDP Consolidation Data Point, RRA 中合併數筆的 PDP 資料 </li></ul><ul><li>Resolution 一個粒度的時間範圍 </li></ul><ul><li>DEF data definiton </li></ul><ul><li>VDEF variable definition </li></ul><ul><li>CDEF data calculation </li></ul>
  6. 6. 綜觀 rrdtool <ul><li>作者 Tobi Oetiker ,同時他亦是 mrtg 的作者 </li></ul><ul><li>描繪觀測資料的軟體 </li></ul><ul><li>只要是帶時間性質之資料皆可借用 rrdtool 在觀測 </li></ul><ul><li>流程 </li></ul><ul><ul><li>建立 rrd file - create </li></ul></ul><ul><ul><li>更新 rrd data - update </li></ul></ul><ul><ul><li>繪圖 - graph </li></ul></ul><ul><ul><li>其他工具程式 </li></ul></ul>
  7. 7. 綜觀 rrdtool- 常見的繪圖資料 <ul><li>網路流量 </li></ul><ul><li>CPU </li></ul><ul><li>Disk </li></ul><ul><li>Memory </li></ul><ul><li>溫度 </li></ul><ul><li>Ping </li></ul><ul><li>Load Average </li></ul><ul><li>天氣 </li></ul><ul><li>Service Status </li></ul><ul><ul><li>Apache 、 DNS 、 Mail </li></ul></ul><ul><li>電信相關通話 </li></ul><ul><li>交通流量 </li></ul><ul><li>… </li></ul>
  8. 8. 綜觀 rrdtool- 其他工具程式 <ul><li>rrdtool </li></ul><ul><ul><li>update 更新資料 </li></ul></ul><ul><ul><li>updatev 同上 , 帶執行結果 </li></ul></ul><ul><ul><li>graph 繪圖 </li></ul></ul><ul><ul><li>dump 輸出 XML 資料 (STDOUT) </li></ul></ul><ul><ul><li>restore 將上列之 XML 資料轉成 .rrd </li></ul></ul><ul><ul><li>last 查詢最後一筆資料時間 ( 少用 ) </li></ul></ul><ul><ul><li>first 查詢第一筆資料時間 ( 少用 ) </li></ul></ul><ul><ul><li>info 顯示 rrd 檔案的資訊 </li></ul></ul><ul><ul><li>fetch 取得時間範圍內的 rrd 數值資料 </li></ul></ul><ul><ul><li>tune 修改 DS 屬性 </li></ul></ul><ul><ul><li>resize 修改 RRA 資料個數 </li></ul></ul><ul><ul><li>xport 取得時間範圍內之 DS, 可跨多個 rrd file </li></ul></ul>
  9. 9. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>相關工具 </li></ul><ul><li>範例 </li></ul>
  10. 10. 資料格式 - 類別 <ul><li>COUNTER </li></ul><ul><ul><li>累計值 </li></ul></ul><ul><ul><li>最後以秒計算 </li></ul></ul><ul><ul><li>數值為正數 </li></ul></ul>為什麼 8:10 資料值為 12 ? 7200 1224548100 08:15 3600 1224547800 08:10 -1500 1224547500 08:05 -600 1224547200 08:00 -300 1224546900 07:55 4500 1224546600 07:50 4200 1224546300 07:45 3900 1224546000 07:40 3600 1224545700 07:35 3300 1224545400 07:30 3000 1224545100 07:25 2700 1224544800 07:20 2400 1224544500 07:15 2100 1224544200 07:10 1800 1224543900 07:05 1500 1224543600 07:00 1200 1224543300 06:55 900 1224543000 06:50 600 1224542700 06:45 300 1224542400 06:40 ds-counter Time Time(hh:mm)
  11. 11. 資料格式 - 類別 <ul><li>DERIVE </li></ul><ul><ul><li>同 COUNTER </li></ul></ul><ul><ul><li>可處理負數 </li></ul></ul>7200 1224548100 08:15 3600 1224547800 08:10 -1500 1224547500 08:05 -600 1224547200 08:00 -300 1224546900 07:55 4500 1224546600 07:50 4200 1224546300 07:45 3900 1224546000 07:40 3600 1224545700 07:35 3300 1224545400 07:30 3000 1224545100 07:25 2700 1224544800 07:20 2400 1224544500 07:15 2100 1224544200 07:10 1800 1224543900 07:05 1500 1224543600 07:00 1200 1224543300 06:55 900 1224543000 06:50 600 1224542700 06:45 300 1224542400 06:40 ds-derive Time Time(hh:mm)
  12. 12. 資料格式 - 類別 <ul><li>ABSOLUTE </li></ul><ul><ul><li>數值為相對比值 </li></ul></ul><ul><ul><li>第一筆資料為對比 </li></ul></ul>7200 1224548100 08:15 3600 1224547800 08:10 -1500 1224547500 08:05 -600 1224547200 08:00 -300 1224546900 07:55 4500 1224546600 07:50 4200 1224546300 07:45 3900 1224546000 07:40 3600 1224545700 07:35 3300 1224545400 07:30 3000 1224545100 07:25 2700 1224544800 07:20 2400 1224544500 07:15 2100 1224544200 07:10 1800 1224543900 07:05 1500 1224543600 07:00 1200 1224543300 06:55 900 1224543000 06:50 600 1224542700 06:45 300 1224542400 06:40 ds-absolute Time Time(hh:mm)
  13. 13. 資料格式 - 類別 <ul><li>GAUGE </li></ul><ul><ul><li>直接數值 , 非以秒計 </li></ul></ul>7200 1224548100 08:15 3600 1224547800 08:10 -1500 1224547500 08:05 -600 1224547200 08:00 -300 1224546900 07:55 4500 1224546600 07:50 4200 1224546300 07:45 3900 1224546000 07:40 3600 1224545700 07:35 3300 1224545400 07:30 3000 1224545100 07:25 2700 1224544800 07:20 2400 1224544500 07:15 2100 1224544200 07:10 1800 1224543900 07:05 1500 1224543600 07:00 1200 1224543300 06:55 900 1224543000 06:50 600 1224542700 06:45 300 1224542400 06:40 ds-gauge Time Time(hh:mm)
  14. 14. 資料格式 - 建立檔案 <ul><li>建一個一個 RRD 檔案時需指定 </li></ul><ul><ul><li>rrd 檔名 (filename) </li></ul></ul><ul><ul><li>資料的更新頻率 , 預設為 300s (--step) </li></ul></ul><ul><ul><li>資料啟始時間 , 預設現在 , 建議此值可為 step 除盡 (-b) </li></ul></ul><ul><ul><li>建立 DS 內容 </li></ul></ul><ul><ul><ul><li>DS:ds-name:DST:Heartbeat:Min:Max , Ex: </li></ul></ul></ul><ul><ul><ul><li>DS:ds0:GAUGE:1200:-10000:10000 </li></ul></ul></ul><ul><ul><ul><li>DS:ds1:COUNTER:1200:0:U </li></ul></ul></ul><ul><ul><ul><li>宣告一個 ds0|ds1 的變數 , 資料類型為 GAUGE|COUNTER, 資料的有效範圍是 1200 ( 秒 ), 其值介於 -10000~10000|0~ 無限制 (U) </li></ul></ul></ul>rrdtool create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:dst arguments] [RRA:CF:cf arguments]
  15. 15. 資料格式 - 建立檔案 heartbeat <ul><li>Heartbeat ( 上頁例 DS 中的 1200), 若 PDP 未 update,1200 秒內皆以前一筆資料為數值 , 若超出 1200 秒 , 則視為未知 </li></ul><ul><ul><li>未知在 RRD 中以 UNKNOWN 來表示 </li></ul></ul><ul><ul><li>有時會以 UNKN 來表示 </li></ul></ul><ul><ul><li>在 fetch/graph 時以 Nan 表示 </li></ul></ul><ul><ul><li>在 CDEF (RPN) 中則以 UN 來表示 </li></ul></ul><ul><li>heartbeat 通常為 step 之倍數 </li></ul><ul><li>建議可為最大的 CDP 之 resolution, 可避免未更新時出現過多的 UNKNOWN </li></ul>
  16. 16. 資料格式 - 建立檔案 RRA <ul><li>宣告資料儲存的 合併特性 (CF) 、 連續性 (xff) 、 時間特性 (steps) 、 筆數 (rows) </li></ul><ul><li>若 step 為 300 秒時 </li></ul><ul><ul><li>RRA:AVERAGE:0.5:1:60 </li></ul></ul><ul><ul><ul><li>因為 step 為 1 故即是平時更新共存 60 筆 , 合計 5 小時資料 </li></ul></ul></ul><ul><ul><li>RRA:AVERAGE:0.8:6:30 </li></ul></ul><ul><ul><ul><li>在資料超過 60 筆時 , 每 6 筆合併成一筆 , 取其平均值來儲存為一筆 </li></ul></ul></ul><ul><ul><ul><li>此 6 筆五分鐘資料在合併時 , 需含有 0.8 (=80%) 比例 ( 6x0.8=4.8, 故指每 6 個 step 至少要有五個 step ) 有值才會為一個新的數值 (CDP), 則整個 RRA 值為未知 </li></ul></ul></ul><ul><ul><li>RRA:MAX:0.1:24:10 </li></ul></ul>rrdtool create filename [--start|-b start time] [--step|-s step] [DS:ds-name:DST:dst arguments] [ RRA: AVERAGE | MIN | MAX | LAST : xff : steps : rows ]
  17. 17. 資料格式 -RRA <ul><li>初學時對 RRA/PDP 較不容易理解 , 為 RRD 之核心 </li></ul><ul><li>RRA 即是設計資料之筆數 (rows) 及密度 (steps) 及總週期 </li></ul>RRA:AVERAGE:0.5:1:603 RRA:AVERAGE:0.5:6:603 RRA:AVERAGE:0.5:24:603 RRA:AVERAGE:0.5:288:800
  18. 18. 資料格式 - 再論 RRA <ul><li>RRA 數值儲存皆以距現在 (NOW) 多久來進行儲存 , 顯示時再帶出真實時間 </li></ul><ul><ul><li>即為 Round Robin 之特性 </li></ul></ul><ul><li>依據 Resolution, 畫圖時取值以可以表現最細的資料為優先 </li></ul><ul><ul><li>畫一天資料以 5 分鐘資料 288 筆為主 , 而不會用一天 1 筆的資料來畫 </li></ul></ul><ul><li>若以右表計算 , 此 RRA 時間總長為 12 天 , 而非 5m X 12 + 30m X 12 + … </li></ul>
  19. 19. 資料格式 - 再論 RRA
  20. 20. 資料格式 - 再論 RRA <ul><li>PDP 經過 CDP 後的資料變化 </li></ul>
  21. 21. 資料格式 - 建立檔案小結 <ul><li>了解資料的特性 , 以建立對應的 DST </li></ul><ul><ul><li>累計的數值資料或是獨立的數值 </li></ul></ul><ul><ul><li>數值的有效範圍 </li></ul></ul><ul><li>step 雖最小可至 1 秒 , 但適當的間隔還是需要的 </li></ul><ul><ul><li>300s/60s 最常用到 </li></ul></ul><ul><li>--start 最好對齊日期 , 也就是被 86400 除盡 </li></ul><ul><ul><li>若精於 PDP/CDP 算計 , 任何時間皆可 </li></ul></ul><ul><li>rrd 檔案建立後 size 即不會變化 </li></ul><ul><ul><li>基本大小 344 bytes </li></ul></ul><ul><ul><li>一個 DS 宣告佔 200 bytes </li></ul></ul><ul><ul><li>一個 PDP/CDP 佔 8 bytes (64bits) </li></ul></ul>
  22. 22. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  23. 23. 資料更新 <ul><li>rrdtool 的資料以 update 的指令來進行資料的更新 </li></ul><ul><li>資料更新時指定檔名 (filename) </li></ul><ul><ul><li>rrdtool update ex1.rrd -t ds0:ds1 1227628800:99:100 </li></ul></ul><ul><ul><li>rrdtool update ex1.rrd 1227628800:99:100 </li></ul></ul><ul><ul><li>rrdtool update ex1.rrd 1227628800@99:100 </li></ul></ul><ul><li>時間欄位可以 N 表示現在 </li></ul><ul><ul><li>rrdtool update ex1.rrd N:99:100 </li></ul></ul>rrdtool update filename --template|-t ds-name:ds-name:... time|N:value[:value...] at-time@value[:value...] [ time:value[:value...] ..]
  24. 24. 資料更新 - 資料來源 <ul><li>SNMP 取得 </li></ul><ul><ul><li>需自己寫對應的程式 </li></ul></ul><ul><ul><li>snmpget/snmpwalk 是取值的 command </li></ul></ul><ul><li>Script/Program 等取得 </li></ul><ul><ul><li>讀取系統的資訊 </li></ul></ul>
  25. 25. 資料更新 - 範例 IF-MIB::ifInOctets.1 = Counter32: 4161700199
  26. 26. 資料更新 - 範例執行結果 <ul><li>由上例可知 ,Script 需對字串處理有一定認識 </li></ul><ul><ul><li>不同的程式有不同的處理方法 </li></ul></ul><ul><li>此更新程式可借由 crontab 根據其 step 來進行更新 </li></ul>
  27. 27. 資料更新 -updatev <ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:0 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>create 後第一次更新 , 因 Counter 故仍無值 </li></ul><ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:1 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>10 秒內又做了更新 , 因在同一 step 內 , 且為 PDP 故僅回應成功 (0) </li></ul><ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:10 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>[1227772700]RRA[AVERAGE][1]DS[ds0] = 1.0000000000e+01 </li></ul><ul><li>10 秒時 , 做了數值 10 的更新 , 故每秒為 1 </li></ul><ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:10 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>處在 10~20 之間 </li></ul><ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:30 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>[1227772710]RRA[AVERAGE][1]DS[ds0] = 2.0000000000e+00 </li></ul><ul><li>第 20 秒時更新為 10, 故實際數值為 0 </li></ul>rrdtool create rrd/ex5.rrd -s 10 DS:ds0:COUNTER:20:0:10000 RRA:AVERAGE:0.5:1:600 RRA:AVERAGE:1:6:600 RRA:AVERAGE:0.5:12:600
  28. 28. <ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:60 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>[1227772720]RRA[AVERAGE][1]DS[ds0] = 3.0000000000e+00 </li></ul><ul><li>30 秒 , 前數為 10, 故 (60-10)/10=5 </li></ul><ul><li>[root@twnic rrd]# rrdtool updatev rrd/ex5.rrd N:100 </li></ul><ul><li>return_value = 0 </li></ul><ul><li>[1227772730]RRA[AVERAGE][1]DS[ds0] = NaN </li></ul><ul><li>[1227772740]RRA[AVERAGE][1]DS[ds0] = NaN </li></ul><ul><li>[1227772750]RRA[AVERAGE][1]DS[ds0] = 2.0000000000e+01 </li></ul><ul><li>[1227772760]RRA[AVERAGE][1]DS[ds0] = 2.0000000000e+01 </li></ul><ul><li>[1227772740]RRA[AVERAGE][6]DS[ds0] = ??? </li></ul><ul><li>60 秒時更新 , 前兩次未更新 , 故值皆視為 0.39… </li></ul><ul><li>集滿 6 次 , 依 RRA 設定計算 6 次之總合平均 </li></ul><ul><li>其 CDP 秒數定位為該 6 筆之最後一筆 </li></ul>
  29. 29. <ul><li>rrdtool 在安裝同時會裝 perl 、 python 、 tcl 相關模組 </li></ul><ul><li>Perl </li></ul><ul><li>python,tcl ? </li></ul>資料更新 - 其他語言 RRDs::update ($rrd,&quot;$time:$value&quot;); RRDs::create($rrd,&quot;–start&quot;, time()-1,&quot;–step&quot;, 300, &quot;DS:index:GAUGE:900:U:U&quot;, &quot;RRA:AVERAGE:0.5:1:600&quot; );
  30. 30. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  31. 31. 繪圖 <ul><li>繪圖是 rrdtool 最引人入勝的地方 </li></ul><ul><ul><li>至少表面上是這樣 </li></ul></ul><ul><ul><li>個人覺得 繪圖 +CDEF 才是最大的亮點 </li></ul></ul><ul><li>以 rrdtool graph 的指令開始作圖 , 大致可區分為 </li></ul><ul><ul><li>圖表的控制 </li></ul></ul><ul><ul><ul><li>繪圖的時間區磈 (-s –e …) </li></ul></ul></ul><ul><ul><ul><li>圖表描述 (-t –v ) </li></ul></ul></ul><ul><ul><ul><li>長寛及區磈控制 </li></ul></ul></ul><ul><ul><ul><li>X/Y 軸的刻度及高度 (-u –l –x –y …) </li></ul></ul></ul><ul><ul><li>資料取值 </li></ul></ul><ul><ul><ul><li>DEF 來源 </li></ul></ul></ul><ul><ul><ul><li>CDEF 運算 </li></ul></ul></ul><ul><ul><ul><li>VDEF 常數 </li></ul></ul></ul><ul><ul><li>作圖的控制 </li></ul></ul><ul><ul><ul><li>資料描繪的類型 </li></ul></ul></ul><ul><ul><ul><li>資料的註記 </li></ul></ul></ul>
  32. 32. 繪圖 - 時間控制 <ul><li>在繪圖時以 </li></ul><ul><ul><li>-s timestamp|now-{N{d|w|m|y}} 啟始時間 </li></ul></ul><ul><ul><li>-e 同上 結束時間 </li></ul></ul><ul><ul><li>預設為現在過去一天 </li></ul></ul><ul><ul><li>一小時的圖 </li></ul></ul><ul><ul><li>一年的圖 </li></ul></ul>
  33. 33. 繪圖 - 時間控制 <ul><li>依不同的時間長度 , rrdtool 在繪圖取值時 , 以能夠取得完整的 RRA 時間為主 (resolution) </li></ul><ul><ul><li>step=300, 若畫一天資料之 5 分之資料不足一天 , 但 30 分資料有則就用 30 分鐘資料來繪制 </li></ul></ul><ul><ul><li>可以 – S (--step) 來控制想要的 resolution, 但若資料量不能滿足該時段 , 則仍為回到上點來處理 </li></ul></ul><ul><ul><li>也可以用 DEF 的宣告來控制 resolution, 此做法後面會有較詳細的描述 </li></ul></ul><ul><ul><li>-S 1800 結果 : </li></ul></ul>
  34. 34. 繪圖 - 圖表描述 <ul><li>-t title 描述 </li></ul><ul><li>-v Y 軸描述 (X 軸為時間 ) </li></ul>
  35. 35. 繪圖 - 長寛及區磈控制 <ul><li>-w width 寛度 </li></ul><ul><li>-h height 高度 </li></ul><ul><ul><li>注意此長寛通常指圖區 , 也就是畫圖的那個部份 </li></ul></ul><ul><li>[ -c | --color COLORTAG#rrggbb[aa]] 控制圖表中的 </li></ul>-c &quot;BACK#000000&quot; -c &quot;SHADEA#000000&quot; -c &quot;SHADEB#000000&quot; -c &quot;FONT#DDDDDD&quot; -c &quot;CANVAS#202020&quot; -c &quot;GRID#666666&quot; -c &quot;MGRID#AAAAAA&quot; -c &quot;FRAME#202020&quot; -c &quot;ARROW#FFFFFF&quot;
  36. 36. 繪圖 - 長寛及區磈控制 COLORTAG BACK, 背景色 SHADEA , 上左的邊線 SHADEB , 下右的邊線 CANVAS, 圖區的背景色 M GRID , 主格線 GRID , 副格線 ARROW , 箭頭 FRAME ??? FRAME for the line around the color spots
  37. 37. 繪圖 - X/Y 軸的刻度及高度 <ul><li>數值高度 </li></ul><ul><ul><li>-u 控制繪圖時的正數高度 </li></ul></ul><ul><ul><li>-l 負數高度 </li></ul></ul><ul><ul><li>一般而言不需要特別指定數值高度 , rrd 會自己調整區問 </li></ul></ul>
  38. 38. 繪圖 - X/Y 軸的刻度及高度 <ul><li>刻度 </li></ul><ul><ul><li>在 rrd 中是一個較不容易了解的問題 </li></ul></ul><ul><ul><li>實際中不需要特別去定義自己所有的刻度 ( 時間或數值 ), rrd 會自己幫你計算 </li></ul></ul><ul><ul><li>若不要刻度值只要使用 </li></ul></ul><ul><ul><ul><li>--x-grid none </li></ul></ul></ul><ul><ul><ul><li>--y-grid none </li></ul></ul></ul>
  39. 39. 繪圖 - X 軸的刻度 <ul><li>[ -x | --x-grid GTM : GST : MTM : MST : LTM : LST : LPR : LFM ] </li></ul><ul><ul><li>看不懂 ? </li></ul></ul>-x HOUR:8:DAY:2:DAY:2:86400:%Y/%m/%d GTM:GST Grid Time 小格線一格多久時間 MTM:MST Major Grid Time 小格線一格多久時間 LTM:LST 每格多久放時間標記 LPR 標記要偏移多少時間 LFM strftime (date) 時間格式
  40. 40. -x HOUR:8:DAY:2:DAY:2:86400:%Y/%m/%d 主要格線一格為二天 次要格線 8 小時故共 6 小格 隔兩天輸出日期並日期移到 86400 秒 時間格式 %Y/%m/%d
  41. 41. 繪圖 - Y 軸的刻度 <ul><li>Y 軸的處理建議您完全交給 rrd 即可 </li></ul><ul><li>-X value 可控資料以 10^N 次方出現 (N=-18 、 -15 、 -12 、 -9 、 -6 、 -3 、 0 、 3 、 6 、 9 、 12 、 15 、 18) </li></ul>
  42. 42. 繪圖 <ul><li>繪圖參數何其多 </li></ul><ul><li>但常用的不多 </li></ul><ul><ul><li>-s start </li></ul></ul><ul><ul><li>-e end </li></ul></ul><ul><ul><li>-X 3 6 9 …for K M G </li></ul></ul><ul><ul><li>-w width </li></ul></ul><ul><ul><li>-h height </li></ul></ul><ul><ul><li>-u upper </li></ul></ul><ul><ul><li>-l lower </li></ul></ul><ul><ul><li>-t title </li></ul></ul><ul><ul><li>-S step </li></ul></ul><ul><ul><li>-n FONTTAG </li></ul></ul><ul><ul><li>-c COLORTAG </li></ul></ul><ul><li>但最重要的在 資料定義 (DEF,VDEF,CDEF, 及計算 (RPN) 以及 畫圖時的藝術細胞 </li></ul>
  43. 43. 繪圖 - DEF <ul><li>DEF 定義了要從什麼檔案取什麼值 </li></ul><ul><li>一個 graph 可以定義許多 DEF </li></ul><ul><ul><li>vname 變數名稱 </li></ul></ul><ul><ul><li>rrdfile 那個檔案 </li></ul></ul><ul><ul><li>ds-name 那個 DS </li></ul></ul><ul><ul><li>CF 因為一個 DS 可能有多個 CF 故要指出什麼 CF </li></ul></ul><ul><ul><li>step 一個 DS 可能有多個 RRA, 要告知要什麼 resolution </li></ul></ul><ul><ul><li>start 取這個 DS 中何時開始的值 </li></ul></ul><ul><ul><li>end 同上理 , 結束 </li></ul></ul><ul><li>reduce 減少資料密度 </li></ul>DEF: <vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>] [:start=<time>][:end=<time>][:reduce=< CF >]
  44. 44. 繪圖 - DEF <ul><li>DEF 最短的宣告只需 </li></ul><ul><ul><li>DEF: <vname>=<rrdfile>:<ds-name>:<CF> </li></ul></ul><ul><ul><li>接下來的參數 (Ex: step/start/end) 不一定用到 </li></ul></ul><ul><li>step 會影響取用那個 RRA </li></ul><ul><li>start/end </li></ul><ul><ul><li>start=timestamp/now-3w </li></ul></ul><ul><ul><li>end 和 start 相同表示法 </li></ul></ul>
  45. 45. 繪圖 - DEF <ul><li>承前例 , q2 之 DEF 加入 start/end </li></ul>DEF:q2=rrd/ex6.rrd:q:AVERAGE:step=86400:start=now-8d:end=now-4d
  46. 46. 繪圖 - VDEF <ul><li>意即一個常數 </li></ul><ul><li>RPN 可視為一種運算式 </li></ul>VDEF : vname = RPN expression
  47. 47. 繪圖 - CDEF <ul><li>VDEF 是 graph 中最重要的部份 , 其利用 RPN 方法 , 將一個表達式轉化的方法 </li></ul><ul><ul><li>a*-1 => a,-1,* </li></ul></ul><ul><ul><li>a+b => a,b,+ </li></ul></ul><ul><ul><li>a+b*c => a,b,c,*,+ </li></ul></ul><ul><ul><li>(a+b)*(c-d)=> a,b,+,c,d,-,* </li></ul></ul><ul><ul><li>a+b/c+d => a,b,c,/,+,d,+ => d,a,b,c,/,+,+ </li></ul></ul><ul><ul><li>x*(y+z*(a+b*(c-d))/e) => xyzabcd-*+*e/+* ( 本例于不寫逗號 ) </li></ul></ul><ul><ul><li>√ (a*b) /3 => a,b,*,SQRT,/ </li></ul></ul><ul><ul><li>if a = UN then a=0 => a,UN,0,a,IF </li></ul></ul><ul><li>掌握 RPN, 才能畫好圖 </li></ul>
  48. 48. 繪圖 - CDEF 概念說明 : 正數 : 劃數值 負數 : 畫佔比 佔比有 CDEF 計算而來
  49. 49. 繪圖 - CDEF <ul><li>左邊為計數 , 為 AREA+STACK, </li></ul><ul><li>右圖為佔比 , 為 CDEF, 可以觀察出分布情形 </li></ul>
  50. 50. 繪圖 - 圖磈 <ul><li>繪圖主要處理 CANVAS 及 legend </li></ul>
  51. 51. 繪圖 - 圖區的描繪 <ul><li>VRULE:time#color </li></ul><ul><ul><li>以某一時間點劃一垂直線 , 通常用在跨天跨月時月 </li></ul></ul><ul><li>HRULE:value#color </li></ul><ul><ul><li>以某一值劃一水平線 , 通常用在標示資料特性 , 如該線之上為 brust 之類等 </li></ul></ul><ul><li>TICK:vname#rrggbb[aa][:fraction[:legend]] </li></ul><ul><ul><li>可以在圖的資料區 , 畫上一個顏色 . 有點類似底色 , 但會更據 DSN 來晝 , 而不畫 0 值或是 UNKNOWN 值 </li></ul></ul><ul><ul><li>aa 是透明度 , 數值介於 ( 最透明 )00~ff( 最不透明 ) fraction        佔資料區的比例 , 以 0.0~1.0 表示 , 0.5 表示佔一半 legend                圖例名稱 </li></ul></ul>
  52. 52. 繪圖 - 圖區的描繪 <ul><li>AREA:value[#color][:[legend] </li></ul><ul><ul><li>在圖區中將數值至 0 間填滿對應顏色 </li></ul></ul><ul><ul><li>負值亦同 </li></ul></ul><ul><ul><li>AREA 在畫圖時存在覆蓋狀況 , 故對資料大小及處理需留意 </li></ul></ul><ul><li>STACK:vname#color[:legend] (deprecated) </li></ul><ul><ul><li>在 AREA 的基礎上堆疊上數值 </li></ul></ul><ul><ul><li>最下面為 AREA 其上可多個 STACK </li></ul></ul><ul><li>LINE[1|2|3]:value[#color][:[legend]] </li></ul><ul><ul><li>在圖區中依資料畫線 ,[1|2|3] 中的數字愈大表線愈粗 </li></ul></ul>
  53. 53. 繪圖 - 圖區的描繪 範例
  54. 54. 繪圖 - 圖例 / 說明 <ul><li>PRINT:vname:format </li></ul><ul><ul><li>直接輸出至 shell 下 </li></ul></ul><ul><ul><li>格式同 GPRINT </li></ul></ul><ul><li>GPRINT:vname:format </li></ul><ul><ul><li>寫在圖上 </li></ul></ul><ul><ul><li>GPRINT 的對齊需經由不斷的微調 ,rrd 不會主動對齊 </li></ul></ul><ul><ul><li>%N.Nle 科學記號 </li></ul></ul><ul><ul><li>%N.Nlf 純數字 </li></ul></ul><ul><ul><li>%s 依數字換算單位 1000k->1M </li></ul></ul><ul><ul><li>%S 同上 , 但統一度量 </li></ul></ul><ul><li>COMMENT:text </li></ul><ul><ul><li>一段文字 , 如右側之主機 , 最大 , 最小… </li></ul></ul>STACK:q2#FF00FF:&quot;DNS-B &quot; GPRINT:q2:MAX:&quot;%6.0lf&quot; GPRINT:q2:MIN:&quot;%6.0lf&quot; GPRINT:q2:AVERAGE:&quot;%6.0lf&quot; GPRINT:q2:LAST:&quot;%6.0lf &quot; COMMENT:&quot; 主機 最大 最小 平均 現在 &quot;
  55. 55. 繪圖 - SHIFT <ul><li>SHIFT:vname:offset </li></ul><ul><ul><li>要將一段資料 (vname) 平移一段時間 (offset) </li></ul></ul>
  56. 56. 繪圖 - SHIFT <ul><li>看得出一點東西但波動好像太大了 </li></ul><ul><ul><li>因為依據 resolution 來畫 , 故高低變化大 </li></ul></ul>
  57. 57. 繪圖 - SHIFT <ul><li>利用 CDEF 之 TREND 功能 , 計算月線 </li></ul><ul><ul><li>t1=q1,2592000,TREND </li></ul></ul>
  58. 58. 繪圖 - 漸層效果 <ul><li>沒有任何 function 可達到 </li></ul><ul><li>需重覆許多差一點點的 CDEF/ 顏色 以達到漸進效果 </li></ul>
  59. 59. 繪圖 - 結語 <ul><li>繪圖功能雖然龐大 , 但其實常用的就那幾個 </li></ul><ul><li>要畫漂亮的圖 , 不是資料很完美就是 graph 龐大 </li></ul><ul><li>畫圖時的配色好 , 更容易顯示一些質感 </li></ul><ul><li>X 軸資料在時間而長時易有問題 (P.49), 此時需使用 – x 參數來調整 </li></ul>
  60. 60. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  61. 61. 相關工具 <ul><li>rrdtool tune 調整 DS </li></ul><ul><li>rrdtoo resize 調整 RRA 數量 </li></ul><ul><li>rrdtool fetch 抓取 RRA 的數值 </li></ul><ul><li>rrdtool info 查看 rrd 檔案資訊 </li></ul>
  62. 62. 相關工具 - tune rrdtool tune filename [--heartbeat|-h ds-name:heartbeat] [--data-source-type|-d ds-name:DST] [--data-source-rename|-r old-name:new-name] [--minimum|-i ds-name:min] [--maximum|-a ds-name:max] [ … 其他略 ] [root@twnic rrd]# rrdtool tune example.rrd DS[q] typ: GAUGE hbt: 86400 min: 0.0000 max: 1000 .0000 DS[r] typ: GAUGE hbt: 86400 min: 0.0000 max: 1000 .0000 [root@twnic rrd]# rrdtool tune example.rrd -h q:3 [root@twnic rrd]# rrdtool tune example.rrd DS[q] typ: GAUGE hbt: 3 min: 0.0000 max: 1000.0000 DS[r] typ: GAUGE hbt: 86400 min: 0.0000 max: 1000 .0000
  63. 63. 相關工具 - resize rrdtool resize filename rranum GROW|SHRINK rows [root@twnic rrd]# rrdtool info example.rrd |grep row # 查看 rra 檔案的訊息 rra[0].rows = 644000 # 0 為 rranum, 可知有 644000 筆 rra[0].pdp_per_row = 1 rra[1].rows = 72000 rra[1].pdp_per_row = 30 rra[2].rows = 36000 rra[2].pdp_per_row = 120 rra[3].rows = 18000 rra[3].pdp_per_row = 1440 [root@twnic rrd]# rrdtool resize example.rrd 0 SHRINK 604000 # SHRINK 意為縮減 You have new mail in /var/spool/mail/root [root@twnic rrd]# rrdtool info resize.rrd |grep row # 調整過後的檔案會另存 rra[0].rows = 40000 rra[0].pdp_per_row = 1 rra[1].rows = 72000 rra[1].pdp_per_row = 30 rra[2].rows = 36000 rra[2].pdp_per_row = 120 rra[3].rows = 18000 rra[3].pdp_per_row = 1440
  64. 64. 相關工具 - fetch rrdtool fetch filename.rrd CF [-r|--resolution resolution] [-s|--start start] [-e|--end end] [root@twnic rrd]# rrdtool fetch example.rrd AVERAGE -s -33d -e -32d -r 300 q r 1225048500: 2.6199000000e+02 2.6199000000e+02 1225051500: 2.4797333333e+02 2.4797333333e+02 1225051800: 2.6394666667e+02 2.6394666667e+02 1225052100: 2.4705666667e+02 2.4705666667e+02 # 以下略 # 這個內容經過一點字串處理後即可再形成 rrdtoo; update 指令
  65. 65. 相關工具 - info [root@twnic rrd]# rrdtool info example.rrd # 因篇幅關係 , 不重要的這裏不列進來 rrd_version = “0003” # 版本 ,rrdtool 1.0.X 此欄位 0001, 舊不容新 step = 300 last_update = 1227827402 ds[q].type = &quot;GAUGE&quot; ds[q].minimal_heartbeat = 86400 ds[q].min = 0.0000000000e+00 ds[q].max = 1.0000000000e+03 ds[q].last_ds = “UNKN” # GAUGE 不需知道最後一次的值是什麼 ds[q].value = 7.2200000000e+02 # COUNTER 等 last_ds 就會有值 ds[q].unknown_sec = 0 rra[3].cf = &quot;AVERAGE&quot; rra[3].rows = 6 000 rra[3].pdp_per_row = 288 rra[3].xff = 5.0000000000e-01 rra[3].cdp_prep[0].value = 1.5240152333e+05 rra[3].cdp_prep[0].unknown_datapoints = 0 rra[3].cdp_prep[1].value = 1.5240152333e+05 rra[3].cdp_prep[1].unknown_datapoints = 0
  66. 66. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  67. 67. 精髓 - RPN <ul><li>Reverse Polish Notation </li></ul><ul><ul><li>一個表達式 , </li></ul></ul><ul><ul><li>避免使用括號 </li></ul></ul><ul><ul><li>數字在前 , 運算元在後 </li></ul></ul><ul><li>CDEF 的計算皆使用 RPN 概念 </li></ul><ul><li>RPN (CDEF) 運算元字串需以大寫型式出現 </li></ul>
  68. 68. 精髓 - RPN <ul><li>a*-1 => a,-1,* </li></ul><ul><li>a+b => a,b,+ </li></ul><ul><li>a+b*c => a,b,c,*,+ </li></ul><ul><li>(a+b)*(c-d)=> a,b,+,c,d,-,* </li></ul><ul><li>a+b/c+d => a,b,c,/,+,d,+ => d,a,b,c,/,+,+ </li></ul><ul><li>x*(y+z*(a+b*(c-d))/e) => xyzabcd-*+*e/+* ( 本例于不寫逗號 ) </li></ul><ul><li>√ (a*b) /3 => a,b,*,SQRT,/ </li></ul><ul><li>if a = UN then a=0 or a => a,UN,0,a,IF </li></ul><ul><li>F=9/5*C+32 =>CDEF:far=9,5,/,cel,*,32,+ </li></ul><ul><li>N 開根號 *10 =>N,SQRT,10 </li></ul>
  69. 69. 精髓 - RPN <ul><li>&quot;CDEF:tt1_10=t1,0.90,*&quot; &quot;AREA:tt1_10#E10000&quot; </li></ul><ul><li>&quot;CDEF:tt1_15=t1,0.85,*&quot; &quot;AREA:tt1_15#D20000&quot; </li></ul><ul><li>&quot;CDEF:tt1_20=t1,0.80,*&quot; &quot;AREA:tt1_20#C30000&quot; </li></ul><ul><li>&quot;CDEF:tt1_25=t1,0.75,*&quot; &quot;AREA:tt1_25#B40000&quot; </li></ul><ul><li>&quot;CDEF:tt1_30=t1,0.70,*&quot; &quot;AREA:tt1_30#A50000&quot; </li></ul><ul><li>&quot;CDEF:tt1_35=t1,0.65,*&quot; &quot;AREA:tt1_35#960000&quot; </li></ul><ul><li>&quot;CDEF:tt1_40=t1,0.60,*&quot; &quot;AREA:tt1_40#870000&quot; </li></ul><ul><li>&quot;CDEF:tt1_45=t1,0.55,*&quot; &quot;AREA:tt1_45#780000&quot; </li></ul><ul><li>&quot;CDEF:tt1_50=t1,0.50,*&quot; &quot;AREA:tt1_50#690000&quot; </li></ul><ul><li>&quot;CDEF:tt1_55=t1,0.45,*&quot; &quot;AREA:tt1_55#5A0000&quot; </li></ul><ul><li>&quot;CDEF:tt1_60=t1,0.40,*&quot; &quot;AREA:tt1_60#4B0000&quot; </li></ul><ul><li>&quot;CDEF:tt1_65=t1,0.35,*&quot; &quot;AREA:tt1_65#3C0000&quot; </li></ul><ul><li>&quot;CDEF:tt1_70=t1,0.30,*&quot; &quot;AREA:tt1_70#2D0000&quot; </li></ul><ul><li>&quot;CDEF:tt1_75=t1,0.25,*&quot; &quot;AREA:tt1_75#180000&quot; </li></ul><ul><li>&quot;CDEF:tt1_80=t1,0.20,*&quot; &quot;AREA:tt1_80#0F0000&quot; </li></ul><ul><li>&quot;CDEF:tt1_85=t1,0.15,*&quot; &quot;AREA:tt1_85#000000&quot; </li></ul>
  70. 70. 精髓 - RPN <ul><li>CDEF:workhour=LTIME,86400,%,32401,64800,LIMIT,UN,0,q,IF </li></ul><ul><li>IF 資料時間 (LTIME) % 86400 餘數介於 (LIMIT) 32401~64800 間 , 若資料會 UNKNOWN 則數值設為 0, 不然就維持 </li></ul><ul><li>那週一 ~ 週五如何計算 ? </li></ul>
  71. 71. <ul><li>布林運算元 : GT 、 GE 、 LT 、 LE 、 EQ 、 NE 、 </li></ul><ul><li>特殊值 : UN </li></ul><ul><li>條件運算元 : IF </li></ul><ul><li>數學運算元 : + 、 - 、 * 、 / 、 % 、 SIN, COS, LOG, EXP, SQRT 、 FLOOR, CEIL 、 ATAN 、 ATAN2 、 DEG2RAD, RAD2DEG </li></ul><ul><li>資料集運算元 , 所謂資料集( sets ) , 就是指多個資料。 SORT 、 REV 、 AVG 、 TREND </li></ul><ul><li>時間 NOW 、 TIME 、 LTIME </li></ul><ul><li>堆疊操作符 : POP 、 DUP 、 EXC </li></ul><ul><li>如果你真得無法體會 RPN, 網路上有自動轉換的 Tool </li></ul>
  72. 72. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  73. 73. rrdtool/mrtg <ul><li>mrtg 資料和 rrd 差別 </li></ul><ul><ul><li>mrtg 有配置但 rrd 沒有 ,cfg 檔較容易了解 </li></ul></ul><ul><ul><li>mrtg 能根據設定進行資料採集 , 但 rrd 需寫程式 </li></ul></ul><ul><ul><li>mrtg 每次運行後更新圖檔及資料 </li></ul></ul><ul><ul><ul><li>三個 log 檔 , 這三個 log 不是改變一個數字而以 , 而是許多 </li></ul></ul></ul><ul><ul><ul><li>一至四張圖 </li></ul></ul></ul><ul><ul><li>mrtg 有固定的資料模式 </li></ul></ul><ul><ul><li>mrtg 僅有兩種數據且時間模式固定 </li></ul></ul><ul><ul><li>mrtg 作圖較簡單 </li></ul></ul><ul><ul><li>mrtg 最短僅能進行五分鐘的更新頻率 </li></ul></ul>
  74. 74. rrdtool/mrtg mrtg2rrd ? <ul><li>如果你的 mrtg 運行的很好 , 也符合需求 , 不一定要昇級 </li></ul><ul><li>若要升級 , 修改 / 增加 mrtg 的 cfg 設定 </li></ul><ul><li>再運行 mrtg 後它即會將原來的 log 資料轉成 rrd </li></ul><ul><li>可用 rrdtool info 查看 rrd file 的結構 </li></ul><ul><li>Google search log2rrd 可以找到手動的轉檔程式 </li></ul>LogFormat: rrdtool 告訴 mrtg 資料要改用 rrd LibAdd: /usr/lib/perl5/site_perl/5.8.8/i686-linux 要讓 mrtg 知道 RRDs.pm 在哪
  75. 75. 大綱 <ul><li>綜觀 rrdtool </li></ul><ul><li>資料格式 </li></ul><ul><li>資料更新 </li></ul><ul><li>繪圖 </li></ul><ul><li>相關工具 </li></ul><ul><li>精髓 - RPN (CDEF) </li></ul><ul><li>rrdtool/mrtg </li></ul><ul><li>範例 </li></ul>
  76. 76. 範例 <ul><li>今日課程資料 http://rrd.twnic.tw </li></ul><ul><li>範例程式同上 </li></ul><ul><li>http://rrd.twnic.tw/images/list.cgi </li></ul>
  77. 77. <ul><li>謝謝 </li></ul><ul><li>問題與討論 </li></ul>

×