提升可读性的总体思路

一 优化日志格式与字段
http {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 u_rt=$upstream_response_time u_addr=$upstream_addr';access_log /var/log/nginx/access.log main_ext buffer=32k flush=5m;error_log/var/log/nginx/error.log warn;}log_format json escape=json'{ "@timestamp":"$time_iso8601","client":"$remote_addr","method":"$request_method",''"uri":"$uri","status":$status,"size":$body_bytes_sent,''"referer":"$http_referer","ua":"$http_user_agent",''"rt":$request_time,"u_rt":$upstream_response_time,"u_addr":"$upstream_addr" }';sudo nginx -t && sudo systemctl reload nginx说明:
二 减少噪音与按条件记录
location ~* .(jpg|jpeg|png|gif|css|js|ico|svg)$ {access_log off;}# 按状态码过滤map $status $loggable {~^[23]0;default 1;}# 按耗时过滤(单位:秒)map $request_time $slow {default 0;~^[0-9.]*$ $1;}map $slow $really_slow {default 0;>1 1;}access_log /var/log/nginx/access.log main_ext if=$loggable;access_log /var/log/nginx/slow.log main_ext if=$really_slow;说明:access_log的if条件与map结合,可灵活控制记录粒度,显著提升关键日志可读性。
三 提升检索与可视化效率
awk '{print $1}' access.log | sort | uniq -c | sort -nr | headawk '{print $9}' access.log | sort | uniq -c | sort -nrawk '{print $NF,$7}' access.log | sort -nr | headtail -f access.log | grep -E ' 50[0-9]| 404'goaccess /var/log/nginx/access.log --log-format=COMBINED四 日志轮转与权限安全
/var/log/nginx/*.log {dailyrotate 30compressdelaycompressmissingoknotifemptycreate 0640 www-data admsharedscriptspostrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 $(cat /var/run/nginx.pid)fiendscript}