nginx併發連接數和響應時間抓取shell笨拙版

併發連接數和響應時間抓取想法
1.數據圖使用cacti for nginx插件進行記錄
2.nginx編譯stub_status模塊,log記錄添加[$time_local]和$request_time字段
3.併發連接數定期curl status頁面獲得
4.響應時間使用本地時間戳做條件在日誌中匹配得到(未改造nginx記錄日期格式)

本地抓取shell笨拙基礎版
1.根據時間戳抓取響應時間和併發連接數做join
2.nginxstatus current顯示當前的併發連接數,響應時間,一秒鐘內的響應時間均值和最大值nginxstatus 3.detail顯示過去24小時內的每一分鐘內的併發連接數和響應時間均值
4.nginxstatus crond每秒鐘記錄一次併發連接數
5.nginxstatus help
#!/bin/bash
####nginxstaus.sh####
QPS=`curl -s status.test.com |awk '{ if( $1~/Active/ ) print $NF}'`
DATE=`date +"%d/%b/%Y:%T"`
LAST_DATE=`date -d '-1 day' +"%d/%b/%Y:%T"`
LOG="/var/nginxlog/access.log"
LOG1=/tmp/logs
AVG_RT=`grep $DATE $LOG |awk -F "-" '{ total+=$5 }END{ if( $total!=0 ) print total/NR }'`
MAX_RT=`grep $DATE $LOG |awk -F "-" '{ print $5 }' |sort -nr |head -1`
DAYS_AVG=`sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG |awk -F "-" '{ total+=$5 } END{ if( $total!=0 ) print "avg_rt = ", total/NR }'`
QPS_AVG=`sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG1 |awk '{ total+=$2 } END{ if( $total!=0 ) print "qps_rt = ", total/NR }'`
DAYS_MAX=`sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG |awk -F "-" '{ print $5 }' | sort -nr | head -1`
QPS_MAX=`sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG1 |awk '{ print $2 }' | sort -nr | head -1`
case $1 in
current )
echo "$DATE qps:$QPS avg_rt:$AVG_RT max_rt:$MAX_RT"
;;
detail )
echo -e "time   rt  qps\n----------------"
join <( sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG |awk -F '[[ :]+' '{k=$4":"$5":"$6;a[k]+=$NF;b[k]++}END{for(i in a)if( $a[i]!=0 ) print i,a[i]/b[i]}' |sort -t : -k1n ) <( sed -n "\#'$LAST_DATE'#,\#'$DATE'#p"  $LOG1 |awk -F "/|:| " '{k=$3":"$4":"$5;a[k]+=$NF;b[k]++}END{for(i in a)if( $a[i]!=0 ) print i,a[i]/b[i]}' |sort -t : -k1n )
echo -e "\n----------------\n$DAYS_AVG $DAYS_MAX $QPS_AVG $QPS_MAX"
;;
crond )
echo "$DATE $QPS" >>$LOG1
;;
help )
echo "useage current | detail | blank | help |crond"
;;
esac

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章