Rrdtool输出错误的数字



下面的脚本监视从ss -s

建立的TCP连接
rrdtool=$(which rrdtool);
db=/opt/rrd/estabconns.rrd
img=/usr/share/nginx/html/awp
export IFS=" ," 
arr=($(ss -s | grep TCP:))
total=${arr[3]}
if [ ! -e $db ]
then
        $rrdtool create $db 
        -s 5 
        DS:conns:GAUGE:600:0:50000000000 
        RRA:AVERAGE:0.5:1:576 
        RRA:AVERAGE:0.5:6:672 
        RRA:AVERAGE:0.5:24:732 
        RRA:AVERAGE:0.5:144:1460
fi
$rrdtool updatev $db -t conns N:$total
for period in hour day week month year
do
        $rrdtool graph $img/connections-$period.png -s -1$period 
        -t "ams1 connections - $period" -z 
        -c "BACK#FFFFFF" -c "SHADEA#FFFFFF" -c "SHADEB#FFFFFF" 
        -c "MGRID#AAAAAA" -c "GRID#CCCCCC" -c "ARROW#333333" 
        -c "FONT#333333" -c "AXIS#333333" -c "FRAME#333333" 
        -h 134 -w 543 -l 0 -a PNG -v "concurrent connections" 
        DEF:conns=$db:conns:AVERAGE 
        VDEF:min=conns,MINIMUM 
        VDEF:max=conns,MAXIMUM 
        VDEF:avg=conns,AVERAGE 
        VDEF:lst=conns,LAST 
        "COMMENT: l" 
        "COMMENT:               " 
        "COMMENT:Minimum    " 
        "COMMENT:Maximum    " 
        "COMMENT:Average    " 
        "COMMENT:Current    l" 
        "COMMENT:   " 
        "LINE1:conns#0AC43C:Conns  " 
        "GPRINT:min:%6.0lf      " 
        "GPRINT:max:%6.0lf      " 
        "GPRINT:avg:%6.0lf      " 
        "GPRINT:lst:%6.0lf      l" > /dev/null
done

我的计划:

*/5 * * * * /bin/bash /root/rrd.sh

问题是显示错误的数字。我从ss -s的TCP连接始终是150-300,但在输出图片上,它显示的值在0和3之间,有时更高,但通常是错误的。

首先,注意您已经在代码中将DS类型定义为GAUGE——但是您提到的行为听起来有点像COUNTER。您之前是否将其创建为计数器?尝试在RRD文件上使用rrdtool info $db,并验证它实际上是一个GAUGE。你可能会发现它不是。

其次,RRD文件的Step为5秒,DS的心跳为10分钟。你每5分钟更新一次。你的意思是5分钟(300秒)吗?否则,当行被填充时,你会得到一些有趣的效果。该步骤通常应符合预期的更新频率。

第三,使用时间戳N而不是精确地在步骤边界上进行更新可能会遇到问题。这将导致数据规范化,但不足以将300更改为3。使用

之类的内容修复此问题
$time = `date +%s`
$offset = `expr $time % $step`
$t = `expr $time - $offset`
$rrdtool update $db -t conns $t:$total

最后——你确定你正在使用正确的值来更新吗?让您的脚本在每次更新时将$total的值输出到日志文件,这样您就可以确认您正在使用您认为的值进行更新。

相关内容

  • 没有找到相关文章

最新更新