如何在rrdtool图形中打印最大值的时间?

时间:2018-09-27 13:35:31

标签: rrdtool

我已经搜索了很多次,很累。

我有一个rrdtool数据库,用于打印MAX,Min,Average值。 现在,我要打印存储在rrd db中的最大值的时间。

这是我的rrd(CPU监视)的定义:

rrdtool graph CPUUsed.png --start -1w \
DEF:CPUTOTAL=CPU.rrd:CPU_ALL:AVERAGE AREA:CPUTOTAL#FF0000:"CPU Used" LINE2:CPUTOTAL#FF0000 \
--vertical-label "CPU" \
--title "CPU " \
--width 530 \
--height 380 \
GPRINT:CPUTOTAL:MAX:"MAX\:%6.2lf %s" \
GPRINT:CPUTOTAL:MIN:"MIN\:%6.2lf %s"  \
GPRINT:CPUTOTAL:AVERAGE:"MOY\:%6.2lf %s"  \
GPRINT:CPUTOTAL:LAST:"LAST\:%6.2lf %s" 

这是我的图形脚本:

 <defaultProxy enabled="true" useDefaultCredentials="true">
    <proxy bypassonlocal="True" proxyaddress=" HYPERLINK "http://<yourproxy:port#>" 
     http://<yourproxy:port#>"/>
 </defaultProxy>

如何生成此图加上最大CPU值的时间?

1 个答案:

答案 0 :(得分:0)

好的,您在这里遇到了几个问题。

首先,您的RRD配置错误。您定义了5个相同的RRA-这没有意义。一个RRA将为所有定义的DS保持指定分辨率下的值。但是,您可能希望以更高的粒度添加更多(以加快月份或年份的图表)。您可能还希望使用MIN或MAX类型的RRA,以便您的MIN和MAX数字更加准确。

例如,此集合定义了MAX和MIN RRA以及平均值,并且还将具有4个汇总,这些汇总大致对应于每日,每周,每月和每年的图。

RRA:AVERAGE:0.5:1:20000 \
RRA:AVERAGE:0.5:6:2000 \
RRA:AVERAGE:0.5:24:2000 \
RRA:AVERAGE:0.5:288:2000 \ 
RRA:MAX:0.5:1:20000 \
RRA:MAX:0.5:6:2000 \
RRA:MAX:0.5:24:2000 \
RRA:MAX:0.5:288:2000 \
RRA:MIN:0.5:1:20000 \
RRA:MIN:0.5:6:2000 \
RRA:MIN:0.5:24:2000 \
RRA:MIN:0.5:288:2000 

第二,当您想在GPRINT行中打印单个图形时,需要使用VDEF,通过一些合并功能将时间序列数据(来自DEF或CDEF)转换为单个值。

例如,这组命令将使用先前定义的MAX和MIN类型的DEF,然后使用VDEF计算它们的汇总。当然,您可以只使用CPUTOTAL而不是定义CPUTOTALMAX和CPUTOTALMIN(为自己节省更多的RRA),但是,当您转向使用粒度较低的RRA时,准确性会下降。如果您没有较低粒度的RRA,那么您会很准确,但是会在图形处理时使用大量额外的CPU,并且图形创建会变慢。使用不同分辨率的RRA可以加快图形的创建速度。

DEF:CPUTOTAL=CPU.rrd:CPU_ALL:AVERAGE \ 
DEF:CPUTOTALMAX=CPU.rrd:CPU_ALL:MAX \ 
DEF:CPUTOTALMIN=CPU.rrd:CPU_ALL:MIN \ 
VDEF:overallmax=CPUTOTALMAX,MAXIMUM \ 
VDEF:overallmin=CPUTOTALMIN,MINIMUM \ 
VDEF:overallavg=CPUTOTAL,AVG \ 
VDEF:overalllst=CPUTOTAL,LAST \ 
AREA:CPUTOTAL#FF0000:"CPU Used" \
LINE2:CPUTOTAL#FF0000 \ 
GPRINT:overallmax:"MAX\:%6.2lf %s" \ 
GPRINT:overallmin:"MIN\:%6.2lf %s"  \ 
GPRINT:overallavg:"MOY\:%6.2lf %s"  \ 
GPRINT:overalllst:"LAST\:%6.2lf %s"  \
GPRINT:overallmax:"Max was at %c":strftime

最后一行将打印最大值的时间,而不是。 VDEF计算MAX或MIN时,实际上返回两个分量-值和时间点。通常,您使用该值,但是通过将:strftime附加到GPRINT伪指令中,可以使用时间分量。

我建议您花更多的时间来研究RRDTool Website上的教程和示例,这应该有助于您更好地了解RRDTool的工作原理。