我有一个 rrd,其中包含以一分钟间隔收集的一系列 ping 往返时间:
DEF:roundtrip=$TARGET.rrd:rtt:LAST
当尝试在 VDEF 中提取该系列的最大值时,rrdgraph 转储核心:
VDEF:rttmax=往返,最大值
*** 检测到缓冲区溢出 ***:终止
我正在尝试获取一个数据系列,该数据系列仅绘制一条水平线,该水平线是图表时间跨度内该系列的最大值,并且可用于缩放图表中的其他数据系列。
我尝试:
DEF:roundtrip=$TARGET.rrd:rtt:LAST
DEF:maxrtt=$TARGET.rrd:rtt:MAX \
这会产生与往返相同的 maxrtt。 (我想我明白为什么,合并函数“MAX”和“LAST”在这个rrd的上下文中工作相同,它只包含一系列1分钟间隔的RTT时间。)
您知道我在 VDEF 方面做错了什么吗?如果不将最大值放入 rrd 本身,我是否无法做到这一点?
(最终我的目标是制作一张图表,一个 Y 轴上显示 ping 往返时间,另一个 Y 轴上显示丢包百分比。往返时间变化很大,在 0 到 1000 之间,有一些图在 0 到 10000 之间在其他图上,因此数据需要自动缩放。丢包固定在 0 到 100% 之间。)
rrd工具信息:
filename = "K6ORI-LPD-TABLETOP-OMNI.rrd"
rrd_version = "0003"
step = 60
last_update = 1690739945
header_size = 896
ds[pl].index = 0
ds[pl].type = "GAUGE"
ds[pl].minimal_heartbeat = 120
ds[pl].min = 0.0000000000e+00
ds[pl].max = 1.0000000000e+02
ds[pl].last_ds = "0"
ds[pl].value = 0.0000000000e+00
ds[pl].unknown_sec = 0
ds[rtt].index = 1
ds[rtt].type = "GAUGE"
ds[rtt].minimal_heartbeat = 120
ds[rtt].min = 0.0000000000e+00
ds[rtt].max = 1.0000000000e+07
ds[rtt].last_ds = "9.099"
ds[rtt].value = 5.1636724911e+01
ds[rtt].unknown_sec = 0
rra[0].cf = "MAX"
rra[0].rows = 1500
rra[0].cur_row = 440
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[0].cdp_prep[1].value = NaN
rra[0].cdp_prep[1].unknown_datapoints = 0
转储核心的rrdgraph命令:
rrdtool graph $TARGET.png -w 700 -h 400 -a PNG \
--start -7200 --end now --slope-mode \
--title "$TARGET" --watermark "`date`" --vertical-label "latency(ms)" \
--lower-limit 0 --x-grid MINUTE:10:HOUR:1:MINUTE:30:0:%R \
DEF:roundtrip=$TARGET.rrd:rtt:LAST \
DEF:packetloss=$TARGET.rrd:pl:LAST \
VDEF:rttmax=roundtrip,MAXIMUM \
CDEF:plscaled=rttmax,packetloss,*,100,/ \
AREA:plscaled#ff8800:"packetloss (%)" \
LINE2:roundtrip#000000:"roundtrip (ms)\n" \
GPRINT:roundtrip:LAST:"Cur\: %5.2lf" \
GPRINT:roundtrip:MAX:"Max\: %5.2lf" \
GPRINT:roundtrip:MIN:"Min\: %5.2lf\n" \
GPRINT:plscaled:LAST:"Plscaled\: %5.2lf\n" \
GPRINT:packetloss:LAST:"Packetloss\: %5.2lf\n" \
GPRINT:rttmax:LAST:"Rttmax\: %5.2lf\n" \
您的 RRD 文件不包含图形命令期望的 RRA 类型。这似乎在您的 rrdtool 版本中引起了某种错误(您使用的是哪个版本?)并且您收到了错误。
要解决此问题,您应该修改 RRD 中的 RRA 类型。
目前,您有一个 RRA,类型 MAX,粒度 1pdp(步长 60 秒),大约 25 小时长。
您的图形命令正在尝试获取 LAST 类型的数据,其粒度在 2 小时窗口内的 18 秒(隐式)区域内。
RRA 具有请求的时间窗口,并且 60 秒的粒度足够接近,但类型(合并因子)错误。尽管在这个粒度上,LAST、MAX、MIN 和 AVG 在功能上都是相同的,但 rrdtool 可能会令人困惑。
我建议您进行以下更改:
但是,如果将来您确实希望获得更大的图表(每周等),并正确显示 MIN 和 MAX,那么您应该考虑添加 MIN 和 MAX 类型 RRA ,然后添加更多 DEF 语句以将其用于您在 MIN/MAX GPRINT 行中使用的新变量(因此您显示 MAX RRA 的 MAX,而不是 AVG RRA 的 MAX,这在当前 1pdp 分辨率下是相同的,但如果您定义较低的值,则会变得更加不准确-未来的粒度 RRA)