Skip to content

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 - 客户端IP
  • http_x_forwarded_for - 代理链IP
  • request_method + request_uri - 请求详情
  • host - 请求的域名
  • http_referer - 来源URL
  • http_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;
    }
}