通过grep访问日志过滤出所有IP地址

grep -oE "\\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b" /var/log/nginx/access.log

通过awk统计IP出现次数,并按次序排序,下面命令提取出现最多的前10个IP地址,并显示他们出现的次数

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

使用sed和sort来提取前10个IP地址

sed -E 's/^([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+).*$/\\1/' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

自动化脚本的部署

为了进一步提升操作的便捷性与重复性,编写定制化的Bash脚本是明智之选。以下脚本展示了如何自动执行上述分析过程,并格式化输出结果,提取Nginx访问日志中出现次数最多的前10个IP地址:


#!/bin/bash


# 定义日志文件路径


LOG_FILE="/usr/local/nginx/logs/www-test-cn-access.log"


# 提取日志中的 IP 地址并统计出现次数


IP_COUNT=$(awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr)


# 提取前 10 个 IP 地址及其出现次数


TOP_IP=$(echo "$IP_COUNT" | head -n 10)


# 打印结果


echo "Top 10 IP addresses accessing Nginx:"


echo "$TOP_IP"

保存上述代码为一个脚本文件(例如analyze_nginx_logs.sh),然后通过运行bash analyze_nginx_logs.sh来执行它。脚本将读取Nginx访问日志文件,提取前10个最常见的IP地址及其出现次数,并将结果打印出来。

您可以根据需要对脚本进行修改和定制,以满足特定的分析要求。

#############

awk '{sum+=$10} END {print sum}' /usr/local/nginx/access.log*  

上述脚本可以分析主站的访问IP

下面可以分析所有分站的访问IP

vi /home/analyze_all_logs.sh

#!/bin/bash


# 定义日志文件路径


LOG_DIR="/usr/local/nginx/logs"


for LOG_FILE in "$LOG_DIR"/*access.log; do


# 提取日志中的 IP 地址并统计出现次数


IP_COUNT=$(awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr)


# 提取前 20 个 IP 地址及其出现次数

TOP_IP=$(echo "$IP_COUNT" | head -n 20)


# 打印结果



echo "$TOP_IP"

done


下面的脚本可以分析nginx上所有网站的top20

sh /home/analyze_all_logs.sh | sort -nr | head -n 20



最终解决包括多个log的访问IP汇总以后的排名

如果某些IP频繁访问有可能受到了爬虫的眷顾