Nginx日志中的请求处理时间分析
一 关键时间字段与含义
二 日志格式与采集建议
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct=$upstream_connect_time '
'uht=$upstream_header_time urt=$upstream_response_time '
'up=$upstream_addr';
access_log /var/log/nginx/access.log main_ext;
三 命令行快速分析
awk '$NF > 3 {print $0}' access.log | sort -kNF -nr | head -20
awk '{url=$7; gsub(/\?.*/,"",url); dur=$11; sum[url]+=dur; cnt[url]++; times[url][NR]=dur}
END {
for (u in sum) {
n=cnt[u]; asort(times[u]); p95=times[u][int(n*0.95)]; p99=times[u][int(n*0.99)];
printf "%-60s %8.3f %8.3f %8.3f %6d\n", u, sum[u]/n, p95, p99, n
}
}' access.log | sort -k2 -nr | head
awk '$12 > 5 {print $0}' access.log | sort -k12 -nr | head
awk -F: '{m=$2":"$3; c[m]++; t[m]+=$NF} END {for (x in c) printf "%s %d %.3f\n", x, c[x], t[x]/c[x]}' access.log | sort
goaccess /var/log/nginx/access.log --log-format=COMBINED
以上命令中的列号与阈值可按你的 log_format 调整。四 可视化与长期观测
match => ["message", "%{TIMESTAMP_ISO8601:locals}"] 与 date { match => ["locals", "ISO8601"] }。match => ["message", "%{HTTPDATE:logdate}"] 与 date { match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"] }。五 常见现象与定位路径