我已经搜索了很多次,以至于我累了。
我有一个 rrdtool 数据库,用来打印最大值、最小值、平均值。 现在,我想打印存储在 rrd db 中的最大值的时间。
这是我的rrd(CPU监控(的定义:
rrdtool create CPU.rrd --start $Date
DS:CPU_ALL:GAUGE:600:U:U
DS:User:GAUGE:600:U:U
DS:Sys:GAUGE:600:U:U
DS:Wait:GAUGE:600:U:U
DS:Idle:GAUGE:600:U:U
RRA:AVERAGE:0.5:1:20000
RRA:AVERAGE:0.5:1:20000
RRA:AVERAGE:0.5:1:20000
RRA:AVERAGE:0.5:1:20000
RRA:AVERAGE:0.5:1:20000
这是我的图形脚本:
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"
如何生成此图,加上最大 CPU 值的时间?
好的,你在这里有几个问题。
首先,您的 RRD 配置错误。 您定义了 5 个相同的 RRA - 这没有意义。 一个 RRA 将为所有定义的 DS 保存指定分辨率的值。 但是,您可能希望在更高的粒度下拥有更多(以加快月份或年份的图形(。 您可能还需要最小或最大类型 RRA,以便您的最小和最大数字更准确。
例如,此集合定义了 MAX 和最小 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 和最小类型 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 网站上的教程和示例,这应该可以帮助您更好地了解 RRDTool 的工作原理。