按小时来统计, 当前指定日志的每小时最高流量的前10个IP, 并显示出请求的状态码.
nginx.conf中配置的日志格式为:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 功能: 按小时来统计, 当前指定日志的每小时最高流量的前10个IP, 并显示出请求的状态码.
# 使用方法: "./analysis_logs_with_nginx.bash 路径/日志文件名"
# 制作人: zl
# 制作时间: 2023.09.26
#!/bin/bash
# 接收指定的文件名
logname=$1
# 获取日志记录的最新的一条的小时数
ntime=$(tail -n 1 $logname | awk '{print $4}' | grep -oE "[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" | awk -F: '{print $2}')
# 获取指定日志的当前年份
cyear=$(tail -n 1 $logname | awk '{print $4}' | grep -oE "[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" | awk -F: '{print $1}')
# 按指定日志记录的最大时间,开始循环输出统计结果
i=0
while [ $i -le $ntime ]
do
# 判断1-9点之间时拼接小时字符串, 否则跳过
if [ $i -lt 10 ];
then
ctime="0$i"
else
ctime="$i"
fi
# 统计并显示指定日志文件中每小时请求次数最高的前10个IP
echo "以下为$logname日志中, $ctime点00分~59分时间段内, 请求最高的10个IP值: "
cat $logname | grep "$cyear:$ctime:" | awk '{print $1,$9}' | sort | uniq -c | sort -rn | head -10
((i++))
echo -e "\n"
done
标签:10,IP,nginx,logname,print,awk,日志 From: https://www.cnblogs.com/zhaolongisme/p/17729758.html