如何计算服务的http请求的质量

时间:2015-01-31 08:51:50

标签: linux apache shell httprequest

我有一个shell脚本,以百分比形式计算tps,平均响应时间和响应时间质量。但我认为质量响应公式不正确,请建议如何以95%的百分位数计算响应时间的质量。

calculation () {
echo "starting calculation of the data in the files:" 
if [ -f "/tmp/log/tps_access/access$today_date.log" ]
then
    total_request=$( cat /tmp/log/tps_access/access$today_date.log | wc -l )
    total_500E_request=$( cat /tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print $3}' | awk -F" " '{ print $1}' | grep "^5[0-9][0-9]$" | wc -l)
    average_response_time=$( cat /tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print $9}' | awk '{sum+=$1; ++n} END { rounded = sprintf("%.2f", sum/n ); print rounded }')
    percentile=$( cut /tmp/log/tps_access/access$today_date.log -d '"' -f9 |sort -n| awk 'BEGIN{c=0} {total[c]=$1; c++;} END{ rounded = sprintf("%.2f", total[int((NR*0.95)-1)] ); print rounded } ' )
    head_time=$( head /tmp/log/tps_access/access$today_date.log | awk -F" " '{ print $4 }' | awk -F"[" '{ print $2 }' | awk -F"/" '{ print $1"-"$2"-"$3}' | awk -F":" '{ print $1" "$2":"$3":"$4}' | head -1 )
    tail_time=$( tail /tmp/log/tps_access/access$today_date.log | awk -F" " '{ print $4 }' | awk -F"[" '{ print $2 }' | awk -F"/" '{ print $1"-"$2"-"$3}' | awk -F":" '{ print $1" "$2":"$3":"$4}' | tail -1 )
    sec_old=$(date -d "$head_time" +%s)
    sec_new=$(date -d "$tail_time" +%s)
    DIFF=$(( (sec_new - sec_old) ))
    tps=$(echo "scale=2; $total_request/$DIFF * 1" | bc )
    request_servered_in_defined_sec=$( echo "scale=2; $total_request/$DIFF * $second" | bc )
    sum=$(cat /tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print $9}' | awk '{sum+=$1; ++n} END { print sum }')
    quality_per_sec=$( echo "scale=5; $sum/$total_request * $second" | bc )
    quality_score=$( echo "scale=5; $quality_per_sec/$sum * 100" | bc )
    if [ $total_500E_request -gt $threshold   ]
    then
            echo "Count of 500 error request increases so sending mail to the team:" 
            send_mail error
    else
            echo "Writing all the stats in a file and wait for the next run:" 
            send_mail all
            exit
    fi

fi
}

2 个答案:

答案 0 :(得分:0)

我认为这是我使用的遗留代码,只是为了标准我首先使用流利的日志将日志发送到逻辑和逻辑,因此很容易计算百分位数和所有内容。

https://app.logmatic.io/ http://www.fluentd.org/

答案 1 :(得分:-1)

正确的功能

计算(){

echo"开始计算文件中的数据:"

if [-f" /tmp/log/tps_access/access$today_date.log" ] 然后         total_request = $(cat /tmp/log/tps_access/access$today_date.log | wc -l)         total_500E_request = $(cat tmp / log / tps_access / access $ today_date.log | awk -F" \""' {print $ 3}' | awk -F&#34 ;"' {print $ 1}' | grep" ^ 5 [0-9] [0-9] $" | wc -l)         percentage_500E = $(printf"%。2f" $(echo" scale = 5; $ total_500E_request / $ total_request * 100" | bc))         average_response_time = $(cat /tmp/log/tps_access/access$today_date.log | awk -F" \""' {print $ 9}' | awk&#39 ; {sum + = $ 1; ++ n} END {rounded = sprintf("%。2f",sum / n); print rounded}')         百分位数= $(cut /tmp/log/tps_access/access$today_date.log -d'"' -f9 | sort -n | awk' BEGIN {c = 0} { total [c] = $ 1; c ++;} END {rounded = sprintf("%。2f",total [int((NR * 0.95)-1)]); print rounded}')         head_time = $(head /tmp/log/tps_access/access$today_date.log | awk -F""' {print $ 4}' | awk -F" [&# 34;' {print $ 2}' | awk -F" /"' {print $ 1" - " $ 2" - &# 34; $ 3}' | awk -F":"' {print $ 1"" $ 2":" $ 3" :" $ 4}' | head -1)         tail_time = $(尾部/tmp/log/tps_access/access$today_date.log | awk -F""' {print $ 4}' | awk -F" [&# 34;' {print $ 2}' | awk -F" /"' {print $ 1" - " $ 2" - &# 34; $ 3}' | awk -F":"' {print $ 1"" $ 2":" $ 3" :" $ 4}' |尾巴-1)         sec_old = $(日期-d" $ head_time" +%s)         sec_new = $(日期-d" $ tail_time" +%s)         DIFF = $(((sec_new - sec_old)))         tps = $(echo" scale = 2; $ total_request / $ DIFF * 1" | bc)         request_servered_in_defined_sec = $(echo" scale = 2; $ total_request / $ DIFF * $ second" | bc)         quality_per_sec = $(awk -F" \"" -v val = $ second' $ NF< val' /tmp/log/tps_access/access$today_date.log | wc -l)         quality_score = $(echo" scale = 1;($ quality_per_sec * 100)/ $ total_request" | bc)         value = $(echo $ percentage_500E'>' $ threshold | bc -l)         如果[$ value -eq 1]         然后                 echo" PERCENTAGE的500错误请求增加,因此向团队发送邮件:"                 send_mail错误         其他                 echo"将所有统计信息写入文件并等待下一次运行:"                 send_mail全部                 出口         网络

网络连接 }