Nginx日志格式配置

Nginx日志格式配置

Nginx日志一般有main格式(默认)和json格式两种

对比总结

特性默认文本格式JSON 格式
性能高性能,占用资源低解析耗时,CPU 占用相对较高
磁盘占用日志简短,占用小每个字段都带有名称,占用较大
日志分析需要手动解析,较为复杂结构化数据,分析工具集成方便
可读性人眼查看方便不直观,主要靠日志系统查看
扩展性不方便添加新字段灵活添加新字段
集成性兼容传统日志工具适合与 ELK、EFK 进行日志对接

💡 最佳实践

  1. 性能优先: 如果服务器性能不足,优先使用文本格式
  2. 日志分析优先: 如果要进行集中化日志分析(如 ELK),优先使用JSON 格式
  3. 日志分级: 错误日志使用文本格式,访问日志使用 JSON 格式,这样既能高效记录错误,又能对业务数据进行分析。
  4. 日志切割与归档: 及时进行日志切割和清理,避免磁盘爆满。

🎯 总结

  • 默认文本格式: 高性能,低资源消耗,适合轻量级或性能要求高的生产环境。
  • JSON 格式: 结构化日志,便于分析和监控,适合现代化运维和日志管理需求。

一、main 日志变量

1. 请求相关变量

变量名含义示例值
$remote_addr客户端的 IP 地址192.168.1.1
$remote_user客户端的认证用户名admin
$request请求的完整字符串(方法 + URI + 协议)GET /index.html HTTP/1.1
$request_method请求的方法GET, POST
$request_uri原始的请求 URI(包括参数)/index.html?user=123
$uri请求的 URI,不包括查询参数/index.html
$args请求的查询参数字符串user=123&name=abc
$query_string$args 等效,查询字符串user=123&name=abc
$status响应的 HTTP 状态码200, 404
$body_bytes_sent响应体大小(字节数)2048
$http_referer引荐页面 URLhttp://example.com/
$http_user_agent客户端的浏览器信息Mozilla/5.0 (Windows NT)

2. 时间相关变量

变量名含义示例值
$time_local本地时间戳19/Mar/2025:04:03:51 +0800
$time_iso8601ISO 8601 格式的时间戳2025-03-19T04:03:51+08:00
$msec精确到毫秒的 Unix 时间戳1614768000.123

3. 客户端相关变量

变量名含义示例值
$remote_addr客户端的 IP 地址192.168.1.1
$remote_port客户端的端口号52345
$http_x_forwarded_for客户端的原始 IP 地址,通常用于代理链路中192.168.1.1
$http_user_agent客户端的 User-Agent 信息Mozilla/5.0 (Windows NT)
$http_referer请求的来源 URL(如果有的话)http://example.com/

4. 上游服务器相关变量

变量名含义示例值
$upstream_addr上游服务器的地址(包括端口)127.0.0.1:8080
$upstream_status上游服务器响应的状态码200, 502
$upstream_response_time上游服务器的响应时间(秒)0.125
$upstream_connect_time与上游服务器建立连接的时间0.050

5. 请求处理相关变量

变量名含义示例值
$request_time处理请求所花费的总时间(秒)0.123
$response_time响应返回的总时间(秒)0.098
$upstream_response_time从上游服务器接收到响应的时间(秒)0.125
$pipe是否通过管道连接处理请求,p 表示是,. 表示不是p

6. Nginx 内部变量

变量名含义示例值
$hostnameNginx 主机名nginx-server
$server_name当前处理请求的服务器名称www.example.com
$server_addr当前处理请求的服务器 IP 地址192.168.1.1
$nginx_version当前 Nginx 的版本号1.21.3
示例配置:Nginx 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main
#输出结果

192.168.200.1 - - [19/Mar/2025:03:26:35 -0400] "GET /prod-api/captchaImage HTTP/1.1" 200 4137 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"
192.168.200.1 - - [19/Mar/2025:03:26:40 -0400] "POST /prod-api/login HTTP/1.1" 200 239 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"
字段含义:
  1. time
    • 日志时间戳,采用 ISO 8601 格式。
      • "2025-03-19T04:51:55-04:00":表示 2025 年 3 月 19 日,04:51:55(-04:00 时区)。
  2. request_time
    • 请求总耗时,单位是秒。
      • "0.000":表示从接收到请求到返回响应的时间为 0 秒,响应极快。
  3. upstream_response_time
    • 上游服务器(如 Tomcat)响应时间,单位是秒。
      • "-":表示当前请求没有经过上游服务器(如静态资源请求)。
  4. remote_addr
    • 客户端 IP 地址。
      • "192.168.200.1":请求是从该 IP 地址发出的。
  5. remote_user
    • 远程用户的身份认证信息。
      • "-":表示未进行身份认证(或不涉及认证)。
  6. request
    • 请求行,包含请求方法、资源路径和协议版本。
      • "GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1":表示发起了 GET 请求,访问了指定的静态资源文件。
  7. status
    • 响应状态码,表示请求处理结果。
      • "200":请求成功。
  8. body_bytes_sent
    • 发送给客户端的响应体字节数。
      • "10029":表示响应体大小为 10029 字节。
  9. http_referer
    • 请求来源的 URL,表示请求是从哪个页面发起的。
      • "http://192.168.200.14/monitor/druid":表示从监控页面发起的请求。
  10. http_user_agent
    • 客户端的用户代理信息,通常包含浏览器和操作系统信息。
      • "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
  11. http_x_forwarded_for
    • 用于记录客户端真实 IP 地址,通常用于反向代理或负载均衡场景。
      • "-":表示没有经过代理或没有携带该头信息。

