作者 主題: [教學]大作 rrdtool (像 mrtg 的東東) 完全攻略  (閱讀 330506 次)

0 會員 與 1 訪客 正在閱讀本文。

v16822

  • 可愛的小學生
  • *
  • 文章數: 5
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #90 於: 2005-06-11 01:40 »
我想請問一下,你做的那些表阿有有改過裡面的程式嗎?有參考什麼要的資料室吼可以告訴我,因為我在找相關的一些抓取封包還是改MRTG的裡面的一些小程式,能否告訴我謝謝

alvin363

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #91 於: 2005-06-12 10:23 »
謝謝前輩指導 ^^

我也開始懷疑我的眼睛了!!

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #92 於: 2005-06-13 14:08 »
引用
我想請問一下,你做的那些表阿有有改過裡面的程式嗎?有參考什麼要的資料室吼可以告訴我,因為我在找相關的一些抓取封包還是改MRTG的裡面的一些小程式,能否告訴我謝謝

不懂 "那些表" 是什麼 ...?
至於抓封包用 tcpdump 只是一個大家熟悉的程式,你只要了解用法,要抓什麼都可以.


引用
謝謝前輩指導 ^^
我也開始懷疑我的眼睛了!!

眼睛 ? 什麼眼瞔 ? 中文化這種事情,純粹個人好玩,研究而以
只是查 FT2 function 較累而以..相對來說 gd 較熟悉

alvin363

  • 可愛的小學生
  • *
  • 文章數: 4
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #93 於: 2005-07-26 14:42 »
要分別畫出hour day week需要有特殊的設定嗎?
為什麼我三張圖出現都一樣?

另外為什麼image_path又出現一次
不過他沒有""號

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #94 於: 2005-07-26 14:45 »
你得回頭再看一次
或是用 -s (--start)-e (--end) 來控制時間範圍

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
我是刚刚学rrdtool不久,参考大哥的大作做了一下可以画出hours, day , week ,但画不出year的那张图,而且图很乱。y轴上显示的数据不准,请大哥看看,以下是我的代码:
建立rrd数据文件:
代碼: [選擇]
#!/bin/bash
RRD_BIN="/usr/local/rrdtool/bin/rrdtool"
DB_PATH="/usr/local/apache2/htdocs/rrd/data"
CONF_PATH="/usr/local/apache2/htdocs/rrd/conf"

conf_arge=`cat $CONF_PATH/server.conf`
for server in $conf_arge
do
        name=`echo $server | awk -F: '{print $1}'`

        #;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        # create sys cpu used info rrd data file
        #;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        $RRD_BIN create $DB_PATH/${name}_cpu_load.rrd --step 300 \
                DS:id5:GAUGE:600:0:10 \
                DS:id10:GAUGE:600:0:10 \
                DS:id15:GAUGE:600:0:10 \
                RRA:AVERAGE:0.5:1:600 \
                RRA:AVERAGE:0.5:5:700 \
                RRA:AVERAGE:0.5:24:800 \
                RRA:AVERAGE:0.5:288:900 \
                RRA:MAX:0.5:1:600 \
                RRA:MAX:0.5:6:700 \
                RRA:MAX:0.5:24:775 \
                RRA:MAX:0.5:288:797 \
                RRA:MIN:0.5:1:600 \
                RRA:MIN:0.5:6:700 \
                RRA:MIN:0.5:24:775 \
                RRA:MIN:0.5:288:797

        $RRD_BIN create $DB_PATH/${name}_mem.rrd --step 300 \
                DS:mem_free:GAUGE:300:U:U \
                DS:mem_buff:GAUGE:300:U:U \
                DS:mem_cache:GAUGE:300:U:U \
                DS:mem_swapd:GAUGE:300:U:U \
                RRA:AVERAGE:0.5:1:603 \
                RRA:AVERAGE:0.5:5:803 \
                RRA:AVERAGE:0.5:24:803 \
                RRA:AVERAGE:0.5:288:903 \
                RRA:MAX:0.5:1:600 \
                RRA:MAX:0.5:6:700 \
                RRA:MAX:0.5:24:775 \
                RRA:MAX:0.5:288:797 \
                RRA:MIN:0.5:1:600 \
                RRA:MIN:0.5:6:700 \
                RRA:MIN:0.5:24:775 \
                RRA:MIN:0.5:288:797
done
exit 0


更新数据的脚本:
代碼: [選擇]
#!/bin/bash
RRD_BIN="/usr/local/rrdtool/bin/rrdtool"
DB_PATH="/usr/local/apache2/htdocs/rrd/data"
CONF_PATH="/usr/local/apache2/htdocs/rrd/conf"
TMP_FILE="tmp.file"
TIME=`date +%Y%m%d`

#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

