通过Nginx日志找出慢查询可以通过以下步骤进行:
log_format
指令定义日志格式,确保包含request_time
字段,以便记录每个请求的处理时间。示例配置:
http {
log_format mylog '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "http_referer" "http_user_agent" "http_x_forwarded_for" request_time';
access_log /var/log/nginx/access.log mylog;
}
awk
命令来分析日志文件,找出响应时间较长的请求。例如,查找响应时间大于5秒的请求:awk '$6 > 5 {print $0}' /usr/local/nginx/logs/access.log
sort
和uniq
命令对结果进行排序和去重,以便更直观地查看慢查询情况:awk '$6 > 5 {print $0}' /usr/local/nginx/logs/access.log | sort | uniq -c | sort -n -r
slow.sh
脚本,可以统计访问次数最多及最耗时的页面:#!/bin/sh
export PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin;
export LANG=zh_CN.GB2312;
function usage() {
echo "Usage: $0 [options] [log_file]"
exit 1;
}
function slowlog() {
local log_file=$1
local slow_pages=30
local total_requests=0
local total_time=0
awk -v log_file="$log_file" '
{
split($7, time_arr, " ");
total_requests++;
total_time += time_arr[1];
if (time_arr[1] > 5) {
print $0;
}
}
END {
print "Total requests:", total_requests;
print "Average request time:", total_time / total_requests, "seconds";
}
' "$log_file" | sort -t: -k6,6nr | head -n $slow_pages | sed 's/:/\t/g'
}
case "$1" in
-h)
usage
;;
*)
slowlog "$@"
;;
esac
执行脚本:
chmod +x slow.sh
./slow.sh /var/log/nginx/access.log
通过上述步骤,可以有效地从Nginx日志中找出慢查询,并进行相应的性能优化。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读:如何通过nginx日志找出网站瓶颈