2014-05-24 2 views
0

다음 스크립트는 ss -sRRDtool의 출력 잘못된 번호

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 

내 cronjob에 대한 기존 TCP 연결을 모니터링합니다

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

문제는 잘못 번호를 보여주고 있다는 점이다. ss -s의 TCP 연결은 항상 150-300이지만 출력 그림에는 0과 3 사이의 값이 표시되며 때로는 높을 수도 있지만 일반적으로 잘못되었습니다.

답변

1

먼저 코드에서 DS 유형을 GAUGE로 정의했음을 유의하십시오.하지만 언급 한 동작은 COUNTER처럼 들립니다. 이전에 카운터로 만들었습니까? RRD 파일에 rrdtool info $db을 사용하여 실제 게이지인지 확인하십시오. 그렇지 않다는 것을 알 수 있습니다.

두 번째로, RRD 파일의 단계는 5 초이며 DS에는 10 분 하트 비트가 있습니다. 매 5 분마다 업데이트 중입니다. 5 분 (300 초) 걸음을 내딛으셨습니까? 그렇지 않으면 행이 채워질 때 흥미로운 효과를 얻을 수 있습니다 ... 단계는 대개 예상 업데이트 빈도와 일치해야합니다.

세 번째로 정확히 단계 경계에 있지 않고 타임 스탬프 N으로 업데이트하는 동안 문제가 발생할 수 있습니다. 이 데이터 정상화의 원인이됩니다,하지만 충분하지 3. 수정에

$time = `date +%s` 
$offset = `expr $time % $step` 
$t = `expr $time - $offset` 
$rrdtool update $db -t conns $t:$total 

마지막으로

같이 사용하여이 뭔가 (300)을 변경하는 - 당신이 업데이트 올바른 값을 사용하고 있는지 확인됩니다? 업데이트 할 때마다 스크립트 출력에 $total의 값을 로그 파일로 출력하여 사용자가 생각하는 값으로 업데이트하고 있음을 확인할 수 있습니다.

+0

감사합니다. 덕분에 도움이되었습니다. 값을 파일에 기록했는데'ss' 명령이 cron에 의해 인식되지 않았다는 것을 알아 냈습니다. envvar는'ss'가있는'/ usr/sbin'을 포함하지 않았습니다. – SuperUser