1)按每小时切割Nginx访问日志,并且将日志自动上传至FTP服务器;
#!/bin/bash
#auto mv nginx log shell
#by author xiaoming
S_LOG=/usr/local/nginx/logs/access.log
D_LOG=/data/backup/`date +%Y%m%d%H%M`
echo -e "\033[32mPlease wait start cutshell scripts...\033[0m"
sleep 2
if [ ! -d $D_LOG ];then
mkdir -p $D_LOG
fi
mv $S_LOG $D_LOG
kill -USR1 `cat/usr/local/nginx/logs/nginx.pid`
echo"-----------------------------------"
echo "The Nginx log Cutting Successfully"
if [ $? -eq 0 ];then
ftp -n << EOF
open x.x.x.x
useradmin admin
binary #使用二进制
cd/home/admin #进入ftp服务器目录
lcd$D_LOG #进入本地目录
putaccess.log
close
bye
EOF
fi
if [ $? -eq 0 ];then
echo "Put the ftp is successfully"
else
echo "It is not successfully"
fi
2)分析Nginx日志,统计网站的IP、UV、PV及早上9点-10点的访问排前20的URL,并将IP和URL均打印出来;
(1)统计网站的IP
awk ‘{print $1}‘ access_20170804.log | sort| uniq -c | sort -nr | wc -l
统计独立IP:00:00-24:00内相同IP地址只被计算一次,做网站优化的朋友最关心这个
(2)统计网站的UV
awk ‘{print $11}‘ access_20170804.log |sort | uniq -c | sort -nr | wc -l
UV(Unique Visitor):独立访客,将每个独立上网电脑(以cookie为依据)视为一位访客,一天之内(00:00-24:00),访问您网站的访客数量。一天之内相同cookie的访问只被计算1次
(3)统计网站的PV
awk ‘{print $7}‘ access_20170804.log | wc-l
PV(Page View):访问量,即页面浏览量或者点击量,用户每次对网站的访问均被记录1次。用户对同一页面的多次访问,访问量值累计
(4)统计早上9点-10点的访问排前20的URL,并将IP和URL均打印出来
sed -n "/2017:09:00/,/2017:10:00/"paccess_20170804.log | sort | uniq -c | sort -nr | head -20 | awk ‘{print$2,$12}‘
3)自动每天统计Nginx日志,打印访问时间大于5秒的URL,并且把相关信息通过WEB表格线上展示出来,通过浏览器可以访问该数据;
(WEB表格展示内容包括:编号、客户端IP、访问URL、访问状态码、访问时间、备注信息等)
#!/bin/bash
#by author xiaoming
################################
NGINX_FILES=/usr/local/nginx/logs/access_20170804.log
NGINX_HTML=/usr/local/nginx/html/index.html
cat>$NGINX_HTML<<EOF
<html>
<body>
<meta charset="UTF-8">
<center><h1>北京时间:`date+%Y%m%d\ %H:%M`Nginx请求时间</h1></center>
<table border="1">
<tr>
<td>编号</td>
<td>IP Address</td>
<td>Nginx URL</td>
<td>状态码</td>
<td>处理时间</td>
<td>备注信息</td>
</tr>
EOF
i=0
awk ‘{if($NF>5) print $0}‘ $NGINX_FILES>tmp.html
while read line
do
NUM1=`echo $line | awk ‘{print $1}‘`
NUM2=`echo $line | awk ‘{print $11}‘`
NUM3=`echo $line | awk ‘{print $9}‘`
NUM4=`echo $line | awk ‘{print $4}‘ | sed "s/\[//g"`
i=`expr $i + 1`
echo "
<tr>
<td>$i</td>
<td>$NUM1</td>
<td>$NUM2</td>
<td>$NUM3</td>
<td>$NUM4</td>
<td></td>
</tr> " >>$NGINX_HTML
done <tmp.html
cat>>$NGINX_HTML<<EOF
</table>
</body>
</html>
EOF