Create db:
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 $1}'`
$RRDTOOL updatev $FILE N:$COMMAND
echo $COMMAND >> log.txt
和 cron 任务:
0-55/1 * * * * ./get_mem.sh
我试图从自己和根开始运行(结果相似)
因此,我尝试获取我的值:
rrdtool fetch test.rrd AVERAGE -s 1509908400
屏幕
(所有抓取类型都显示 -NANS)
转储类似:屏幕
日志.txt(只需确保):屏幕
我做错了什么?
你没有说你添加了多少数据样本;你至少需要 13 个才能在你的输出中有任何机会出现 NaN 以外的任何东西。
你肯定有这些问题——
- 您的步长为 60 秒,但您的 DS 心跳也是 60 秒。 这意味着您需要比 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