나는 서버의 inoctets, outoctets 및 카운터를 추적하기 위해 PHP의 도움으로 RRD 그래프를 작성하려고합니다.PHP RRD 그래프 분리
지금까지 스크립트는 예상대로 작동하지만 두 개 이상의 개별 그래프를 생성하려고 할 때 문제가 발생합니다. 나는 (시간별, 주별, 등) 그래프를 생산하려고합니다. 나는 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 "'을 설정하여 지침을 따라 갔다. 나는 $ it = time()과 $ rounds = 1 ++;를 반복 할 때마다'$ start = $ t - ($ step * $ rounds);를 지정했다. 그 이유는이 모든 매개 변수를 지정하지 않고서는 "--start", "now", 그러나 "--end", "$ t - 1h"를 사용하여 그래프를 가져올 수 없다는 것을 알게되었습니다. "''and''--end", "$ t - 1d"'그것이 작동하지 않는 것 같습니다. 빈 그래프입니다. – thanos
이전 의견에 죄송합니다.''--start ","end - 1 hour ", "--end ", $ t,' 및 '"--start ","end - 1day " "--end ", $ t, ' 나는 당신의 지시를 따르고 완벽하게 일했습니다! 와우, 당신은 RRD를 정말로 알고 있습니다. 음, 상관 없으면 몇 가지 추가 사항을 물어볼 필요가 있습니다. 지속적인 질문에 대해 유감스럽게 생각하지만 실제로 무엇을하고 있는지 알 것 같습니다. 당신은 시간 단계별로 더 작은 단계를 지정해야한다고 말했고 나는 현재 5 단계와 RRA : AVERAGE : 0.5 : 12 : 60 "행 60으로 설정했습니다. 1 시간 그래프에는 좋은 구성이라고 생각했습니다. 어떤 추천? – thanos