Nginx日志类型
包括:error.log access_log
error.log 主要是处理http请求错误和nginx本身服务错误状态,按照不同的错误级别记录;
access_log 主要是记录处理每次http请求访问的状态;
日志主要实现方式是使用 log_format;
nginx记录的每次信息都可以当做一个变量,log_format就是将这些变量组合起来,记录到日志中去;
log_format的配置;
Syntax: log_format name [escape=default|json] string …;
Default: log_format combined "...";
Context: http (约束log_format的配置位置)
日志格式默认的是combined
默认的日志格式
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;
修改日志格式
默认是没有请求时间的,我们来自定义下。
log_format laker '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$upstream_addr '
'$upstream_response_time $request_time';
access_log /var/log/nginx/laker.log laker;
223.90.75.250 - - [08/Dec/2021:17:49:42 +0800] “GET /monitoring?width=200&height=50&graph=activeConnections HTTP/1.1” 200 4544 “http://laker.com/monitoring” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36” “-” 127.0.0.1:8889 0.044 0.044
其中0.044为44毫秒
Nginx内置变量
官网查看:https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status
参数变量 | 说明 | 示例 |
---|---|---|
$remote_addr | 客户端地址 | 41.124.22.10 |
$remote_user | 已经经过Auth Basic Module验证的用户名 | - |
$time_local | 访问时间和时区 | 13/Jun/2018:13:50:48 +0800 |
$time_iso8601 | 访问时间和时区 | 2018-06-13T13:50:26+08:00 |
$request | 请求的URI和HTTP协议 | “GET /laker.html HTTP/1.1” |
$http_host | 请求地址,即浏览器中你输入的地址(IP或域名) | www.laker.com/192.168.100.100 |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$body_bytes_sent | 发送到客户端的字节数,不包括响应头 | 1547 |
$bytes_sent | 发送到客户端的字节数 | |
$http_referer | url跳转来源 | https://www.laker.com |
$http_user_agent | 用户终端浏览器等信息 | “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 192.168.100.101:8001 |
$request_time | 整个请求的总时间,以秒为单位,精确到毫秒 | 0.205 205毫秒 |
$upstream_response_time | 请求过程中,upstream响应时间,以秒为单位,精确到毫秒 | 0.002 2毫秒 |
$content_type | 请求头域 | |
$limit_rate | 可启用响应速率限制 | |
$query_string | 请求行中的参数等同$args | |
$http_cookie | 客户端cookie信息 | |
$request_method | 客户端请求的动作 | 通常为GET或POST |
$request_uri | 包含请求参数的原始URI,不包含主机名 | /foo/bar.php?arg=baz |
$uri | 不带请求参数的当前URI,$uri不包含主机名 | /foo/bar.html |
$request | 完整的原始请求行 | |
$request_body | 请求体 |
按天按月日志切割
server {
...
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
// 按天切割日志
access_log /var/log/nginx/time_$year-$month-$day.log laker;
// 按月切割日志
access_log /var/log/nginx/time_$year-$month.log laker;
...
}
注意层次关系,这段脚本一定要加到server配置内部,且
if
要在access_log前面,否则set
的变量将无法引用更多方式参见:https://blog.csdn.net/zzhongcy/article/details/86303204