蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 系统管理


    

蓝森林 http://www.lslnet.com 2006年8月18日 15:18


[教學]中的教學(二) RRDTOOL 1.2 更新項目

RRDTOOL 1.2.x 的差異

[b]1.說明[/b]
自從上次的 rrdtool 教學後,頗受好評,不過實至今日, rrdtool 巳從 1.0.x 昇級至 1.2.x 版本,這個 1.2.x
版本基本除了 graph 外,並沒有太多太大的變動,而在 graph 上新增了許多功能,本文的目的主要是向大家解釋
這些新的東西,至於原有的東西您可自參考
http://phorum.study-area.org/viewtopic.php?t=18496 之說明.

[b]2.安裝[/b]
這一版的安裝是較費事的,因為它用了幾個較少用的東西(對我而言真的是較少用),你可以在
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/?M=D
下載到最新版的 tarball , 這個 URL 下有一個 libs/ 的目錄內的東西最好也都一次下載,因為裝 1.2.x
版的 rrdtool 一定會用到. contrib/ 下的東西也值得有興趣的人好好研究.

下載後的東西,請先安裝 libs 下的東西,基本上的裝法就是(每一個 tarball 都要)
[code]
$>;./configure --help                   #看好好看一下有什麼要注意的
$>;./configure --prefix=/usr          #把東西裝到 /usr 目錄下
$>;make ; make install                #編譯及安裝

請注意,若裝 cgilib-0.5 時, make install 後,需再將目錄內的
cgi.h  copy 至 /usr/include 方可,不然 ./configure 時會出錯
[/code]

是的,的確有點費事,且有些 libs 裝起來也要花不少時間,只好耐心等囉.
至於 rrdtool 所需的一些 libs 裝到 /usr 下.在您裝 rrdtool 時, ./configure 就可以少打很多字
[code]
#rrdtool 的安裝
$>;./configure --prefix=/usr --disable-rrdcgi   #我個人不用 rrdcgi,所以您一定要先看 help
$>;make
$>;make install
$>;rrdtool -v
[root@log doc]# /tmp/bin/rrdtool -v
RRDtool 1.2.8  Copyright 1997-2005 by Tobias Oetiker <tobi@oetiker.ch>;
               Compiled 週三  5月 25 15:23:18 CST 2005

Usage: rrdtool [options] command command_options

Valid commands: create, update, updatev, graph, dump, restore,
                last, first, info, fetch, tune, resize, xport

RRDtool is distributed under the Terms of the GNU General
Public License Version 2. (www.gnu.org/copyleft/gpl.html)

For more information read the RRD manpages
[/code]




[b]感覺上的差異[/b]
1.2.x 版的 rrdtool 繪圖不再使用 GD , 而使用 libart 及 freetype 等功能來畫圖,所以,我個人在用起
來時,感覺速度上較 1.0.x 版慢了許多,
[code]
#以 1.2.8 畫 100 張圖,time 所計算之時間
real    1m23.076s
user    0m52.855s
sys     0m7.021s
#以 1.0.42 畫 100 張圖,time 所計算之時間
real    0m27.234s
user    0m21.629s
sys     0m5.209s
[/code]
所以,可以明顯感覺到 1.2.x 較 1.0.x 版本畫圖上慢上了許多,一般公認大概差了 2~3 倍的時間,主要因為
作者(oetiker) 要讓 rrdtool 的 output 可以產生 PDF 檔,所以才造成這種現象,至於使用上的取捨,就看
您的需求囉, 並沒有說新版的一定會較好這種理由.



