使用 rrdtool 或其他语言计算每 5 个样本的平均值

使用 rrdtool 或其他语言计算每 5 个样本的平均值

我想对 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 时执行那么有效。

相关内容