2020-09-03

tech2022-09-30  69

Shell三剑客统计Nginx日志一天的访问量

前言

通过sed,grep,awk,wc-l统计Nginx日志一天的访问量,线上真实环境用不到(统计时间长容易给服务器搞崩溃),面试的时候面试官会问。

具体操作如下:

netstat -an|grep “ESTABLISHED”|grep -w 80|awk ‘/^tcp/ {print $NF}’|sort -n|uniq -c|sort -nr ----统计80端口连接数(sort -n正向排序,uniq -c去重并统计,sort -nr逆向排序)

awk ‘END{print NR}’ access_20200717.log ----awk统计全天访问量 sed = access_20200717.log|tail -2|head -1 ----sed统计全天访问量 grep -aicwE “” access_20200717.log ----grep统计全天访问量 wc -l access_20200717.log|awk ‘{print $1}’ ----wc -l统计全天访问量 备注:以上四种方法均可以实现统计全天访问量

awk ‘/2020:09:00/’ access_20200717.log|more ----统计日志从9点开始 grep -ai ‘2020:09:00’ access_20200717.log|more ----grep统计日志从9点开始 awk ‘/2020:09:00/,/2020:11:00/’ access_20200717.log|tail -3 ----awk统计日志从9点到11点 sed -n ‘/2020:09:00/,/2020:11:00/p’ access_20200717.log|tail -3 ----sed统计日志从9点到11点

sed -n '/2020:09:00/,/2020:11:00/'p access_20200717.log|awk ‘{print $1}’|more ----打印9到11点期间用户IP sed -n '/2020:09:00/,/2020:11:00/'p access_20200717.log|awk ‘{print $1}’|sort -n|uniq -c|sort -nr|head -20 ----打印9到11点期间用户访问量前20的IP sed -n '/2020:09:00/,/2020:11:00/'p access_20200717.log|awk ‘{print $1}’|sort -n|uniq -c|sort -nr|awk ‘{if(($1>=100)) print $0}’ ----打印9到11点期间用户访问量大于100的IP

for ip in $(sed -n '/2020:09:00/,/2020:11:00/'p access_20200715.log|grep -aioE “^([0-9]{1,3}.){3}[0-9]{1,3}”|sort -n|uniq -c|sort -nr|awk ‘{if(($1>=1000)) print $0}’);do iptables -t filter -A INPUT -s $ip/32 -m tcp -p tcp --dport 80 -j DROP ;done ----将9点到11点期间用户IP访问量大于1000加入黑名单

最新回复(0)