[b]新的東西(以下介紹皆針對 rrdtool graph)[/b]
DEF:<vname>;=<rrdfile>;:<ds-name>;:<CF>;[:step=<step>;][:start=<time>;][:end=<time>;][:reduce=<CF>;]
VDEF:vname=RPN expression
SHIFT:vname:offset
[TICK:vname#rrggbb[aa][:[fraction][]]]
可以產生 PDF 檔
[-n|--font FONTTAG]

這裏面的文字意義如下:

[b]更具彈性空間的定義特性 DEF [/b]
DEF:<vname>;=<rrdfile>;:<ds-name>;:<CF>;[:step=<step>;][:start=<time>;][:end=<time>;][:reduce=<CF>;]
定義從那一個 RRD FILE取出裏面的那一個 DS 資料(Data Source Name,DSN)
vname: rrdtool graph 用的變數名稱,可任意取名

rrdfile: 意即那個 rrd 檔案
ds-name: 在建立 RRD FILE 時,用的名稱
CF: 即 MAX/AVERAGE/MIN/LAST 等
*step:         在繪圖時,資料的取用原則,例如,你的 RRD FILE 在建立時,設了 --step 為 300 秒,所以每
        個資料點距為 300 秒,畫一小時共有 12 點,此時,在 DEF 定義 step=1800, 畫一小時就會變
        成兩個點,而其取用則試 CF 而定,例如 CF 為 AVERAGE, 則合併的 6 個點 (1800=300x6),
        其會畫出平均值出來(官網是這麼講,但是我設了做不出來效果,不知原因何在)
*start:        資料起始時間,如果你在 graph 時,以時間參數畫圖,但你只想要某個 DSN 只畫某一段時間,可
        以利用此參數來做,例如, start=end-1w , 即表示要畫這個 DSN 一個星期內的資料,而其他的
        畫全部的資料
*end:        其意同 start, 旨在定義時間區間



[b]標示水平線 VDEF[/b]
VDEF:vname=RPN expression
例如 ,VDEF:avg=mydata,AVERAGE ,
avg 如同一般的 DSN, 而 mydata 為 DEF 之 DSN,AVERAGE 表示求取平均值(時間區間內),並在圖上畫出
之一橫線,以供比較(sample5),

[b]時間徧移 SHIFT[/b]
SHIFT:vname:offset
這個功能較特別,主要在 "徧移" 整個資料,例如,你要把過去三個星期以來的數據互相比較時:
DEF:out0=$RRDFILE:ifOutOctets$INT:AVERAGE:start=end-1w  \                #現在以前的七天
DEF:out1=$RRDFILE:ifOutOctets$INT:AVERAGE:start=now-2w:end=now-1w \         #8-14 天前
DEF:out2=$RRDFILE:ifOutOctets$INT:AVERAGE:start=now-3w:end=now-2w \         #15-21 天前
SHIFT:out1:604800        \        # out2 的資料時間向後移  604800 秒,意即一週
SHIFT:out2:1209600        \        # out3 的資料時間向後移 1209600 秒,意即二週

所以我們可以想像,同一個 DSN 我們有三段數據,每段各代表一週的時間,把時間對齊後,我們就可
以週與週間互相比較了,所以像 "與上月比較","與去年同期比較","特定時間區間互相比較",也都可
以信手拈來,只要弄清楚 DEF 中的 start/end 用法,再加上 SHIFT 的 offset 功能,即可達成

[b]透明處理 TICK [/b]
[TICK:vname#rrggbb[aa][:[fraction][]]]
可以在圖的資料區,畫上一個顏色.有點類似底色,但會更據 DSN 來晝,而不畫 0 值或是 UNKNOWN 值
vname        即 DSN , 不過看來畫起來沒有什麼意義
#rrggbb[aa]        rgb 即顏色, aa 是透明度,數值介於 (最透明)00~ff(最不透明)
fraction        佔資料區的比例,以 0.0~1.0 表示, 0.5 表示佔一半
legend                圖例名稱

[b] 可以產生 PDF 檔 [/b]
以 rrdtool graph xxx.pdf .... 即可產生 PDF 格式之檔案

[b]變更字型及字體的大小 [/b]
[-n|--font FONTTAG]
FONTTAG        依圖上的地區,分為 DEFAULT/TITLE/AXIS/UNIT/LEGEND, DEFAULT 代表後四種
size        為字體大小
font        使用那個 TTF 字型檔 (請注意官方 1.2.8 版並不支援中文處理)
範例:
[code]
-n TITLE:20:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \
-n AXIS:10:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \
-n UNIT:30:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \
-n LEGEND:14:/usr/share/fonts/zh_TW/TrueType/bkai00mp.ttf \
[/code]


[b]以例子來說明[/b]
1. 原來標準原圖(in/out 流量)
[img]http://211.72.210.251/tmp/sample1_month.png[/img]

2. 使用 1.2.8 的 start=end-1w 功能(即只要畫最近七天)
[img]http://211.72.210.251/tmp/sample2_month.png[/img]


3. 使用 1.2.8 的 start/end 功能,依最近7/14/21天來畫圖
[img]http://211.72.210.251/tmp/sample3_month.png[/img]


4. 使用 1.2.8 的 step 功能...但做不出來
[img]http://211.72.210.251/tmp/sample4_month.png[/img]

5. 使用 1.2.8 的 VDEF 功能...in 畫出最大線, out 畫出平均線
[img]http://211.72.210.251/tmp/sample5_month.png[/img]

6. 使用 1.2.8 的 start/end + SHIFT 功能畫出週與週間的比較
[img]http://211.72.210.251/tmp/sample6_month.png[/img]

7. 使用 1.2.8 的 TICK 功能畫出週與週間的比較
[img]http://211.72.210.251/tmp/sample7_month.png[/img]

8. 使用 1.2.8 的 PDF 輸出
[img]http://211.72.210.251/tmp/sample8_month.png[/img]

8. 使用 1.2.8 的字型及大小的處理
[img]http://211.72.210.251/tmp/sample9_month.png[/img]

以上網頁 及 script 程式,您可在 http://211.72.210.251/tmp/ 取得

結語
尚無...要讓他支援中文好辛苦呀 ..


上篇我才貼出來就不一分鐘變原創...但這篇會多少

[教學]中的教學(二) RRDTOOL 1.2 更新項目

很好啊

[教學]中的教學(二) RRDTOOL 1.2 更新項目

還有幾個小地方沒有寫完...
因為 1.2.x 更動的地方不少, 我沒有太多時間一一比對
Change Log 也看不出太多來

[教學]中的教學(二) RRDTOOL 1.2 更新項目

嗯~都看完了,除了上述講得,畫圖的部份就這些差別,並沒有太多
另一部份就是 CDEF 了,不過講這個恐怕過於複雜了

另外本文,更新了安裝的部份, cgilib 裝法少了一個動作,
"請注意,若裝 cgilib-0.5 時, make install 後,需再將目錄內的
cgi.h  copy 至 /usr/include 方可,不然 ./configure 時會出錯
"

[教學]中的教學(二) RRDTOOL 1.2 更新項目

我用的是rrdtool 1.2.9,就是无法显示中文,请教该如何?
/usr/local/rrdtool/bin/rrdtool  graph 1234.png \
  --title "Demo 流量图" \
  --start 1117954895  \
  --end 1118011295  \
  --interlace \
  --imgformat PNG \
  --width 450 \
  --font TITLE:20:/usr/share/fonts/zh_CN/TrueType/gkai00mp.ttf \
  DEF:a=randome.rrd:a:AVERAGE \
  DEF:b=randome.rrd:b:AVERAGE \
  CDEF:line=TIME,2400,%,300,LT,a,UNKN,IF \
  AREA:b#00b6e4:beta \
  AREA:line#0022e9:alpha \
  LINE3:line#ff0000

[教學]中的教學(二) RRDTOOL 1.2 更新項目

-->
尚未打算公布(我程式寫得很差),我是自己修改 rrdtool 的程式

[教學]中的教學(二) RRDTOOL 1.2 更新項目

rrdtool 1.2.8 中文化 Patch , 若不懂 patch 請先研究用法
我只試過 1.2.8 , >;1.2.8 適不適用否我就不知了
Patch 處都做了注解,方便有需要研究的人

新版的 rrd (1.2.x) 調用 FT (freetype2) 做 TTF 輸出
所以程式用 1.0.x 版完全不能適用哦,切記 (僅以此 Patch 加惠有綠人)

做了一些微調.讓程式更精簡些
[code]
diff -u rrdtool-1.2.8/src/rrd_gfx.c rrdtool-1.2.8-big5/src/rrd_gfx.c
--- rrdtool-1.2.8/src/rrd_gfx.c Fri Jun 10 16:54:58 2005
+++ rrdtool-1.2.8-big5/src/rrd_gfx.c Fri Jun 10 16:45:42 2005
@@ -378,6 +378,9 @@
   unsigned int  n;
   int           error;
   int        gottab = 0;   
+  // 雙字元處理 multi-bytes 問題
+  wchar_t* w_text;
+
   ft_pen.x = 0;   /* start at (0,0) !! */
   ft_pen.y = 0;
  
@@ -391,6 +394,11 @@
   string->;transform.xy = (FT_Fixed)(-sin(M_PI*(rotation)/180.0)*0x10000);
   string->;transform.yx = (FT_Fixed)( sin(M_PI*(rotation)/180.0)*0x10000);
   string->;transform.yy = (FT_Fixed)( cos(M_PI*(rotation)/180.0)*0x10000);
+  // pointer malloc
+  w_text = (wchar_t) calloc (string->;count,sizeof(wchar_t));
+  //  轉換為 wide 型式
+  mbstowcs(w_text,text,string->;count);
+
  
   use_kerning = FT_HAS_KERNING(face);
   previous    = 0;
@@ -419,8 +427,8 @@
     glyph->;pos.x = 0;
     glyph->;pos.y = 0;
     glyph->;image = NULL;
-
-    glyph->;index = FT_Get_Char_Index( face, letter );
+ // 字符隻轉換
+    glyph->;index = FT_Get_Char_Index( face, w_text[n]);
  
     /* compute glyph origin */
     if ( use_kerning && previous && glyph->;index ) {
@@ -495,6 +503,8 @@
   } */
   string->;height = string->;bbox.yMax - string->;bbox.yMin;
  
+  free(w_text);
+
   return string;
}
  
diff -u rrdtool-1.2.8/src/rrd_graph.c rrdtool-1.2.8-big5/src/rrd_graph.c
--- rrdtool-1.2.8/src/rrd_graph.c Fri Jun 10 16:54:58 2005
+++ rrdtool-1.2.8-big5/src/rrd_graph.c Fri Jun 10 16:36:04 2005
@@ -2793,7 +2793,9 @@
     tzset();
#endif
#ifdef HAVE_SETLOCALE
-    setlocale(LC_TIME,"");
+    //setlocale(LC_TIME,"");
+    // 可以不定 locale , 由系統自動判斷
+    setlocale(LC_ALL,"zh_CN.GB2312");
#endif
     im->;yorigin=0;
     im->;xorigin=0; [/code]

[教學]中的教學(二) RRDTOOL 1.2 更新項目

好文,有空会试。

-->

楼主你好~~
刚看完贴子~
对一cgilib安装这部分不太明白~~~
上面写的是
./configure
make;make install
为什么下面又是需要先考cgi.h后再./configure

我的cgilib没能装上~

回复 9楼 gavinzhm 的帖子

同楼上的问题
我的报错
[root@localhost cgilib-0.5]# make && make install
make: `libcgi.a' is up to date.
cc -I. -Wall -O2 -g   -c -o cgitest.o cgitest.c
cgitest.c: In function `main':
cgitest.c:108: warning: implicit declaration of function `strcmp'
cgitest.c:116: parse error before "Library"
cgitest.c:129: warning: implicit declaration of function `strlen'
make: *** [cgitest.o] Error 1
这个到底该怎么装啊?麻烦楼主详细点说好么?

写得挺好的,不过功能上个人认为比起SolarWinds Orion Network Performance Monitor SLX Edition还是有差距

-->

也说一个差别。

rrdtool1.2与1.0有一个不同的小地方,rrdtool1.2对“:”敏感。如果在graph的命令里面包含了非正常位置的”:"就会报错。

如:


[code]/usr/local/rrdtool/bin/rrdtool graph -
--imgformat=PNG
--start=1132130276
--end=1132216676
--title="ANNEX-SW6509-MDF-SW1 - 1/1 - Fiber to Old MDF (OHS-SW5509-MDF)"
--rigid
--base=1000
--height=120
--width=575
--alt-autoscale-max
--lower-limit=0
COMMENT:"From 2005/11/16 03:37:56 To 2005/11/17 03:37:56\c"
COMMENT:"  n"
--vertical-label="bytes per second"
(后面略)
  [/code]

需要使用跳脱字符""将


[color=Red]COMMENT:"From 2005/11/16 03:37:56 To 2005/11/17 03:37:56\c" [/color]
改为
[color=Green]COMMENT:"From 2005/11/16 03\:37\:56 To 2005/11/17 03\:37\:56\c" [/color]


-->
???

-->

今天可能糊涂了,没有改好就发贴了,现在已经改好。

求14all.cgi文件!!!!

我从网站上下载的14all.cgi文件不能打开,哪个好心人请发到我的邮箱中.谢谢了.yin_jie@126.com

abel大大的中文化patch,虽然不能直接应用在高版本上,但是可以手动修改源码,我已经在1.2.12上试验成功,多谢abel大大了

rrdtool 1.2.12版的中文补丁

本补丁参考abel的rrdtool 1.2.8版本制作,已测试,证明可用.

[root@www src]# diff -u rrd_gfx.c.bak rrd_gfx.c
--- rrd_gfx.c.bak       2005-12-19 04:30:45.000000000 +0800
+++ rrd_gfx.c   2006-04-23 11:05:47.000000000 +0800
@@ -384,6 +384,7 @@
   int          n;
   int           error;
   int        gottab = 0;
+  wchar_t* w_text;

#ifdef HAVE_MBSTOWCS
   wchar_t      *cstr;
@@ -414,6 +415,8 @@
   string->transform.xy = (FT_Fixed)(-sin(M_PI*(rotation)/180.0)*0x10000);
   string->transform.yx = (FT_Fixed)( sin(M_PI*(rotation)/180.0)*0x10000);
   string->transform.yy = (FT_Fixed)( cos(M_PI*(rotation)/180.0)*0x10000);
+  w_text = (wchar_t) calloc (string->count,sizeof(wchar_t));
+  mbstowcs(w_text,text,string->count);

   use_kerning = FT_HAS_KERNING(face);
   previous    = 0;
@@ -443,7 +446,7 @@
     glyph->pos.x = 0;
     glyph->pos.y = 0;
     glyph->image = NULL;
-    glyph->index = FT_Get_Char_Index( face, letter );
+    glyph->index = FT_Get_Char_Index( face, w_text[n]);

     /* compute glyph origin */
     if ( use_kerning && previous && glyph->index ) {
@@ -516,6 +519,7 @@
       string->width = string->bbox.xMax - string->bbox.xMin;
   } */
   string->height = string->bbox.yMax - string->bbox.yMin;
+  free(w_text);
   return string;
}