conf_arge=`cat $CONF_PATH/server.conf`
for server in $conf_arge
do
        ip=`echo $server | awk -F: '{print $2}'`
        name=`echo $server | awk -F: '{print $1}'`

        ssh $ip "uptime" > $TMP_FILE
        id5=`awk '{print substr($10,1,4)}' $TMP_FILE`
        id10=`awk '{print substr($11,1,4)}' $TMP_FILE`
        id15=`awk '{print substr($12,1,4)}' $TMP_FILE`

        ssh $ip "free" > $TMP_FILE
        mem_free=`grep "Mem" $TMP_FILE | awk '{print $3}'`
        mem_buff=`grep "Mem" $TMP_FILE | awk '{print $6}'`
        mem_cache=`grep "Mem" $TMP_FILE | awk '{print $7}'`
        mem_swapd=`grep "Swap" $TMP_FILE | awk '{print $3}'`

        echo "[`date +"%Y:%m:%d %H:%M:%S"`] update $name cpu id5=$id5 id10=$id10 id15=$id15" >> ../log/update_c
pu.log.$TIME
        echo "[`date +"%Y:%m:%d %H:%M:%S"`] update $name mem free=$mem_free buff=$mem_buff cache=$mem_cache swa
pd=$mem_swapd" >> ../log/update_mem.log.$TIME

        $RRD_BIN update $DB_PATH/${name}_cpu_load.rrd N:$id5:$id10:$id15
        $RRD_BIN update $DB_PATH/${name}_mem.rrd N:$mem_free:$mem_buff:$mem_cache:$mem_swapd
done

rm -f $TMP_FILE

exit 0


画图的脚本:
代碼: [選擇]
#!/bin/bash
RRD_BIN="/usr/local/rrdtool/bin/rrdtool"
DB_PATH="/usr/local/apache2/htdocs/rrd/data"
PNG_PATH="/usr/local/apache2/htdocs/rrd/images"
CONF_PATH="/usr/local/apache2/htdocs/rrd/conf"
conf_arge=`cat $CONF_PATH/server.conf`
PNG_TIME="hours day week month year"

for name in $conf_arge; do
        server=`echo $name | awk -F: '{print $1}'`
        for i in $PNG_TIME; do
                $RRD_BIN graph $PNG_PATH/${server}_cpu_${i}.png \
                        --title "${i} "${server}" server CPU Load" \
                        DEF:id5=$DB_PATH/${server}_cpu_load.rrd:id5:AVERAGE \
                        DEF:id10=$DB_PATH/${server}_cpu_load.rrd:id10:AVERAGE \
                        DEF:id15=$DB_PATH/${server}_cpu_load.rrd:id15:AVERAGE \
                        AREA:id5#008080:"5minute cpu load" \
                        AREA:id10#FFFF00:"10minute cpu load" \
                        AREA:id15#FF0000:"15minute cpu load" \
                        -h 100 -w 600 \
                        -s `date -d "-1 $i" +%s` \
                        -v "sys cpu load"
        done

        for i in $PNG_TIME; do
                $RRD_BIN graph $PNG_PATH/${server}_mem_${i}.png \
                        --title "${i} "${server}" server Mem Load" \
                        DEF:mem_free=$DB_PATH/${server}_mem.rrd:mem_free:AVERAGE \
                        DEF:mem_buff=$DB_PATH/${server}_mem.rrd:mem_buff:AVERAGE \
                        DEF:mem_cache=$DB_PATH/${server}_mem.rrd:mem_cache:AVERAGE \
                        DEF:mem_swapd=$DB_PATH/${server}_mem.rrd:mem_swapd:AVERAGE \
                        AREA:mem_free#FFFF00:"memory free" \
                        AREA:mem_cache#00FF00:"memory cache" \
                        AREA:mem_swapd#000000:"memory swapd" \
                        AREA:mem_buff#0080C0:"memory buff" \
                        -h 100 -w 600 \
                        -s `date -d "-1 $i" +%s` \
                        -v "memory information"
        done
done
exit 0


更新数据和画图都是每5分钟在crontab中跑一次,但生成的图却是这样的,图如下。
CPU的图:










内存的图:










还请大哥在百忙之中看一下。小弟在此谢谢了。

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #96 於: 2005-08-02 10:14 »
图的地址变了,不好意思,大哥:
CPU:










MEM:









abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #97 於: 2005-08-02 12:26 »
方便只講重點嗎 ?
因為太長,時在不好看
cpu 的y 值,你的 input data ,是小數,所以畫 80m 等是正常的

至於 memory , 有些圖上的時段是空白,你確定有抓到資料 ?
把 rrdtool update 的資料另存一份檔案來看看
中文出不來,請找此帖內有的中文化 Patch

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #98 於: 2005-08-02 13:35 »
引述: "abelyang"
方便只講重點嗎 ?
因為太長,時在不好看
cpu 的y 值,你的 input data ,是小數,所以畫 80m 等是正常的

至於 memory , 有些圖上的時段是空白,你確定有抓到資料 ?
把 rrdtool update 的資料另存一份檔案來看看
中文出不來,請找此帖內有的中文化 Patch


