linux log 平均耗时,linux用grep、awk分析nginx的access.log的日志,根据时间段截取日志、统计某接口/关键字访问成功数量及平均响应时间。...

衍生文章链接:https://blog.csdn.net/enjoyphp/article/details/100024220

项目中亲测,命令全部有效

日志截取,从总日志文件中截取昨天已整天的数据出来,并覆盖到新文件中:

cat  access.log | awk '$4 >="[14/Mar/2019:00:00:00" && $4 <="[14/Mar/2019:23:59:59"'  > 20190314-access.log

若不想要覆盖新文件,想要追加到文件内则可以用“>>” 替代">"。上面这个命令亲测有效,以下命令也可以试试,但我试了没用,截取出来会有问题。

cat  access.log | awk '$4 >="14/Mar/2019:00:00:00" && $4 <="14/Mar/2019:23:59:59"'  > 20190314-access.log

cat  access.log | awk '$4 >="[14/Mar/2019:00:00:00" && $4 20190314-access.log

然后再对切割出来的昨天一整天的日志进行分析:

1、总访问量:

grep "keyword" access.log | awk "{print $NF}" | wc -l

若要过滤掉ip黑名单,不匹配某些ip,则可以这样:

grep -vE "ip1|ip2" access.log | grep "keyword" | awk "{print $NF}" | wc -l

2、接口成功访问量:

grep "keyword" access.log | grep -E  "  200  " | awk "{print $NF}" | wc -l

或者状态码是20开头的:

grep "keyword" access.log | grep -E " 20\d?" | awk "{print $NF}" | wc -l

3、统计某路由平均响应时间($upstream_response_time参数):

grep "keyword" access.log | awk '{print $NF}' | grep -P '\d{3}?$' | awk '{sum += $0;}END {if(sum==0)print 0;else print sum/NR}'

用if做了个判断,若日志中没有访问此接口,则为0,可以解决awk 报错division by zero attempted,即0不能做除数

4、接口失败数量:

=总访问量 - 接口成功访问量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值