analyse nginx logs, display data graphically.
log_format ids6 '$http_host $remote_addr [$time_local] $msec "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time';
line = 'cas.wisedu.com 172.16.4.91 [26/Jul/2017:10:15:09 +0800] 1501035309.217 "GET /authserver/login?service=http%3A%2F%2Fhrn.wisedu.com%2Fhr HTTP/1.1" 200 6864 "-" "Jakarta Commons-HttpClient/3.1" 0.003 0.003'
日志字段说明:
$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 官网描述:request processing time in seconds with a milliseconds resolution; time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client 。
指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。
$upstream_response_time: 指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。
从上面的描述可以看出,$request_time肯定比$upstream_response_time值大,特别是使用POST方式传递参数时,因为Nginx会把request body缓存住,接受完毕后才会把数据一起发给后端。
所以如果用户网络较差,或者传递数据较大时,$request_time会比$upstream_response_time大很多。
所以如果使用nginx的accesslog查看php程序中哪些接口比较慢的话,记得在log_format中加入$upstream_response_time。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。
开始 ——> 读入 ——> 解析 ——> 分析 ——> 展示 ——> 结束
- 流量(字段里有每个页面的长度) sum line chat(线图)
- TOP 10 URL count之后取前10 bar chat(条形图)
- TOP 10 IP count之后取前10 bar chat(条形图)
- TOP 10 UA count之后取前10 bar chat(条形图)
- 一段时间内状态码的分布 group by pie chat(饼图,但是不能展示时间,可以选用stack chat,百分比的面积图)
- UA的分布 group by pie chat(饼图,但是不能展示时间,可以选用stack chat,百分比的面积图)
- http版本的分布(知道了之后可以做对应的一些压缩) group by pie chat(饼图,但是不能展示时间,可以选用stack chat,百分比的面积图)
python画图pygal模块,当然也可以用前端来画
pip install pygal