以下为mem写入rrd文件的日志:
[2005:08:02 00:00:00] update localhost mem free=4085772 buff=233420 cache=3513648 swapd=828
[2005:08:02 00:00:08] update clustor01 mem free=8099192 buff=12416 cache=6441332 swapd=770740
[2005:08:02 00:00:08] update spider01 mem free=3246912 buff=95088 cache=1885940 swapd=124464
[2005:08:02 00:00:08] update spider02 mem free=3154444 buff=80120 cache=2273388 swapd=280864
[2005:08:02 00:00:08] update spider03 mem free=3172836 buff=82348 cache=2240108 swapd=543780
[2005:08:02 00:00:08] update spider04 mem free=3340536 buff=69492 cache=1949764 swapd=405040
[2005:08:02 00:00:09] update spider05 mem free=3513676 buff=73784 cache=1950836 swapd=24
[2005:08:02 00:00:09] update spider06 mem free=3445852 buff=80556 cache=1871784 swapd=28
[2005:08:02 00:00:09] update spider07 mem free=3475884 buff=73388 cache=1683936 swapd=2124
[2005:08:02 00:00:09] update spider08 mem free=3231632 buff=77448 cache=2256684 swapd=359684
[2005:08:02 00:05:00] update localhost mem free=4084080 buff=233420 cache=3513664 swapd=828
[2005:08:02 00:05:08] update clustor01 mem free=8100232 buff=13016 cache=6441412 swapd=770740
[2005:08:02 00:05:08] update spider01 mem free=3247232 buff=95416 cache=1886132 swapd=124464
[2005:08:02 00:05:08] update spider02 mem free=3154700 buff=80324 cache=2273444 swapd=280864
[2005:08:02 00:05:08] update spider03 mem free=3172836 buff=82488 cache=2239968 swapd=543780
[2005:08:02 00:05:08] update spider04 mem free=3340920 buff=69912 cache=1949344 swapd=405040
[2005:08:02 00:05:09] update spider05 mem free=3514124 buff=74100 cache=1950780 swapd=24
[2005:08:02 00:05:09] update spider06 mem free=3446044 buff=80912 cache=1871948 swapd=28
[2005:08:02 00:05:09] update spider07 mem free=3476588 buff=73932 cache=1683912 swapd=2124
[2005:08:02 00:05:09] update spider08 mem free=3232208 buff=77952 cache=2256960 swapd=359684

