如何计算所服务的http请求的质量
how to calculate quality of http request served
我有一个 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 }' | awk -F" " '{ print }' | grep "^5[0-9][0-9]$" | wc -l)
average_response_time=$( cat /tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print }' | awk '{sum+=; ++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]=; 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 }' | awk -F"[" '{ print }' | awk -F"/" '{ print "-""-"}' | awk -F":" '{ print " "":"":"}' | head -1 )
tail_time=$( tail /tmp/log/tps_access/access$today_date.log | awk -F" " '{ print }' | awk -F"[" '{ print }' | awk -F"/" '{ print "-""-"}' | awk -F":" '{ print " "":"":"}' | 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 }' | awk '{sum+=; ++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
}
函数正确
计算(){
回声"starting calculation of the data in the files:"
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" " '{ 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 '{sum+=$1; ++n} END { rounded = sprintf("%.2f", sum/n ); 打印四舍五入 }')
百分位数=$( cut /tmp/log/tps_access/access$today_date.log -d '"' -f9 |sort -n| awk 'BEGIN{c=0} {total[c]=; 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=$(日期-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=$( 回声 "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=$( 回声 "scale=1; ($quality_per_sec * 100)/$total_request" | bc )
值=$( echo $percentage_500E'>'$threshold | bc -l )
如果 [ $值 -eq 1 ]
然后
回声 "PERCENTAGE of 500 error request increases so sending mail to the team:"
send_mail 错误
别的
回声 "Writing all the stats in a file and wait for the next run:"
send_mail全部
出口
菲
我
}
我认为这是我使用的遗留代码,为了标准起见,我首先使用 fluentd 将日志发送到 logmatic,而在 logmatic 中,计算百分位数和所有内容都非常容易。
我有一个 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 }' | awk -F" " '{ print }' | grep "^5[0-9][0-9]$" | wc -l)
average_response_time=$( cat /tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print }' | awk '{sum+=; ++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]=; 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 }' | awk -F"[" '{ print }' | awk -F"/" '{ print "-""-"}' | awk -F":" '{ print " "":"":"}' | head -1 )
tail_time=$( tail /tmp/log/tps_access/access$today_date.log | awk -F" " '{ print }' | awk -F"[" '{ print }' | awk -F"/" '{ print "-""-"}' | awk -F":" '{ print " "":"":"}' | 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 }' | awk '{sum+=; ++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
}
函数正确
计算(){
回声"starting calculation of the data in the files:"
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" " '{ 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 '{sum+=$1; ++n} END { rounded = sprintf("%.2f", sum/n ); 打印四舍五入 }') 百分位数=$( cut /tmp/log/tps_access/access$today_date.log -d '"' -f9 |sort -n| awk 'BEGIN{c=0} {total[c]=; 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=$(日期-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=$( 回声 "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=$( 回声 "scale=1; ($quality_per_sec * 100)/$total_request" | bc ) 值=$( echo $percentage_500E'>'$threshold | bc -l ) 如果 [ $值 -eq 1 ] 然后 回声 "PERCENTAGE of 500 error request increases so sending mail to the team:" send_mail 错误 别的 回声 "Writing all the stats in a file and wait for the next run:" send_mail全部 出口 菲
我 }
我认为这是我使用的遗留代码,为了标准起见,我首先使用 fluentd 将日志发送到 logmatic,而在 logmatic 中,计算百分位数和所有内容都非常容易。