2014-05-11 35 views
0

我想在PHP的幫助下創建RRD圖,以便跟蹤服務器的接種點,排出口和計數器。php RRD圖分離

到目前爲止,腳本的運行方式與預期的一樣,但是當我試圖生成2個或更多個獨立的圖時,我的問題就出現了。我試圖製作(小時,每週等)圖。我認爲創建一個循環會解決我的問題,因爲我已經在幾小時和幾天內分裂了RRA。不幸的是,我最終有2個圖表如預期的那樣同時更新,但繪製了同樣的圖。有沒有遇到過類似的問題?我使用RRD :: Simple在perl中應用了相同的程序,其中非常簡單,幾乎可以自動調整一切。

Graph Output

我有我的代碼工作示例下提供最小的可能數據,因爲該代碼是有點長:

<?php 

$file = "snmp-2"; 
$rrdFile = dirname(__FILE__) . "/snmp-2.rrd"; 
$in = "ifInOctets"; 
$out = "ifOutOctets"; 
$count = "sysUpTime"; 
$step = 5; 
$rounds = 1; 
$output = array("Hourly","Daily"); 

while (1) { 
    sleep (6); 

    $options = array(
      "--start","now -15s", // Now -10 seconds (default) 
      "--step", "".$step."", 
      "DS:".$in.":GAUGE:10:U:U", 
      "DS:".$out.":GAUGE:10:U:U", 
      "DS:".$count.":ABSOLUTE:10:0:4294967295", 
      "RRA:MIN:0.5:12:60", 
      "RRA:MAX:0.5:12:60", 
      "RRA:LAST:0.5:12:60", 
      "RRA:AVERAGE:0.5:12:60", 
      "RRA:MIN:0.5:300:60", 
      "RRA:MAX:0.5:300:60", 
      "RRA:LAST:0.5:300:60", 
      "RRA:AVERAGE:0.5:300:60", 
      ); 


    if (!isset($create)) { 

    $create = rrd_create(
      "".$rrdFile."", 
      $options 
      ); 

    if ($create === FALSE) { 
     echo "Creation error: ".rrd_error()."\n"; 
    } 
    } 

    $t = time(); 

    $ifInOctets = rand(0, 4294967295); 
    $ifOutOctets = rand(0, 4294967295); 
    $sysUpTime = rand(0, 4294967295); 

    $update = rrd_update(
       "".$rrdFile."", 
       array(
       "".$t.":".$ifInOctets.":".$ifOutOctets.":".$sysUpTime."" 
       ) 
       ); 

    if ($update === FALSE) { 
    echo "Update error: ".rrd_error()."\n"; 
    } 

    $start = $t - ($step * $rounds); 

    foreach ($output as $test) { 

    $final = array(
      "--start","".$start." -15s", 
      "--end", "".$t."", 
      "--step","".$step."", 
      "--title=".$file." RRD::Graph", 
      "--vertical-label=Byte(s)/sec", 
      "--right-axis-label=latency(min.)", 
      "--alt-y-grid", "--rigid", 
      "--width", "800", "--height", "500", 
      "--lower-limit=0", 
      "--alt-autoscale-max", 
      "--no-gridfit", 
      "--slope-mode", 
      "DEF:".$in."_def=".$file.".rrd:".$in.":AVERAGE", 
      "DEF:".$out."_def=".$file.".rrd:".$out.":AVERAGE", 
      "DEF:".$count."_def=".$file.".rrd:".$count.":AVERAGE", 
      "CDEF:inbytes=".$in."_def,8,/", 
      "CDEF:outbytes=".$out."_def,8,/", 
      "CDEF:counter=".$count."_def,8,/", 
      "COMMENT:\\n", 
      "LINE2:".$in."_def#FF0000:".$in."", 
      "COMMENT:\\n", 
      "LINE2:".$out."_def#0000FF:".$out."", 
      "COMMENT:\\n", 
      "LINE2:".$count."_def#FFFF00:".$count."", 
      ); 

    $outputPngFile = rrd_graph(
        "".$test.".png", 
        $final 
        ); 

    if ($outputPngFile === FALSE) { 
     echo "<b>Graph error: </b>".rrd_error()."\n"; 
    } 

    } /* End of foreach function */ 

    $debug = rrd_lastupdate (
       "".$rrdFile."" 
       ); 

    if ($debug === FALSE) { 
    echo "<b>Graph result error: </b>".rrd_error()."\n"; 
    } 

    var_dump ($debug); 

    $rounds++; 

} /* End of while loop */ 

?> 

回答

1

幾個問題。

首先,您的RRD定義步驟爲5秒和RRA,步長爲12x5s = 1min和300x5s = 25min。它們的長度也只有60行,分別爲1小時和25小時。你永遠不會得到這樣的每週圖表!你需要添加更多的行;此步驟似乎也很短,您可能需要小時圖的小步RRA和每週圖的更大步驟。其次,目前還不清楚你如何調用圖函數。你似乎指明:

"--start","".$start." -15s", 
"--end", "".$t."", 
"--step","".$step."", 

...這將迫使它使用5秒的時間間隔(不可用的,所以1分鐘一個總是習慣)和圖形上只從時間窗口開始到最後一次更新,而不是像你問的那樣是「每小時」或「每日」。

請注意,您定義的RRA沒有定義您要求的圖形的時間窗口。另外,僅僅因爲你定義了多個RRA,它並不意味着你會得到不止一個圖,除非oyu用不同的參數調用圖函數兩次。

如果你想有一個日K線圖,使用

"--start","end - 1 hour", 
"--end",$t, 

不要指定可用無論如何都會被使用的步驟爲最合適。對於日常圖,使用

"--start","end - 1 day" 
"--end",$t, 

同樣,不需要指定一個步驟。

希望這會使它更清晰一點。大多數RRD圖形選項都具有合理的默認值,RRDTool非常擅長根據圖形大小,時間窗口和DEF語句選擇正確的RRA。

+0

感謝您的即時回覆,我通過'foreach()'函數創建了兩個帶有不同參數的圖形。我已按照小時圖和每日圖''end - 1d''設置''end - 1h''來遵循您的指示。我爲每次迭代都指定了'$ start = $ t - ($ step * $ rounds);''其中'$ t = time()'和'$ rounds = 1 ++;'。原因是,沒有指定所有這些參數,我發現我無法獲取圖表,我一直在用「--start」,「now」,而是「--end」,「$ t - 1h 「'和'」--end「,」$ t - 1d「'它看起來不起作用。空白圖形。 – thanos

+0

對不起先前評論的錯誤回答。我想知道你在說什麼: '「--start」,「end - 1 hour」, 「--end」,$ t,' 和 '「--start」,「end - 1 day 「 」--end「,$ t,' 我按照你的指示完成了!哇,你真的知道RRD的。那麼如果你不介意的話,我可能需要再問你幾件事。抱歉持續的問題,但似乎你真的知道你在做什麼。你說我應該每小時指定一個小步驟,我現在將它設置在5個步驟和''RRA:AVERAGE:0.5:12:60''行60.我認爲這是1小時圖的一個很好的配置。任何建議? – thanos