[root@www src]# diff -u rrd_graph.c.bak rrd_graph.c
--- rrd_graph.c.bak     2005-12-19 04:30:45.000000000 +0800
+++ rrd_graph.c 2006-04-23 11:05:53.000000000 +0800
@@ -2871,7 +2871,8 @@
     tzset();
#endif
#ifdef HAVE_SETLOCALE
-    setlocale(LC_TIME,"");
+    //setlocale(LC_TIME,"");
+    setlocale(LC_ALL,"zh_CN.GB2312");
#endif
     im->yorigin=0;
     im->xorigin=0;


cgilib的安装问题,那位能详细述之啊?!
[root@fedora4 cgilib-0.5]# make install
cc -I. -Wall -O2 -g   -c -o cgitest.o cgitest.c
cgitest.c: In function 鈓ain?
cgitest.c:108: warning: implicit declaration of function 鈙trcmp?
cgitest.c:116: error: syntax error before 釲ibrary?
cgitest.c:129: warning: implicit declaration of function 鈙trlen?
cgitest.c:129: warning: incompatible implicit declaration of built-in function 鈙trlen?
make: *** [cgitest.o] Error 1

新版的rrdtool已经集成了cgilib,下载的lib目录里也没有了cgi包了。
所以现在已经无需在编译rrdtool时使用"--disable-rrdcgi" 参数了。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com