Как рассчитать качество http-запроса

У меня есть сценарий оболочки, который рассчитывает 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 ответа

Решение

Я думаю, что это унаследованный код, который я использовал. Чтобы быть стандартным, я сначала использовал fluentd, чтобы отправлять логи в logmatic, а в Logmatic было очень легко вычислить процентиль и все остальное.

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

Правильная функция

расчет () {

echo "запуск расчета данных в файлах:"

если [ -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=$(кошка tmp/log/tps_access/access$today_date.log | awk -F"\"" '{ print $3}' | awk -F" "{ print $1}' | grep "^5[0-9][0-9]$" | wc -l) процент_500E=$( printf "%.2f" $(масштаб эха) =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 {округленный = sprintf("%.2f", сумма /n); вывести округленное}') процентиль = $ (вырезать /tmp/log/tps_access/access$today_date.log -d '"' -f9 | сортировать -n| awk 'BEGIN{c=0} {всего [c]=$1; C++;} END{округлено = sprintf ("%. 2f", всего [int((NR*0,95)-1)]); печать округлено} ') 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 * $ секунда" | bc) quality_per_sec=$( awk -F"\"" -v val=$second '$NF ' $ threshold | bc -l) если [ $value -eq 1 ], то echo "PERCENTAGE 500 запросов об ошибках увеличивается, поэтому отправка почты команде:" send_mail error else echo "Запись всю статистику в файле и дождитесь следующего запуска:" send_mail all exit fi

фантастика

Другие вопросы по тегам