Nginx日誌統計
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
本文出自 “蠟筆xiao馨” 博客,謝絕轉載!
Nginx日誌統計