Monitoring rrdtool输出错误的数字

Monitoring rrdtool输出错误的数字,monitoring,rrdtool,Monitoring,Rrdtool,以下脚本从ss-s 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:

以下脚本从
ss-s

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类型作为度量标准,但您提到的行为听起来有点像是计数器。您以前是否将其创建为计数器?尝试在RRD文件上使用
rrdtool info$db
,并验证它实际上是一个仪表。你可能会发现事实并非如此

其次,RRD文件的步长为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
的值输出到日志文件中,这样您就可以确认您正在使用您认为的值进行更新。

谢谢,这对我很有帮助。我将这些值记录到一个文件中,我注意到cron无法识别
ss
命令,因为它的路径envvar没有包含
/usr/sbin
其中
ss
所在的位置。