用 Nginx 日志做性能调优的实操流程
一 关键指标与日志字段设计
log_format perf '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time $upstream_addr';
access_log /var/log/nginx/access.log perf buffer=32k flush=5s;
error_log /var/log/nginx/error.log warn;
二 从日志发现性能瓶颈
awk '$NF > 5 {print $7}' access.log | sort | uniq -c | sort -nr | head
awk '{print $9}' access.log | sort | uniq -c | sort -rn
awk '{print substr($4,14,5)}' access.log | sort | uniq -c | sort -nr | head
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
三 基于日志洞察的配置优化
四 日志管道与运维实践
log_format fluentd '{"time":"$time_iso8601","remote_addr":"$remote_addr",'
'"request":"$request","status":$status,"bytes_sent":$body_bytes_sent}';
access_log syslog:server=127.0.0.1:514,tag=nginx fluentd;
/var/log/nginx/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 nginx adm
sharedscripts
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
open_log_file_cache max=10m inactive=20m use_temp_path=off;