我想在PHP的幫助下創建RRD圖,以便跟蹤服務器的接種點,排出口和計數器。php RRD圖分離
到目前爲止,腳本的運行方式與預期的一樣,但是當我試圖生成2個或更多個獨立的圖時,我的問題就出現了。我試圖製作(小時,每週等)圖。我認爲創建一個循環會解決我的問題,因爲我已經在幾小時和幾天內分裂了RRA。不幸的是,我最終有2個圖表如預期的那樣同時更新,但繪製了同樣的圖。有沒有遇到過類似的問題?我使用RRD :: Simple在perl中應用了相同的程序,其中非常簡單,幾乎可以自動調整一切。
我有我的代碼工作示例下提供最小的可能數據,因爲該代碼是有點長:
<?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 */
?>
感謝您的即時回覆,我通過'foreach()'函數創建了兩個帶有不同參數的圖形。我已按照小時圖和每日圖''end - 1d''設置''end - 1h''來遵循您的指示。我爲每次迭代都指定了'$ start = $ t - ($ step * $ rounds);''其中'$ t = time()'和'$ rounds = 1 ++;'。原因是,沒有指定所有這些參數,我發現我無法獲取圖表,我一直在用「--start」,「now」,而是「--end」,「$ t - 1h 「'和'」--end「,」$ t - 1d「'它看起來不起作用。空白圖形。 – thanos
對不起先前評論的錯誤回答。我想知道你在說什麼: '「--start」,「end - 1 hour」, 「--end」,$ t,' 和 '「--start」,「end - 1 day 「 」--end「,$ t,' 我按照你的指示完成了!哇,你真的知道RRD的。那麼如果你不介意的話,我可能需要再問你幾件事。抱歉持續的問題,但似乎你真的知道你在做什麼。你說我應該每小時指定一個小步驟,我現在將它設置在5個步驟和''RRA:AVERAGE:0.5:12:60''行60.我認爲這是1小時圖的一個很好的配置。任何建議? – thanos