一、日志格式如下
223.104.7.59 - - [05/Dec/2018:00:00:01 +0000] "GET /topics/17112 HTTP/2.0" 200 9874 "https://www.googleapis.com/auth/chrome-content-suggestions" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/70.0.3538.75 Mobile/15E148 Safari/605.1" 0.040 0.040 .
以空格为分割对日志格式进行分析如下
IP 空 空 时间戳 时区 请求方法 地址 http协议版本 状态码 字节数 Refer UserAgent 访问速度 访问时间 空
二、常用命令示范
1、找出log中的404 500的报错
分析:就是找出所有请求中状态码是404或者500的 状态码就是第9个字段 $9 ~就是告诉awk后面开始是正则
awk '$9~/404|500/' nginx.log
2、找出访问量最高的ip(ip出现次数最多的), 统计分析,取出top3的ip和数量,打印出来。
分析:就是找出ip出现次数最多的 ip就是第一个字段$1,uniq -c 就是在每列旁边显示该行重复出现的次数;sort -nr按照数字降序排序。在uniq -c前边加一个sort的意思就是先把相同的排到一起,如果重复的行不相邻时,uniq 命令是不起作用的
awk '{print $1}' nginx.log| sort |uniq -c | sort -nr | head -3
3、找出首页 / 访问 的平均响应时间
分析:把这个接口所有的请求时间加一起 除以请求的总次数 请求时间就是倒数第二个字段 用$(NF-1)表示,NR就是你匹配出来的所有行数
less nginx.log | awk '$7 == "/"' | awk '{ sum += $(NF-1)} END {print sum/NR}'
4、找出访问量最高的url,打印出url和访问量
分析:这个跟第二个思路相同
awk '{print $7}' nginx.log|sort |uniq -c |sort -nr |head -10