最近在做一些性能排查,根据Nginx日志进行分析,这里记录一些命令,当一个总结。
如果需要抓取请求处理的时间,在log_format里加上$request_time参数即可。
以下是我常用的一些命令,日志名称为access_2019-10-28.log。
日志格式log_format如下:
补:Nginx日志记录POST请求参数,只要项目使用的是proxy_pass,使用“request_body”日志参数就可以,不然还得需要lua脚本支持才可以。
1、获取pv数。
cat access_2019-10-28.log | wc -l
2、获取ip数。
cat access_2019-10-28.log | awk ‘{print $1}’| sort -k1 -r |uniq | wc -l
3、获取最耗时的请求时间、URL、所耗时长前10。
cat access_2019-10-28.log | awk ‘{print $4,$7,$NF}’ | awk -F ‘"’ ‘{print $1,$2,$3}’ | sort -k3 -rn | head -10
4、获取某一时刻的请求数量。
cat access_2019-10-28.log | grep “28/Oct/2019:12:12:12” | wc -l
可以把秒去掉得到分钟的数据,把分钟去掉得到小时的数据,以此类推。
5、获取每分钟的请求数量,输出为csv文件。
cat access_2019-10-28.log | awk ‘{print substr($4,14,5)}’ | uniq -c | awk ‘{print $2","$1}’ > access.csv
可以用excel打开生成柱状图,非常有利于分析;下图示例:
总结一下:
其实过来过去也就下边这么几个命令:
grep:文本过滤
sort:排序
uniq:去重
awk:文本处理
①命令可以组合使用,单个命令也可以使用多次,达到多重过滤的效果;
②前面一个命令的输出,即为后一个命令的输入,流式处理。只要学会组合使用命令,都会变得异常的简单。
③命令都比较简单,这里单独说一下上边儿用到的“print substr”。
substr($4,14,5)>>>表示从第4个字段里的第14个字符开始,截取5个字符结束。