我有一个rrd文件,其中包含每分钟到服务器(GAUGE)的平均ping时间,当服务器离线时(由于现在无关紧要的原因非常频繁),它存储NaN/unknown。
我想创建一个图表,其中包含服务器每小时脱机的百分比,我认为可以通过计算60个样本内的每个NaN,然后除以60来实现。
现在我得到的点,我定义了一个变量是1,当服务器脱机和0,否则,但我已经读了文档,不知道如何聚合这个:
DEF:avg=server.rrd:rtt:AVERAGE CDEF:offline=avg,UN,1,0,IF
在创建图形时是否可以这样做?或者我必须将这些信息存储在另一个rd中?
我不认为你能完全做到你想要的,但你有几个选择。
您可以定义一个滑动窗口平均值,它显示了前一个小时未知的百分比,并使用TRENDNAN
.
DEF:avg=server.rrd:rtt:AVERAGE:step=60
CDEF:offline=avg,UN,100,0,IF
CDEF:pcavail=offline,3600,TREND
LINE:pcavail#ff0000:Availability
将avg
定义为ping数据的1分钟时间序列。注意,我们使用step=60
来确保即使在较小的图中也能获得最佳的数据分辨率。然后,当服务器存在时,我们将offline
定义为100,当服务器不存在时定义为0。然后,pcavail
是此值的1小时滑动窗口平均值,这实际上是前一小时内服务器可用的时间百分比。
然而,有一个问题,在RRDTool将默默地总结源数据之前,你得到它的手,如果有许多数据点到一个像素的图形(这不会发生,如果做fetch
当然)。为了解决这个问题,你需要在存储时间内完成offline
CDEF—-即根据avg
DS是否已知,拥有COMPUTE
类型DS为100或0。然后,任何平均都会保留数据(正常平均会忽略未知,或者xff
设置使整个cdp
未知)。
rrdtool create ...
DS:rtt:GAUGE:120:0:9999
DS:offline:COMPUTE:rtt,UN,100,0,IF
rrdtool graph ...
DEF:offline=server.rrd:offline:AVERAGE:step=3600
LINE:offline#ff0000:Availability
如果您能够修改您的RRD,并且不需要历史数据,那么以这种方式使用COMPUTE将允许您按照需要在1小时的阶梯图中显示数据。