VDEF 核心转储?

问题描述 投票:0回答:1

我有一个 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" \
rrdtool
1个回答
0
投票

您的 RRD 文件不包含图形命令期望的 RRA 类型。这似乎在您的 rrdtool 版本中引起了某种错误(您使用的是哪个版本?)并且您收到了错误。

要解决此问题,您应该修改 RRD 中的 RRA 类型。

目前,您有一个 RRA,类型 MAX,粒度 1pdp(步长 60 秒),大约 25 小时长。

您的图形命令正在尝试获取 LAST 类型的数据,其粒度在 2 小时窗口内的 18 秒(隐式)区域内。

RRA 具有请求的时间窗口,并且 60 秒的粒度足够接近,但类型(合并因子)错误。尽管在这个粒度上,LAST、MAX、MIN 和 AVG 在功能上都是相同的,但 rrdtool 可能会令人困惑。

我建议您进行以下更改:

  • 更改 RRD 文件以将 RRA 定义为 AVG 类型。尽管功能相同,但它是最佳实践,因为它使行为更清晰,并且 AVG 是默认值。
  • 更改图形命令以在 DEF 语句中使用 AVG。这将确保 RRA 匹配。此外,如果您将来添加更大粒度的 AVG 类型 RRA,那么如果您请求更宽的时间窗口,就会选择它们。
  • 更改图形命令以在 GPRINT 中使用 AVG 而不是 LAST。

但是,如果将来您确实希望获得更大的图表(每周等),并正确显示 MIN 和 MAX,那么您应该考虑添加 MIN 和 MAX 类型 RRA ,然后添加更多 DEF 语句以将其用于您在 MIN/MAX GPRINT 行中使用的新变量(因此您显示 MAX RRA 的 MAX,而不是 AVG RRA 的 MAX,这在当前 1pdp 分辨率下是相同的,但如果您定义较低的值,则会变得更加不准确-未来的粒度 RRA)

© www.soinside.com 2019 - 2024. All rights reserved.