nginx log format
nginx 日志详解
Nginx日志格式和目录通常在配置文件/etc/nginx/nginx.conf中。
Nginx日志格式
access日志
配置文件中定义了Nginx日志的打印格式,即main格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$request_time $request_length '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
默认格式如下
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
json格式日志
log_format json_format '{"@timestamp":"$time_iso8601",'
'"client_ip":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request_method":"$request_method",'
'"protocol":"$scheme",'
'"uri":"$uri",'
'"status":"$status",'
'"upstream_status":"$upstream_status",'
'"size":"$body_bytes_sent",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_addr":"$upstream_addr",'
'"nginx_node":"$hostname",'
'"http_user_agent":"$http_user_agent",'
'"connection":"$connection",'
'"request_time":"$request_time"}';
声明使用了main这种日志格式和写入的文件名。
access_log /var/logs/nginx/access.log main
声明使用了json这种日志格式和写入的文件名。
access_log /path/to/access.log json;
错误日志
错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。
通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。因此,将日志好好利用,你可以得到很多有价值的信息。错误日志由指令error_log来指定,具体格式如下:
error_log path(存放路径) level(日志等级)
path含义同access_log,level表示日志等级,具体如下:
[ debug | info | notice | warn | error | crit ]
从左至右,日志详细程度逐级递减,即debug最详细,crit最少。
举例说明如下:
error_log logs/error.log info;
需要注意的是:error_log off并不能关闭错误日志,而是会将错误日志记录到一个文件名为off的文件中。
正确的关闭错误日志记录功能的方法如下:
error_log /dev/null;
上面表示将存储日志的路径设置为“/dev/null”。
日志样例
Nginx日志样例如下:
192.168.1.2 - - [10/Jul/2023:15:51:09 +0800] "GET /ubuntu.iso HTTP/1.0" 0.000 129 404 168 "-" "Wget/1.11.4 Red Hat modified"
默认日志
172.20.0.139 - - [27/Aug/2023:03:00:24 +0000] "POST /api/goodsReturn/pushUpdateGoods HTTP/1.1" 200 17 "-" "okhttp/3.11.0"
字段说明
字段名称 | 含义 |
---|---|
remote_addr | 表示客户端IP地址。 |
remote_user | 表示客户端用户名称。 |
request | 表示请求的URL和HTTP协议。 |
status | 表示请求状态。 |
body_bytes_sent | 表示发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块modlogconfig里的bytes_sent发送给客户端的总字节数相同。 |
bytes_sent | 发送给客户端的总字节数 |
connection | 表示连接的序列号。 |
connection_requests | 表示当前通过一个连接获得的请求数量。 |
msec | 表示日志写入的时间。单位为秒,精度是毫秒。 |
pipe | 表示请求是否通过HTTP流水线(pipelined)发送。通过HTTP流水线发送则pipe值为p ,否则为. 。 |
http_host | 请求的url地址(目标url地址)的host |
host | 等同于$http_host |
http_referer | 表示从哪个页面链接访问过来的。 |
http_user_agent | 表示客户端浏览器相关信息,前后必须加上双引号。 |
request_length | 表示请求的长度。包括请求行,请求头和请求正文。 |
request_time | 表示请求处理时间,单位为秒,精度为毫秒。从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。 |
[$time_local] | 表示通用日志格式下的本地时间,前后必须加上中括号。 |
upstream_addr | 集群轮询地址 |
upstream_response_time | 指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间 |
upstream_connect_time | 与服务器连接所花费的时间 |
upstream_status | upstream状态 |
uri | 请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。 |
document_uri | 等同于$uri |
request_uri | 比$uri多了参数,即$uri+$args |
http_x_forwarded_for | 如果使用了代理,这个参数会记录代理服务器的ip和客户端的ip |
schema | 协议 |
server_name | 虚拟主机名称 |
server_port | 服务器端口 |
server_protocol | 服务器协议 |
ssl_cipher | 交换数据中的算法 |
ssl_protocol | SSL协议版本 |