以下为spider03_mem.rrd文件的信息:
rrd_version = "0003"
step = 300
last_update = 1122959292
ds[mem_free].type = "GAUGE"
ds[mem_free].minimal_heartbeat = 60
ds[mem_free].min = NaN
ds[mem_free].max = NaN
ds[mem_free].last_ds = "UNKN"
ds[mem_free].value = 0.0000000000e+00
ds[mem_free].unknown_sec = 192
ds[mem_buff].type = "GAUGE"
ds[mem_buff].minimal_heartbeat = 60
ds[mem_buff].min = NaN
ds[mem_buff].max = NaN
ds[mem_buff].last_ds = "UNKN"
ds[mem_buff].value = 0.0000000000e+00
ds[mem_buff].unknown_sec = 192
ds[mem_cache].type = "GAUGE"
ds[mem_cache].minimal_heartbeat = 60
ds[mem_cache].min = NaN
ds[mem_cache].max = NaN
ds[mem_cache].last_ds = "UNKN"
ds[mem_cache].value = 0.0000000000e+00
ds[mem_cache].unknown_sec = 192
ds[mem_swapd].type = "GAUGE"
ds[mem_swapd].minimal_heartbeat = 60
ds[mem_swapd].min = NaN
ds[mem_swapd].max = NaN
ds[mem_swapd].last_ds = "UNKN"
ds[mem_swapd].value = 0.0000000000e+00
ds[mem_swapd].unknown_sec = 192
rra[0].cf = "AVERAGE"
rra[0].rows = 603
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = NaN
rra[0].cdp_prep[1].unknown_datapoints = 0
rra[0].cdp_prep[2].value = NaN
rra[0].cdp_prep[2].unknown_datapoints = 0
rra[0].cdp_prep[3].value = NaN
rra[0].cdp_prep[3].unknown_datapoints = 0
rra[1].cf = "AVERAGE"
rra[1].rows = 803
rra[1].pdp_per_row = 5
rra[1].xff = 5.0000000000e-01
rra[1].cdp_prep[0].value = NaN
rra[1].cdp_prep[0].unknown_datapoints = 2
rra[1].cdp_prep[1].value = NaN
rra[1].cdp_prep[1].unknown_datapoints = 2
rra[1].cdp_prep[2].value = NaN
rra[1].cdp_prep[2].unknown_datapoints = 2
rra[1].cdp_prep[3].value = NaN
rra[1].cdp_prep[3].unknown_datapoints = 2
rra[2].cf = "AVERAGE"
rra[2].rows = 803
rra[2].pdp_per_row = 24
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = NaN
rra[2].cdp_prep[0].unknown_datapoints = 13
rra[2].cdp_prep[1].value = NaN
rra[2].cdp_prep[1].unknown_datapoints = 13
rra[2].cdp_prep[2].value = NaN
rra[2].cdp_prep[2].unknown_datapoints = 13
rra[2].cdp_prep[3].value = NaN
rra[2].cdp_prep[3].unknown_datapoints = 13
rra[3].cf = "AVERAGE"
rra[3].rows = 903
rra[3].pdp_per_row = 288
rra[3].xff = 5.0000000000e-01
rra[3].cdp_prep[0].value = NaN
rra[3].cdp_prep[0].unknown_datapoints = 61
rra[3].cdp_prep[1].value = NaN
rra[3].cdp_prep[1].unknown_datapoints = 61
rra[3].cdp_prep[2].value = NaN
rra[3].cdp_prep[2].unknown_datapoints = 61
rra[3].cdp_prep[3].value = NaN
rra[3].cdp_prep[3].unknown_datapoints = 61
rra[4].cf = "MAX"
rra[4].rows = 600
rra[4].pdp_per_row = 1
rra[4].xff = 5.0000000000e-01
rra[4].cdp_prep[0].value = NaN
rra[4].cdp_prep[0].unknown_datapoints = 0
rra[4].cdp_prep[1].value = NaN
rra[4].cdp_prep[1].unknown_datapoints = 0
rra[4].cdp_prep[2].value = NaN
rra[4].cdp_prep[2].unknown_datapoints = 0
rra[4].cdp_prep[3].value = NaN
rra[4].cdp_prep[3].unknown_datapoints = 0
rra[5].cf = "MAX"
rra[5].rows = 700
rra[5].pdp_per_row = 6
rra[5].xff = 5.0000000000e-01
rra[5].cdp_prep[0].value = NaN
rra[5].cdp_prep[0].unknown_datapoints = 1
rra[5].cdp_prep[1].value = NaN
rra[5].cdp_prep[1].unknown_datapoints = 1
rra[5].cdp_prep[2].value = NaN
rra[5].cdp_prep[2].unknown_datapoints = 1
rra[5].cdp_prep[3].value = NaN
rra[5].cdp_prep[3].unknown_datapoints = 1
rra[6].cf = "MAX"
rra[6].rows = 775
rra[6].pdp_per_row = 24
rra[6].xff = 5.0000000000e-01
rra[6].cdp_prep[0].value = NaN
rra[6].cdp_prep[0].unknown_datapoints = 13
rra[6].cdp_prep[1].value = NaN
rra[6].cdp_prep[1].unknown_datapoints = 13
rra[6].cdp_prep[2].value = NaN
rra[6].cdp_prep[2].unknown_datapoints = 13
rra[6].cdp_prep[3].value = NaN
rra[6].cdp_prep[3].unknown_datapoints = 13
rra[7].cf = "MAX"
rra[7].rows = 797
rra[7].pdp_per_row = 288
rra[7].xff = 5.0000000000e-01
rra[7].cdp_prep[0].value = NaN
rra[7].cdp_prep[0].unknown_datapoints = 61
rra[7].cdp_prep[1].value = NaN
rra[7].cdp_prep[1].unknown_datapoints = 61
rra[7].cdp_prep[2].value = NaN
rra[7].cdp_prep[2].unknown_datapoints = 61
rra[7].cdp_prep[3].value = NaN
rra[7].cdp_prep[3].unknown_datapoints = 61
rra[8].cf = "MIN"
rra[8].rows = 600
rra[8].pdp_per_row = 1
rra[8].xff = 5.0000000000e-01
rra[8].cdp_prep[0].value = NaN
rra[8].cdp_prep[0].unknown_datapoints = 0
rra[8].cdp_prep[1].value = NaN
rra[8].cdp_prep[1].unknown_datapoints = 0
rra[8].cdp_prep[2].value = NaN
rra[8].cdp_prep[2].unknown_datapoints = 0
rra[8].cdp_prep[3].value = NaN
rra[8].cdp_prep[3].unknown_datapoints = 0
rra[9].cf = "MIN"
rra[9].rows = 700
rra[9].pdp_per_row = 6
rra[9].xff = 5.0000000000e-01
rra[9].cdp_prep[0].value = NaN
rra[9].cdp_prep[0].unknown_datapoints = 1
rra[9].cdp_prep[1].value = NaN
rra[9].cdp_prep[1].unknown_datapoints = 1
rra[9].cdp_prep[2].value = NaN
rra[9].cdp_prep[2].unknown_datapoints = 1
rra[9].cdp_prep[3].value = NaN
rra[9].cdp_prep[3].unknown_datapoints = 1
rra[10].cf = "MIN"
rra[10].rows = 775
rra[10].pdp_per_row = 24
rra[10].xff = 5.0000000000e-01
rra[10].cdp_prep[0].value = NaN
rra[10].cdp_prep[0].unknown_datapoints = 13
rra[10].cdp_prep[1].value = NaN
rra[10].cdp_prep[1].unknown_datapoints = 13
rra[10].cdp_prep[2].value = NaN
rra[10].cdp_prep[2].unknown_datapoints = 13
rra[10].cdp_prep[3].value = NaN
rra[10].cdp_prep[3].unknown_datapoints = 13
rra[11].cf = "MIN"
rra[11].rows = 797
rra[11].pdp_per_row = 288
rra[11].xff = 5.0000000000e-01
rra[11].cdp_prep[0].value = NaN
rra[11].cdp_prep[0].unknown_datapoints = 61
rra[11].cdp_prep[1].value = NaN
rra[11].cdp_prep[1].unknown_datapoints = 61
rra[11].cdp_prep[2].value = NaN
rra[11].cdp_prep[2].unknown_datapoints = 61
rra[11].cdp_prep[3].value = NaN
rra[11].cdp_prep[3].unknown_datapoints = 61

