Nginx日志分析&EFK案例实战之Awk、Sed、Grep分析Nginx日志
1)在Linux服务器系统上日志种类很多:内核日志、安全日志、审计日志、邮件日志、应用程序(Nginx、MYSQL、Redis、MQ、ZK)日志等。日志内容通常是用于去定位软件服务、操作系统故障的,还可以对日志内容进行分析、统计,进而可以评估网站的访问量、IP、UV、PV、用户行为分析等。
2)基于SHELL编程三剑客awk、sed、grep分析Nginx日志,首先通过find工具去查找Nginx日志文件的位置。操作的方法和指令如下:
#查找Linux系统上以.log结尾的日志文件位置; find / -name "*.log" #查找Linux系统上以.log结尾的日志文件位置,以access开头的; find / -name "*.log" -a -name "access*" #查找Linux系统上以.log结尾的日志文件位置,以access开头的,排除access.log文件; find / -name "*.log" -a -name "access*" -a ! -name access.log #查找Linux系统上以.log结尾的日志文件位置,以access开头的,排除access.log文件,文件修改时间是60天之前的; find / -name "*.log" -a -name "access*" -a ! -name access.log -a -mtime +60 #查找Linux系统上以.log结尾的日志文件位置,以access开头的,排除access.log文件,文件修改时间是60天之前的,文件大小超过200M的; find / -name "*.log" -a -name "access*" -a ! -name access.log -a -mtime +60 -a -size +200M #查找Linux系统上以.log结尾的日志文件位置,以access开头的,排除access.log文件,文件修改时间是60天之前的,文件大小超过200M的,将其拷贝至/tmp/目录; for i in $(find / -name "*.log" -a -name "access*" -a ! -name access.log -a -mtime +60 -a -size +200M);do \cp $i /tmp/ ;done find / -name "*.log" -a -name "access*" -a ! -name access.log -a -mtime +60 -a -size +200M -exec \cp {} /tmp/ \; find / -name "*.log" -a -name "access*" -a ! -name access.log -a -mtime +60 -a -size +200M |xargs -I {} \cp {} /tmp/ |
3)Nginx WEB日志实战一,基于SHELL编程三剑客awk、sed、grep分析Nginx日志,分析、统计Nginx日志全天总的请求数(访问量),操作的方法和指令如下:
awk '{print $0}' access_20240523.log |wc -l
cat access_20240523.log |wc -l
wc -l < access_20240523.log
awk 'BEGIN{NR==1} END {print NR}' access_20240523.log
sed = access_20240523.log |tail -2|awk 'NR==1 {print $0}'
grep -aicwE " " access_20240523.log
4)Nginx WEB日志实战二,基于SHELL编程三剑客awk、sed、grep分析Nginx日志,分析、统计Nginx日志10:00-11:00之间的总的请求数(访问量),操作的方法和指令如下:
awk '/23\/May\/2024:10:00/' access_20240523.log |wc -l
sed -n '/23\/May\/2024:10:00/p' access_20240523.log |wc -l
grep -aiE '23\/May\/2024:10:00' access_20240523.log |wc -l
awk '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/' access_20240523.log |wc -l
sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |wc -l
5)Nginx WEB日志实战三,基于SHELL编程三剑客awk、sed、grep分析Nginx日志,分析、统计Nginx日志10:00-11:00之间的总的请求数(访问量),将用户的IP地址打印出来,操作的方法和指令如下:
sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |awk '{print $1}'
sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |cut -d" " -f1
sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}"
6)Nginx WEB日志实战四,基于SHELL编程三剑客awk、sed、grep分析Nginx日志,分析、统计Nginx日志10:00-11:00之间的总的请求数(访问量),将用户的IP地址访问次数排前20名打印出来,操作的方法和指令如下:
sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -n|uniq -c|sort -nr|awk 'NR<=20 {print $0}'
7)Nginx WEB日志实战五,基于SHELL编程三剑客awk、sed、grep分析Nginx日志,分析、统计Nginx日志10:00-11:00之间的总的请求数(访问量),将用户的IP地址访问次数超过5000次加入Linux黑名单中,操作的方法和指令如下:
for ip in $(sed -n '/23\/May\/2024:10:00/,/23\/May\/2024:11:00/p' access_20240523.log |grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort -n|uniq -c|sort -nr|awk '{if(($1>=5000)) {print $2}}');do iptables -t filter -A INPUT -s $ip/32 -m tcp -p tcp --dport 80 -j DROP ;done
iptables -t filter -L -n --line-numbers|grep -aiE "DROP"