二、Json常用变量

1.请求相关变量

变量名含义示例值
$request请求的完整字符串(方法+URI+协议)GET /index.html HTTP/1.1
$request_method请求方法GET, POST, PUT, DELETE
$request_uri原始请求的 URI(包含参数)/index.html?user=123
$uri请求的 URI(不含参数)/index.html
$args请求的参数字符串user=123&name=abc
$query_string$args 等效user=123&name=abc
$status响应状态码200, 404, 500
$protocol请求协议HTTP/1.1, HTTP/2.0
$host请求主机名www.example.com
$server_name服务器名称example.com
$server_port服务器端口80, 443

2.时间和日期相关变量

变量名含义示例值
$time_iso8601ISO 8601 格式的时间戳2025-03-19T04:03:51+08:00
$time_local本地时间戳19/Mar/2025:04:03:51 +0800
$msec精确到毫秒的时间戳(Unix 时间戳)1614768000.123

3.客户端和用户相关变量

变量名含义示例值
$remote_addr客户端 IP 地址192.168.1.1
$remote_port客户端端口52345
$remote_user已经认证的用户名admin
$http_user_agent用户代理字符串Mozilla/5.0 (Windows NT 10.0...)
$http_referer引荐页面http://example.com/page.html
$http_x_forwarded_for代理服务器转发的原始客户端 IP 地址192.168.1.1, 172.16.0.1

4.上游和代理相关变量

变量名含义示例值
$upstream_addr上游服务器地址(IP:端口)127.0.0.1:8080
$upstream_status上游服务器返回的状态码200, 502
$upstream_response_time上游服务器响应时间(秒)0.125
$upstream_connect_time连接上游服务器所花费的时间(秒)0.050
$upstream_header_time上游服务器响应头时间(秒)0.075

5.请求处理和性能相关变量

变量名含义示例值
$request_time请求从接收到响应完成的总时间(秒)0.245
$body_bytes_sent发送给客户端的响应字节数(不含响应头)1024
$bytes_sent发送的总字节数(包含响应头)2048
$connection连接的序列号12345
$connection_requests当前连接上处理的请求数5

6.系统和环境变量

变量名含义示例值
$pid处理请求的工作进程 ID1234
$pipe表示请求是否通过管道传输p(管道),.(直接连接)
示例:JSON 日志格式配置
log_format json '{"time":"$time_iso8601",'
                '"request_time":$request_time,'
                '"upstream_response_time":"$upstream_response_time",'
                '"remote_addr":"$remote_addr",'
                '"remote_user":"$remote_user",'
                '"request":"$request",'
                '"status":$status,'
                '"body_bytes_sent":$body_bytes_sent,'
                '"http_referer":"$http_referer",'
                '"http_user_agent":"$http_user_agent",'
                '"http_x_forwarded_for":"$http_x_forwarded_for"}';

access_log /var/log/nginx/access.log json;
#输出结果

{"time":"2025-03-19T04:51:55-04:00","request_time":0.000,"upstream_response_time":"-","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1","status":200,"body_bytes_sent":10029,"http_referer":"http://192.168.200.14/monitor/druid","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}
{"time":"2025-03-19T04:51:56-04:00","request_time":0.010,"upstream_response_time":"0.009","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /prod-api/monitor/server HTTP/1.1","status":200,"body_bytes_sent":93,"http_referer":"http://192.168.200.14/monitor/server","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}
字段含义:
  1. time

    • 日志时间戳,采用 ISO 8601 格式。
    • "2025-03-19T04:51:55-04:00":表示 2025 年 3 月 19 日,04:51:55(-04:00 时区)。
  2. request_time

    • 请求总耗时,单位是秒。
    • "0.000":表示从接收到请求到返回响应的时间为 0 秒,响应极快。
  3. upstream_response_time

    • 上游服务器(如 Tomcat)响应时间,单位是秒。
    • "-":表示当前请求没有经过上游服务器(如静态资源请求)。
  4. remote_addr

    • 客户端 IP 地址。
    • "192.168.200.1":请求是从该 IP 地址发出的。
  5. remote_user

    • 远程用户的身份认证信息。
    • "-":表示未进行身份认证(或不涉及认证)。
  6. request

    • 请求行,包含请求方法、资源路径和协议版本。

    • "GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1"
      
      • GET:HTTP 请求方法。
      • /static/js/chunk-2d0bce05.7b94b559.js:请求的资源路径。
      • HTTP/1.1:协议版本。
  7. status

    • HTTP 响应状态码。
    • 200:表示请求成功。
  8. body_bytes_sent

    • 响应体的字节数。
    • 10029:表示响应大小为 10029 字节(约 9.8 KB)。
  9. http_referer

    • 引荐页面,即从哪个页面发起的请求。
    • "http://192.168.200.14/monitor/druid":用户是从这个页面发起的请求。
  10. http_user_agent

    • 客户端的浏览器和操作系统信息。
    • 浏览器:Chrome 134.0.0.0
    • 操作系统:Windows 10 x64
  11. http_x_forwarded_for

    • 用于识别通过代理服务器访问的客户端的真实 IP。
    • "-":表示没有经过代理,或没有传递该头信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值