rrdtool fetch returns 全部-nan

rrdtool fetch returns all -nan

创建数据库:

rrdtool create test.rrd --step 60 --start N DS:mem:GAUGE:60:U:U RRA:LAST:0.5:12:24 RRA:MAX:0.5:12:24 RRA:MIN:0.5:12:24 RRA:AVERAGE:0.5:12:24

然后我创建 get_mem.sh:

#!/bin/bash

export PATH=/usr/local/rrdtool/bin/rrdtool:/usr/local/rrdtool/bin/rrdtool:/home/parallels/bin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:$PATH


RRDTOOL='/usr/local/rrdtool/bin/rrdtool'
FILE='test.rrd'
COMMAND=`cat /proc/meminfo | grep MemFree | grep -oE '[0-9]+' | awk '{print }'`
$RRDTOOL updatev $FILE N:$COMMAND
echo $COMMAND >> log.txt

和 cron 任务:

0-55/1 * * * * ./get_mem.sh

我尝试从我自己和 root 中 运行(结果相似)

所以,我尝试获取我的值:

rrdtool fetch test.rrd AVERAGE -s 1509908400

screen

(所有抓取类型显示 -nans)

转储类似:screen

log.txt(只要确定):screen

我做错了什么?

你不说你添加了多少数据样本;您至少需要 13 才能在输出中获得 NaN 以外的任何值。

你肯定有这些问题--

  • 你的Step size是60s,但是你的DS Heartbeat也是60s。这意味着您需要 比 59 更频繁 的样本才能使它们有效。一般来说,你的心跳应该是步长的两倍。
  • 您的 cronjob 从 0 到 55 每分钟收集一次数据。第 56-59 分钟怎么样?此外,如果这是每分钟收集一次,那么它就在您的心跳边界上,因此它可能会存储 NaN。
  • 你最小的 RRA 有 1cdp=12pdp。这可能就是你想要的;但请记住,您需要 12 个连续的有效数据点才能在 RRA 中获得一个条目。也许添加 1cdp=1pdp 的 RRA?

我建议您像这样创建 RRD:

rrdtool create test.rrd --step 60 --start N \
    DS:mem:GAUGE:120:0:U \
    RRA:AVERAGE:0.5:1:24 \
    RRA:LAST:0.5:12:24 RRA:MAX:0.5:12:24 \
    RRA:MIN:0.5:12:24 RRA:AVERAGE:0.5:12:24