请大哥看看,谢谢!

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #99 於: 2005-08-02 13:44 »
引用
$RRD_BIN create $DB_PATH/${name}_mem.rrd --step 300 \
                DS:mem_free:GAUGE:300:U:U \
                DS:mem_buff:GAUGE:300:U:U \
                DS:mem_cache:GAUGE:300:U:U \
                DS:mem_swapd:GAUGE:300:U:U \

中的 300 改成 600 以上
因為你的時間差有時差超過 300 , 只要過 300 ,就會出現空白

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #100 於: 2005-08-02 14:21 »
引述: "abelyang"
引用
$RRD_BIN create $DB_PATH/${name}_mem.rrd --step 300 \
                DS:mem_free:GAUGE:300:U:U \
                DS:mem_buff:GAUGE:300:U:U \
                DS:mem_cache:GAUGE:300:U:U \
                DS:mem_swapd:GAUGE:300:U:U \

中的 300 改成 600 以上
因為你的時間差有時差超過 300 , 只要過 300 ,就會出現空白

谢谢我已经将GAUGE改为600 --step改为30过一会试试,对了大哥。因为我取的内存的数据有的很大有的很小,画图的时候就有的值我看不到图示有的图示就很大,这种情况如何修改呢??就针对我的内存的图来说,我取的值例如下:
[2005:08:02 00:15:08] update spider03 mem free=3173348 buff=82908 cache=2240068 swapd=543780

我图上的free的色块就很大,swapd的就根本看不到。是什么原因啊大哥。??
谢谢!

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #101 於: 2005-08-02 14:27 »
平常是把最大的那個值畫在最下面
1 和 10000  ,在圖上來說, 1 實在太小到看不見,
但若畫 10000 和 1 , 則 rrdtool 可能從 9800 為 base 開始畫
此時,1 就有可能看見

另外,為什麼要改 step ?  step 和 heartbeat 有什麼關係 ?
heartbeat 什麼作用 ?
heartbeat 設為 100000000 會怎麼樣 ?

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #102 於: 2005-08-02 15:28 »
引述: "abelyang"
平常是把最大的那個值畫在最下面
1 和 10000  ,在圖上來說, 1 實在太小到看不見,
但若畫 10000 和 1 , 則 rrdtool 可能從 9800 為 base 開始畫
此時,1 就有可能看見

另外,為什麼要改 step ?  step 和 heartbeat 有什麼關係 ?
heartbeat 什麼作用 ?
heartbeat 設為 100000000 會怎麼樣 ?

最大的画的最下面??如何操作大哥。

以我的理解step 和heartbeat之间的关系是这样的。
step是rrd数据中的时间间隔。
heartbeat是在这个时间段之内的是否有数据,没有的话为空值。
step一定得比hearbeat小,如果大的话heartbeat相林的时间段之内一定是没有数据的。不知道对不对大哥。
非常感谢!。

oicqonly

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #103 於: 2005-08-02 17:11 »
以前用MRTG,最短图像间隔是5分钟,请问rrdtool的最短间隔是多少呢?

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #104 於: 2005-08-02 17:18 »
如果你在 12:00   建了一個 rrd file , step 是 300 (5min),type gauge
heartbeat 是 1200, 假設資料為,一小時內資料是
1 n 2 n n n n n n n 2 n    (n 表示沒有 update ,即 NaN)

畫出來的圖長什麼樣呢 ?
如果我的理解沒有錯,因為在 1800 秒內沒有資料時,他們往前參考,變成
1 1 2 2 2 2 2 n n n 2 2

也就是 12:05 分會看 12:00 的資料,因為 heartbeat 1200 為 20 分
鐘, 20 分內沒有資料就往前參考

所以,若你細心觀查 mrtg 的 log 檔,就可以知道 , heartbeat 值為多少
較好.
你可以做一個實際,將 mrtg 的 log 轉成 rrd  (這個 shell 很簡單,你應該會才是), 不同的 step=300 , 不同的 heartbeat 成圖的效果如何


