Задать в формат лог файла переменную $upstream_response_time. У меня так в /etc/nginx/nginx.conf:
http {
##
# Basic Settings
##
log_format main '$remote_addr:$remote_port - $remote_user [$time_local] $host "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" $request_time-$upstream_response_time';
....
}
Тогда в логах есть в конце строки есть две цифры:
- время отдачи данных клиенту
- время генерации ответа PHP
Первая цифра позволяет выявлять "медленных" клиентов (когда первая цифра большая, а втора маленька). Вторая показывает как долго движок генерит страницы. Позволяет выявлять проблемы на бэкэнде. А вот такая команда позволяет посчитать медиану времени генерации страницы:
cat nginx_access.log | awk -F\" '{print $9}' | grep -v ".--$" | awk -F\- '{print $2}' | sort -n | awk '{all[NR]=$1;} END {print all[int(NR*0.5)]}'
1.391
Общее количество запросов на бэкэнд у меня сегодня:
cat nginx_access.log | awk -F\" '{print $9}' | grep -v ".--$" | wc -l
74557
Что в сумме мне говорит, что сегодня 50% (медиана) запросов на бэкэнд, т.е. 37288 штук, отработало менее чем за 1.391 секунд. Хотя лично я предпочитаю мониторить 85%-ый перцентиль:
cat nginx_access.log | awk -F\" '{print $9}' | grep -v ".--$" | awk -F\- '{print $2}' | sort -n | awk '{all[NR]=$1;} END {print all[int(NR*0.85)]}'
1.869