nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx日志配置

Nginx日志格式配置的实现

作者:Live in Shanxi.

本文主要介绍了Nginx日志格式配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx日志格式配置 

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

对比总结

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

💡 最佳实践

🎯 总结

一、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" "-"

字段含义:

二、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":"-"}

字段含义:

到此这篇关于Nginx日志格式配置的实现的文章就介绍到这了,更多相关Nginx日志配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文