至於最大值畫下面的建議,是你要用 AREA+CDEF 堆疊
或直接用 STACK 時才有作用
不然建議您,轉成 百分比(%) 來畫吧, Used/Total =99%
畫這個 99 數字,而不畫原來的值

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #105 於: 2005-08-02 17:20 »
引述: "oicqonly"
以前用MRTG,最短图像间隔是5分钟,请问rrdtool的最短间隔是多少呢?

1 秒

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #106 於: 2005-08-02 18:24 »
引述: "abelyang"
如果你在 12:00   建了一個 rrd file , step 是 300 (5min),type gauge
heartbeat 是 1200, 假設資料為,一小時內資料是
1 n 2 n n n n n n n 2 n    (n 表示沒有 update ,即 NaN)

畫出來的圖長什麼樣呢 ?
如果我的理解沒有錯,因為在 1800 秒內沒有資料時,他們往前參考,變成
1 1 2 2 2 2 2 n n n 2 2

也就是 12:05 分會看 12:00 的資料,因為 heartbeat 1200 為 20 分
鐘, 20 分內沒有資料就往前參考

所以,若你細心觀查 mrtg 的 log 檔,就可以知道 , heartbeat 值為多少
較好.
你可以做一個實際,將 mrtg 的 log 轉成 rrd  (這個 shell 很簡單,你應該會才是), 不同的 step=300 , 不同的 heartbeat 成圖的效果如何


至於最大值畫下面的建議,是你要用 AREA+CDEF 堆疊
或直接用 STACK 時才有作用
不然建議您,轉成 百分比(%) 來畫吧, Used/Total =99%
畫這個 99 數字,而不畫原來的值


