Nginx 日志格式化
文本格式
nginx
log_format main '$remote_addr - $remote_user [$time_iso8601] '
'"$request_method $request_uri $server_protocol" '
'$status $body_bytes_sent $request_length '
'"$http_referer" "$http_user_agent" '
'rt=$request_time uct=$upstream_connect_time '
'uht=$upstream_header_time urt=$upstream_response_time '
'upstream=$upstream_addr upstream_status=$upstream_status '
'host=$host conn=$connection req=$connection_requests';- 记录上游服务器响应时间等详细指标
- 便于分析性能瓶颈
JSON 格式
nginx
log_format production_json escape=json '{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request_method":"$request_method",'
'"request_uri":"$request_uri",'
'"server_protocol":"$server_protocol",'
'"status": "$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referer":"$http_referer",'
'"http_user_agent":"$http_user_agent",'
'"http_x_forwarded_for":"$http_x_forwarded_for",'
'"upstream_addr":"$upstream_addr",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_status":"$upstream_status",'
'"host":"$host",'
'"request_length":"$request_length",'
'"bytes_sent":"$bytes_sent",'
'"connection":"$connection",'
'"connection_requests":"$connection_requests",'
'"server_name":"$server_name",'
'"request_id":"$request_id"'
'}';request_time- 请求处理总时间upstream_response_time- 后端服务响应时间body_bytes_sent- 发送给客户端的字节数remote_addr- 客户端IPhttp_x_forwarded_for- 代理链IPrequest_method+request_uri- 请求详情host- 请求的域名http_referer- 来源URLhttp_user_agent- 客户端信息
日志缓冲
nginx
access_log /var/log/nginx/access.log production_json buffer=32k flush=5s gzip=on;buffer设置日志缓冲大小flush设置缓冲刷新间隔gzip:启用内存中压缩(Nginx 1.11+)
动态字段开关
nginx
map $uri $log_upstream_times {
~*\.(jpg|png|css|js)$ 0; # 静态资源不记录后端时间
default 1;
}
server {
access_log /var/log/nginx/access.log enhanced_main;
location /static/ {
access_log /var/log/nginx/static.log enhanced_main if=$log_upstream_times;
}
}