我最終制作了兩套RRD進行試驗;
rrdtool create test1.rrd \
--step '1' \
'DS:ds0:GAUGE:5:0:U' \
'RRA:AVERAGE:0.5:1:86400' \
'RRA:MAX:0.5:1:86400' \
'RRA:AVERAGE:0.5:60:10080' \
'RRA:MAX:0.5:60:10080' \
'RRA:AVERAGE:0.5:120:21600' \
'RRA:MAX:0.5:120:21600' \
'RRA:AVERAGE:0.5:300:105120' \
'RRA:MAX:0.5:300:105120'
和
rrdtool create test.rrd \
--step '1' \
'DS:ds0:GAUGE:5:0:U' \
'RRA:AVERAGE:0.5:1:86400' \
'RRA:LAST:0.5:1:86400' \
'RRA:AVERAGE:0.5:60:10080' \
'RRA:LAST:0.5:60:10080' \
'RRA:AVERAGE:0.5:120:21600' \
'RRA:LAST:0.5:120:21600' \
'RRA:AVERAGE:0.5:300:105120' \
'RRA:MAX:0.5:300:105120'
,讓我來存儲;
1sec, archive is kept for 1day back
1min, archive is kept for 7day back
2min, archive is kept for 30day back
5min, archive is kept for 1year back
這使得這些漂亮的圖;
其中PHP用下面的代碼所作的曲線圖;
<?php
$opts = array(
'--width', '600',
'--height', '100',
'--title', 'Avg Time Delta xxxxxxxxxx (Last 1 Hr)',
'--vertical-label', 'Time Delta',
'--watermark', 'xxxxxxxxxx',
'--start', 'end-1h',
'DEF:out=test.rrd:ds0:AVERAGE',
'DEF:max=test.rrd:ds0:MAX',
'AREA:out#9966FF:Avg Time Delta',
'LINE:max#996600:Max Time Delta',
);
$ret = rrd_graph("graphs/1hr-graph.png", $opts);
if(!is_array($ret))
{
$err = rrd_error();
echo "rrd_graph() ERROR: $err\n";
}
echo '<img src="http://server/graphs/1hr-graph.png">';
echo '<BR>';
?>
<?php
$opts = array(
'--width', '600',
'--height', '100',
'--title', 'Last Time Delta xxxxxxxxxx (Last 1 Hr)',
'--vertical-label', 'Time Delta',
'--watermark', 'xxxxxxxxxx',
'--start', 'end-1h',
'DEF:avg=test1.rrd:ds0:AVERAGE',
'DEF:last=test1.rrd:ds0:LAST',
'AREA:avg#99AAFF:Avg Time Delta',
'LINE:last#99AA00:Last Time Delta',
);
$ret = rrd_graph("graphs/1hr-last.png", $opts);
if(!is_array($ret))
{
$err = rrd_error();
echo "rrd_graph() ERROR: $err\n";
}
echo '<img src="http://server/graphs/1hr-last.png">'
?>
從我自己的理智檢查和觀看實時看起來這兩個圖的數據是正確的,但表現方式上略有不同。當監控的數據饋送非常充分時,我只能每10秒收到1 mesg,我在LAST
圖表中獲得了很多差距,而AVERAGE
圖表被平滑化以填補空白。我還嘗試將另一個RRD設置爲ABSOLUTE
,但圖表看起來「錯誤」,時間都低於1.0。
因此,看起來我可以在我喜歡的任何間隔時間內支持我的RRD。它看起來像RRD將按定義的時間間隔(在我的情況下爲1秒)對我的數據進行採樣,然後根據我保存它的方式(Gauge,Absolute等)做我需要做的事情。將心跳設置爲100 I在該100秒超時前應始終接收一些數據 - 這樣可以避免在我的數據庫中使用NAN
條目。
目前我無法判斷此配置在中斷時間表現如何(例如來自AMQ服務器的延遲消息),我會嘗試運行一些測試,當我得到一些空閒時間並回報任何事情時重大。
我想我會改變我這樣做的方式。我設法得到某種圖表,但我不確定它的平均值。我現在的想法是使用現有的ruby scrip對每10個時間戳取一個平均值,然後寫入一個日誌文件,我可以每分鐘使用mrtg進行讀取 – user3788685
這不是必需的,您可以根據需要運行儘可能多的更新。 rrdtool會爲你建立平均值。 –
我想我已經設法將其整理出來。我會用更多的信息更新我的問題。整個晚上都在運行,圖形看起來比我觀察的數據還好。我設置的哈特節拍太低,所以缺少數據,現在它的設置高得多的東西看起來不錯。 – user3788685