通过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频繁访问有可能受到了爬虫的眷顾