大哥,能给个提示吗?AREA+CDEF这一部分我真是没有搞懂,最主要的就是CDEF:(
拿我这个mem的做个例子讲解一下如何?
谢谢了大哥。

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #107 於: 2005-08-03 12:21 »
這是 STACK 及 CDEF 的用法
create/data/graph 程式你可以在這裏取得
http://211.72.210.251/images/spam.tgz

重點在
CDEF:total=client,subject,rbl,gb2312,+,+,+      \
...
STACK: ... 要畫成堆疊效果

作用在把那幾個 DSN 加起來,做成總合這個值,STACK 則一個一個把圖疊上去,形成層次效果,成圖效果如下:



等一下再做一個 % 的顯示給您參考
不過重點是你要看懂 www.rrdtool.org 上的教學,才是最重要的

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #108 於: 2005-08-03 14:00 »
谢谢大哥,俺一直在线等着大哥的回复呢,同时也在看rrdtool的文档,期待大哥的百分数(%)的示例。非常感谢。。

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #109 於: 2005-08-03 14:58 »
引述: "fire-phoenix"
谢谢大哥,俺一直在线等着大哥的回复呢,同时也在看rrdtool的文档,期待大哥的百分数(%)的示例。非常感谢。。

基本上我會建議您自己先試,並找答案及研讀官網對 CDEF (RPN) 的說明
總比等我的答案來 得好,因為這樣你才能體會到精神所在,不是用 sample
一直改

代碼: [選擇]

#!/bin/sh
RRD_FILE=/root/study/mail.rrd
now=`date`
time="day week month year"
for t in $time
do
rrdtool graph /www/htdocs/211.72.210.251/images/spam-per-$t.png \
--title "abelyang SPAM 統計情形 ($t)" \
-n DEFAULT:12:/usr/share/fonts/zh_TW/TrueType/bsmi00lp.ttf \
--font-render-mode normal \
--font-smoothing-threshold 10 \
-u 100 -v "SPAM TYPE (%)" \
DEF:client=$RRD_FILE:client:AVERAGE \
DEF:subject=$RRD_FILE:subject:AVERAGE \
DEF:rbl=$RRD_FILE:rbl:AVERAGE \
DEF:gb2312=$RRD_FILE:gb2312:AVERAGE \
COMMENT:"  SPAM類別      最大   平均   最小  
CDEF:total=client,subject,rbl,gb2312,+,+,+ \
CDEF:p_client=100,client,total,/,* \
CDEF:p_subject=100,subject,total,/,* \
CDEF:p_rbl=100,rbl,total,/,*      \
CDEF:p_gb2312=100,gb2312,total,/,*      \
COMMENT:'-------------------------------------------------------------------------------------------\n' \
AREA:p_client#0000ff:'發信軟體 ' \
GPRINT:p_client:MAX:"%5.2lf" \
GPRINT:p_client:AVERAGE:"%5.2lf" \
GPRINT:p_client:MIN:"%5.2lf" \
GPRINT:p_client:LAST:"%5.2lf\n" \
STACK:p_subject#ff0000:'特定字串 ' \
GPRINT:p_subject:MAX:"%5.2lf" \
GPRINT:p_subject:AVERAGE:"%5.2lf" \
GPRINT:p_subject:MIN:"%5.2lf" \
GPRINT:p_subject:LAST:"%5.2lf\n" \
STACK:p_rbl#00ff00:'RBL黑名單  ' \
GPRINT:p_rbl:MAX:"%5.2lf" \
GPRINT:p_rbl:AVERAGE:"%5.2lf" \
GPRINT:p_rbl:MIN:"%5.2lf" \
GPRINT:p_rbl:LAST:"%5.2lf\n" \
STACK:p_gb2312#000040:'簡體信件 ' \
GPRINT:p_gb2312:MAX:"%5.2lf" \
GPRINT:p_gb2312:AVERAGE:"%5.2lf" \
GPRINT:p_gb2312:MIN:"%5.2lf" \
GPRINT:p_gb2312:LAST:"%5.2lf\n" \
COMMENT:'  檔信總合' \
GPRINT:total:MAX:"%5.2lf" \
GPRINT:total:AVERAGE:"%5.2lf" \
GPRINT:total:MIN:"%5.2lf" \
GPRINT:total:LAST:"%5.2lf\n" \
-w 600 -h 200 -s `date -d "-1 $t" +%s`
done


原圖

百分比圖


原圖

百分比圖

fire-phoenix

  • 可愛的小學生
  • *
  • 文章數: 8
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #110 於: 2005-08-03 18:22 »
谢谢大哥,不仅学习大哥提供的学习文档,还有学习大哥的学习精神。非常感谢。

a

  • 可愛的小學生
  • *
  • 文章數: 1
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #111 於: 2005-08-07 17:20 »
hi, 楼主,
能再解释一下你对 建档的理解吗? step值和 RRA中xff, steps, rows 值,
按照你的理解和rrdtool官方站点。http://rrdtool.planetmirror.com//tutorial/rrdtutorial.html
中洋例的说明有出入, 样例中的
step 使用默认值 300s
RRA的steps设置1, rows设置24时,ne averages the data every time it is read (e.g. there's nothing to average) and keeps 24 samples (24 times 5 minutes is 2 hours)

RRA的steps设置6, rows设置10时,The other averages 6 values (half hour) and contains 10 of such averages (e.g. 5 hours)

你怎么理解指南样例中的这2句话呢?
如果按你的解释, 这个rows仅仅是一个记录的笔数, 还是象指南样例中参与计算呢?
这个2小时,5小时的意义有何在?
烦有空帮助解释, Thanks.

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #112 於: 2005-08-08 10:03 »
引用
step 使用默认值 300s
RRA的steps设置1, rows设置24时,ne averages the data every time it is read (e.g. there's nothing to average) and keeps 24 samples (24 times 5 minutes is 2 hours)

RRA:CF:xff:steps:rows  
我不知道這有什麼需要解釋的呀 !? 沒有記錯的話前面都有講過
step=5min,row 有 24 筆,不就是 5x24=120(2 hour),不知您所謂"出入"
何在 ?

RRA的steps设置6, rows设置10时,The other averages 6 values (half hour) and contains 10 of such averages (e.g. 5 hours)
所以意思是6個 step (5min) 合成一個資料,共 10 個
6x5x10=300 分鐘 = 5 小時   (6x5=30 分, half hour)
不知您有什麼樣的問題呢 ? 想必全篇您並末詳讀所致

至於您的困擾估記在 DS/RRA, DS 僅是名稱,變數而以, RRA 決定的
這個變數儲存的量及 CF(Min/Max/Average..)

olderboy

  • 憂鬱的高中生
  • ***
  • 文章數: 100
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #113 於: 2005-08-19 10:41 »
想請教一下大大,關於更新RRD資料時,你下面的
代碼: [選擇]
5.更新 RRD 資料 (rrdtool update)
rrdtool update filename [--template|-t ds-name[:ds-name]...] N|timestamp:value[:value...]
這個很好理解,基本上就是根據 DS來更新資料,如上述之 tcpdump.rrd,若有需要更新時及時
代碼:
$>rrdtool update tcpdump.rrd  1061811856:114:0:50:1199:0:821073


1061811856:114:0:50:1199:0:821073這些數值,除了1061811856,是表示一個時間點之外,不知其它的數值呢??也是表示他們要取得數值的時間點嗎??
還請大大指點一下~

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #114 於: 2005-08-19 12:02 »
就是 DSN (data source name) 的資料的值

peteryang

  • 憂鬱的高中生
  • ***
  • 文章數: 105
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #115 於: 2005-09-15 14:28 »
abelyang兄您好
  小弟之前安裝了rrdtool1.0版可以用crontab跑一分鐘一次.後來小弟把1.0的rpm移掉,而改成1.2的tar裝好了,可是用crontab卻跑不出來,而script都是一樣的,小弟直接執行這支script也可以跑,不知是不是1.2版的不能用crontab,但是這樣不是很奇怪嗎???還是1.2版的script不一樣呢??煩請指教,謝謝

小弟是參考您的script來跑的,如下
引用
#!/bin/sh
RRDFILE1="/var/www/html/sys/mrtg/192.168.200.254_2.rrd"
RRDFILE2="/var/www/html/sys/mrtg/192.168.200.254_3.rrd"
RRDFILE3="/var/www/html/sys/mrtg/192.168.200.13_65539.rrd"
RRDFILE4="/var/www/html/sys/mrtg/192.168.200.13_65540.rrd"

date_range="day week month year"
for t in $date_range
do
rrdtool graph /var/www/html/sys/mrtg/pdcnat$t.png \
--title "pdcnat traffic"  \
-s `date -d "-1 $t" +%s`        \
DEF:in1=$RRDFILE1:ds0:AVERAGE     \
DEF:in2=$RRDFILE2:ds0:AVERAGE     \
DEF:in3=$RRDFILE2:ds0:AVERAGE     \
DEF:in4=$RRDFILE2:ds0:AVERAGE     \
DEF:out1=$RRDFILE1:ds1:AVERAGE    \
DEF:out2=$RRDFILE2:ds1:AVERAGE    \
DEF:out3=$RRDFILE2:ds1:AVERAGE    \
DEF:out4=$RRDFILE2:ds1:AVERAGE    \
COMMENT:"In/Out                MAX         AVG         NOW \n"  \
AREA:in1#ff0000:"pdcnat WAN ": \
        GPRINT:in1:MAX:"%10.0lf"  \
        GPRINT:in1:AVERAGE:"%10.0lf"  \
        GPRINT:in1:LAST:"%10.0lf\n"  \
STACK:in2#00ff00:"pdcnat LAN ": \
        GPRINT:in2:MAX:"%10.0lf"  \
        GPRINT:in2:AVERAGE:"%10.0lf"  \
        GPRINT:in2:LAST:"%10.0lf\n"  \
AREA:in3#ff00ff:"NB LAN     ": \
        GPRINT:in1:MAX:"%10.0lf"  \
        GPRINT:in1:AVERAGE:"%10.0lf"  \
        GPRINT:in1:LAST:"%10.0lf\n"  \
STACK:in4#000f0f:"NB Wirless ": \
        GPRINT:in2:MAX:"%10.0lf"  \
        GPRINT:in2:AVERAGE:"%10.0lf"  \
        GPRINT:in2:LAST:"%10.0lf\n"  \
AREA:out1#ff0000:"pdcnat WAN ": \
        GPRINT:out1:MAX:"%10.0lf"  \
        GPRINT:out1:AVERAGE:"%10.0lf"  \
        GPRINT:out1:LAST:"%10.0lf\n"  \
STACK:out2#00ff00:"pdcnat LAN ": \
        GPRINT:out2:MAX:"%10.0lf"  \
-w 600 -h 150
done

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #116 於: 2005-09-15 14:37 »
1. 確定 沒有 PATH 問題 ? 因為路徑可能巳不同,cron 的 PATH 不見得同於 user PATH
2. 確定手動跑能否在一分內跑完 ? 如果跑不完要多注意

peteryang

  • 憂鬱的高中生
  • ***
  • 文章數: 105
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #117 於: 2005-09-15 14:47 »
abelyang兄您好
沒想到您這麼快就回了,小弟好感動,真的是不知要如何表達心中的感激
小弟有設過了PATH,而cron 的path小弟也是有確定過
而手動跑大概4秒就跑完了,所以不知道是什麼原因 :o
還會有其它的可能因素嗎
不然小弟就只好把這個script加到另一個script裡去跑cron看看了 :o
謝謝ableyang兄的指導,也請您繼續指教,謝謝

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #118 於: 2005-09-15 14:54 »
引述: "peteryang"
abelyang兄您好
沒想到您這麼快就回了,小弟好感動,真的是不知要如何表達心中的感激
小弟有設過了PATH,而cron 的path小弟也是有確定過
而手動跑大概4秒就跑完了,所以不知道是什麼原因 :o
還會有其它的可能因素嗎
不然小弟就只好把這個script加到另一個script裡去跑cron看看了 :o
謝謝ableyang兄的指導,也請您繼續指教,謝謝

如果是這樣的話,
你可能得看一下
/var/log/cron (是否執行)及
cron user 的 mail (結果為何) 來確認了

peteryang

  • 憂鬱的高中生
  • ***
  • 文章數: 105
    • 檢視個人資料
[教學]大作 rrdtool (像 mrtg 的東東) 完全攻略
« 回覆 #119 於: 2005-09-15 15:16 »
感謝abelyang兄的指教終於找到問題了
原本小弟沒有裝mail,後來就照您的建議,去看mail,所以就把mail給裝起來,果然看到是那邊的錯誤了,原來是script裡rrdtool的路徑沒有指,所以小弟就把路徑再加上去就好了,但是在環境變數裡,小弟有加了rrdtool的路徑,而且也執行過沒有問題,但是為什麼在script裡不能執行呢??難道是只能在目前script所在的路徑裡執行指令,若是沒有在同一目錄下就不能執行嗎??覺得怪怪的,不過終於解決問題了,謝謝abelyang兄的指導,謝謝