nginx日志可用变量梳理
近期需要统计一下公司相关域名下的某些文件的下载速度,初步计划打算联系专业页面监测厂家,购买页面监测服务,对相关页面下载速度进行监控,这个需要花费成本,部署周期也比较长。后来扒拉一下nginx日志方面的全局变量,发现nginx本身就能做到对域名下的文件下载响应时间、页面大小、后端响应时间等进行记录,我们只要把相关变量配置到日志打印内容即可。
1.nginx日志配置实例:
"log_format time '$time_local ,,$remote_addr,, $status ,,$body_bytes_sent,, $bytes_sent,, $request_length,, $request_time,, $upstream_addr ,,$upstream_response_time ,,$remote
_user ,, $request,, $http_accept_language ,,$http_user_agent ,, $http_host ,,$http_referer ,,$connection ,,$connection_requests,, $time_iso8601,, $msec,, $pipe,, $uri,, $request_filename,,
$scheme';"
2.打印日志实例内容展示:
"
20/Mar/2014:17:36:21 ,, +0900 ,, 118.000.72.00 ,, 304 ,, 0 ,, 204 ,, 609 ,,0.000 ,,192.168.18.72:9080 ,,0.000 ,,- ,, GET /ja/xxx.js HTTP/1.1,, zh-CN,zh;q=0.8,en;q=0.6 ,,Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36 ,, tzjs.ptmind.com ,,- ,,8614960 ,,1,, 2014-03-20T17:36:21+09:00,, 1395304581.680 ,, . ,, /ja/xxx.js ,,/usr/local//nginx/html/ja/xxx.js ,,http"
3.nginx日志可用变量内容详解
日志变量 解释 实例日志内容
$time_local 通用日志格式下的本地时间;(服务器时间)==>20/Mar/2014:17:36:21 +0900
$remote_addr 客户端(用户)IP地址。==>118.000.72.00
$status 请求状态(状态码,200表示成功,404表示页面不存在,301表示永久重定向等;==>304
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容;==>0
$bytes_sent 发送给客户端的总字节数;==> 204
$request_length 请求的长度(包括请求行,请求头和请求正文);==>609
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止;==>0.001
$upstream_addr 集群轮询地址;==> 192.168.18.72:9080
$upstream_response_time 是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间;==>0.001
$remote_user 用来记录客户端用户名称;==> 空值 -
$request 请求方式(GET或者POST等);==>GET /ja/xxx.js HTTP/1.1
$http_accept_language 用户浏览器语言;==>zh-CN,zh;q=0.8,en;q=0.6
$http_user_agent用户浏览器其他信息,浏览器版本、浏览器类型等;==>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36
$http_host 请求的url地址(目标url地址)的host;==>tzjs.ptmind.com
$http_referer 来源页面,即从哪个页面转到本页,专业名称叫做“referer”;==>直接访问值为空
$connection 接的序列号;==>8614960
$connection_requests 当前通过一个连接获得的请求数量;==>1
$time_iso8601ISO8601 标准格式下的本地时间;==>2014-03-20T17:36:21+09:00
$msec 日志写入时间。单位为秒,精度是毫秒;==>1395304581.680
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”;==>.
$uri 请求中的当前URI(不带请求参数,参数位于$args),不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改。不包括协议和主机名,例如/foo/bar.html==> /ja/xxx.js
$request_filename 当前连接请求的文件路径,由root或alias指令与URI请求生成。==>/usr/local//nginx/html/ja/xxx.js
$server_protocol |$scheme 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。==>http
$geoip_country_code 用户地理位置代码(国家代码)安装国家地理代码库可用;
通过上面的参数介绍可以看出nginx可以输出的内容还是比较丰富,具体怎么使用?用在哪里?仁者见仁智者见智!