我想对 5 个样本取平均值并计算一个值:
当前输出 - 我把分辨率设为 5 分钟,但收到 5 个样本:
$ rrdtool fetch file.rrd AVERAGE -r 300 --start 1200000000 --end 1200000300
1200000000: 1.3938888889e+00
1200000060: 4.9572222222e+00
1200000120: 7.1675000000e+00
1200000180: 1.0982500000e+01
1200000240: 7.6136111111e+00
1200000300: 7.2169444444e+00
期望结果:
$ rrdtool fetch file.rrd AVERAGE -r 300 --start 1200000000 --end 1200000300
1200000000: 1.3938888889e+00
1200000300: x.xxxxxxxxxxe+00 - average
我想用 rrdtool 或其他语言(如 perl、bash 等)来计算它......
答案1
该fetch
命令仅从原始 RRA 中检索数据;如果您没有所请求粒度的 RRA,则将使用最接近的可用数据,但不会执行任何额外的计算。
创建 RRD 文件时,向 RRD 文件添加新的 RRA,并使用 1cdp==5pdp 规则。例如
rrdtool create file.rrd -s 60
DS:ds0:GAUGE:120:0:100
RRA:AVERAGE:0.5:1:400 RRA:AVERAGE:0.5:5:400
此示例设置了 400 行;您可能希望使用更多。
当您有 5pdp RRA 时,那么您可以使用rrdtool fetch -r 300
,否则如果您只有 1pdp RRA,则只能使用 60 的分辨率(一步)。
您可能还想看看,rrdtool xport
它(以相同的方式rrdtool graph
)允许您定义可以作为摘要的输出计算值。
rrdtool xport --step 300 --start 1200000000 --end 1200000300
--maxrows 400
DEF:value=file.rrd:ds0:AVERAGE
XPORT:value
这当然假设您的 DS 是名称ds0
,并且不如fetch
在您已经拥有所需的 RRA 时执行那么有效。