利用 Nginx 日志进行内容与性能优化
一 日志配置优化
log_format main '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time $http_x_forwarded_for';
access_log /var/log/nginx/access.log main buffer=32k flush=5m;
error_log /var/log/nginx/error.log warn;
说明:开启异步缓冲可显著降低磁盘 I/O 阻塞;生产环境错误日志建议设为warn/error级别。# 关闭静态资源日志
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
access_log off;
expires 30d;
}
# 仅记录 4xx/5xx
map $status $loggable {
~^[45] 1;
default 0;
}
access_log /var/log/nginx/access.log main if=$loggable;
/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 nginx nginx
sharedscripts
postrotate
systemctl reload nginx
endscript
}
以上做法可在保证可观测性的同时,降低 I/O 与存储压力,并为后续分析提供更高质量的数据。二 关键指标与分析方法
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10awk '{print $9}' access.log | sort | uniq -c | sort -rnawk '$NF > 1 {print $NF, $7}' access.log | sort -nr | headawk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -nrdate=$(date -d '-1 minute' +'%d/%b/%Y:%H:%M'); awk -v d="$date" '$4 ~ d {c++} END {print c+0}' access.loggoaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html三 从日志到优化的闭环
gzip on; gzip_types text/css application/json application/javascript;proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
四 监控告警与落地流程
status >= 500 的占比(如**>1%**持续 5 分钟触发告警)。status < 400)低于**99%**告警。