官方地址:
1)http://nginx.org/en/docs/http/ngx_http_log_module.html (大概日志文件模版)
2)https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status (日志变量)
日志模板:http_log_module
语法:
Syntax: access_log path [format [buffer=size] [gzip[=level][flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
一、介绍nginx配置文件自带的日志模块
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
对于nginx默认的加载模板进行解释:
#$remote_addr 客户端地址
#$request 完整的原始请求行(GET、POST请求方式)
#$status 回应请求状态 200、301、302、403、404、500、502、504 这些状态的大概产生的的情况需要了解
#$body_bytes_sent 发送到客户端的字节数,不包括响应头; 此变量与 Apache模块 的“ %B”参数 兼容mod_log_config
#$http_referer 当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的
#$http_user_agent httpd头部信息,客户端访问设备,记录真实的IP地址。 (使用键进入开发者工具模式,选择network网络使用进行刷新,查看获取User-Agent:的请求浏览器类型。爬虫使用,简单的爬虫)
“$http_x_forwarded_for” http请求携带的http信息
#$realip_remote_addr 保留原始客户端地址
#$realip_remote_port 保留原始客户端端口
二、测试查看
1)nginx配置日志文件
2)产生数据,生成nginx日志信息
OK。我们知道只要用用户访问网址就会产生访问的日志:
access.log ——> 正确日志(用户访问信息)
error.log ——> 错误日志(启动报错信息,访问请求错误信息)
对于上面两个文件是非常有用的,以后使用ELK日志分析处理
现在去浏览器访问测试机器的IP: 192.168.11.169
便于观察可使用查看此命令进行观察情况:命令:tailf /var/log/nginx/access.log
对比下,产生的日志文件具有定义的mian变量模板(8个数值)。
192.168.11.1 #客户端IP
- #HTTP客户端请求nginx认证用户名(无)
[09/Jul/2019:00:08:03 +0800] # nginx请求时间
"GET / HTTP/1.1" #GET请求方式
304 #返回的状态码
0 #字节
"-" #无
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" #客户端访问设备 Chrome——谷歌浏览器
"-" # 真实请求IP(防代理访问的IP)
3)根据需求自己定义好日志模板,这个根据业务需求进行修改,对于日志模块简单的入门目前就这些,
更多的变量需求查看:https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status
嵌入式变量
该ngx_http_core_module模块支持名称与Apache Server变量匹配的嵌入式变量。首先,这些是代表客户端请求标头字段的变量,例如$http_user_agent,$http_cookie等。另外还有其他变量:
$arg_name
name请求行中的 参数
$args
请求行中的参数
$binary_remote_addr
客户端地址(二进制形式),对于IPv4地址,值的长度始终为4个字节,对于IPv6地址,值的长度始终为16个字节
$body_bytes_sent
发送给客户端的字节数,不计算响应头;此变量与 Apache模块 的“ %B”参数 兼容mod_log_config
$bytes_sent
发送给客户端的字节数(1.3.8、1.2.5)
$connection
连接序列号(1.3.8、1.2.5)
$connection_requests
通过连接发出的当前请求数(1.3.8、1.2.5)
$content_length
“内容长度”请求标头字段
$content_type
“内容类型”请求标头字段
$cookie_name
该name饼干
$document_root
当前请求的根或别名指令的值
$document_uri
和...一样 $uri
$host
优先顺序如下:请求行中的主机名,或“主机”请求标头字段中的主机名,或与请求匹配的服务器名
$hostname
主机名
$http_name
任意请求头字段;变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线
$https
on如果连接以SSL模式运行,则为 “ ”,否则为空字符串
$is_args
“ ?”(如果请求行包含参数),否则为空字符串
$limit_rate
设置此变量将启用响应率限制;参见limit_rate
$msec
以毫秒为单位的当前时间(以秒为单位)(1.3.9,1.2.6)
$nginx_version
Nginx版本
$pid
工作进程的PID
$pipe
“ p”如果请求被流水线.“ ”否则(1.3.12,1.2.7)
$proxy_protocol_addr
来自PROXY协议标头(1.5.12)的客户端地址
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。
$proxy_protocol_port
PROXY协议标头(1.11.0)中的客户端端口
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。
$proxy_protocol_server_addr
PROXY协议标头中的服务器地址(1.17.6)
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。
$proxy_protocol_server_port
PROXY协议标头中的服务器端口(1.17.6)
必须通过proxy_protocol在listen指令中设置参数来预先启用PROXY协议 。
$query_string
和...一样 $args
$realpath_root
绝对路径名,对应于当前请求的 根或别名指令的值,所有符号链接都解析为真实路径
$remote_addr
客户地址
$remote_port
客户端口
$remote_user
基本身份验证随附的用户名
$request
完整的原始请求行
$request_body
请求主体
当将请求正文读取到内存缓冲区时, 该变量的值可在proxy_pass, fastcgi_pass, uwsgi_pass和 scgi_pass指令处理的位置 使用。
$request_body_file
带有请求正文的临时文件的名称
在处理结束时,需要删除文件。要始终将请求正文写入文件, 需要启用client_body_in_file_only。当在代理请求中或在对FastCGI / uwsgi / SCGI服务器的请求中传递临时文件的名称时,应分别通过 proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off或 scgi_pass_request_body off 指令来禁用传递请求正文。 。
$request_completion
“ OK”(如果请求已完成),否则为空字符串
$request_filename
基于root或alias 指令以及请求URI 的当前请求的文件路径
$request_id
从16个随机字节生成的唯一请求标识符,以十六进制(1.11.0)
$request_length
请求长度(包括请求行,标头和请求正文)(1.3.12,1.2.7)
$request_method
请求方法,通常是“ GET”或“ POST”
$request_time
请求以毫秒为单位的处理时间(以秒为单位)(1.3.9、1.2.6);从客户端读取第一个字节以来经过的时间
$request_uri
完整的原始请求URI(带有参数)
$scheme
请求方案,“ http”或“ https”
$sent_http_name
任意响应头字段;变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线
$sent_trailer_name
在响应末尾发送的任意字段(1.13.2);变量名称的最后一部分是字段名称,该字段名称已转换为小写,并用短划线代替了下划线
$server_addr
接受请求的服务器的地址
计算此变量的值通常需要一个系统调用。为避免系统调用,listen伪指令必须指定地址并使用bind参数。
$server_name
接受请求的服务器的名称
$server_port
接受请求的服务器的端口
$server_protocol
请求协议,通常是“ HTTP/1.0”,“ HTTP/1.1”或“ HTTP / 2.0 ”
$status
响应状态(1.3.2、1.2.2)
$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
有关客户端TCP连接的信息;在支持TCP_INFO套接字选项的 系统上可用
$time_iso8601
ISO 8601标准格式(1.3.12,1.2.7)的本地时间
$time_local
通用日志格式的本地时间(1.3.12,1.2.7)
$uri
请求中的当前URI,已规范化
$uri在请求处理期间,例如在进行内部重定向或使用索引文件时, 的值可能会更改。
可运用场景:ELK日志分析,接下来就进行日志模板的介绍吧。