awk分析nginx日志中的网页响应时间

nginx日志可以十分方便的看到每一个请求的响应速度,通常我会用awk去分析这些请求耗时。通常nginx的log配置是这样的

log_format access_comment '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent "$http_referer" '
 '"$http_user_agent" $http_x_forwarded_for '
 '$upstream_response_time $request_time';

我们记录的日志类似于这样

127.0.0.1 - - [15/Feb/2017:10:30:19 +0800] "POST /get" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" 111.111.111.111, 10.0.0.0 0.007 0.007

响应时间是最后一个。

awk的工作原理是读出一行数据,然后根据指定的分隔符对行进行分割,放到序号变量里面,默认是按照空格分割,比如$1是127.0.0.1,$2是-…

然而按照空格分割的话,这里有一个不确定的因素,就是http_user_agent,这个里面的空格是不确定的,因此没有一个固定的序号变量来保存响应时间。

不急,awk提供了一个非常好的内置变量NF,NF保存了当前分割出来的字段总数,那么最后一个则是$(NF),这样我们就能得到日志里面的响应时间。

命令如下

$ tail -f /data/logs/nginx/access.log | awk '{print $(NF)}'

实际应用中路径需要你记录nginx日志的路径。

同样我们还可以分析最近请求的平均耗时,使用NR,NR是已经读取的行数

tail -f /data/logs/nginx/access.log | awk 'BEGIN{FS=" ";count=0} {count+=$(NF); print (count/NR),"\t",$(NF)}'

awk的详细用法可以查看:http://imhuchao.com/606.html

你可能还喜欢下面这些文章

nginx日志分析以及常用的命令

获得访问前10位的ip地址 cat access.log|gawk ‘{print $1}’ |sort|uniq -c|sort -nr |head -10访问次数最多的文件或页面 cat access.log|gawk ‘{print $11}’|sort|uniq -c|sort -nr通过子域名访问次数,依据referer来计算,稍有不准 cat access.log | awk ‘{print $11}’ | sed -e ‘ s/http:\/\///’ -e ‘ s/\/.*//’ | sort | uniq -c | sort -rn | head -20列出传输大小最大的几个

linux awk命令分析你的文本或日志,awk命令用法

简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您