很多像我這樣剛入門的小菜鳥,不知道日常怎麼對自己的網站的日誌進行分析,得出誰訪問過我網站,訪問什麼,響應效果如何等等,在這裏我對相關基礎分析命令作個總結,大家可以參考一下&給修改意見。
在講分析命令之前,首先要明確日誌格式,每個人的格式不一定一樣,如果與我的格式不一樣則分析命令的列數號要作對應調整
141.10.225.94 - - [09/Dec/2016:15:42:45 +0800] "GET /wp-content/uploads/2016/12/56.jpg HTTP/1.1" 304 - "http://www.vrfxie.cn/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" 0
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" combined
%…h: 遠程主機
%…l: 遠程登錄名字(來自identd,如提供的話)
%…u: 遠程用戶(來自auth;如果返回狀態(%s)是401則可能是僞造的)
%…t: 以公共日誌時間格式表示的時間(或稱爲標準英文格式)
%…r: 請求的第一行
%…s: 狀態。對於進行內部重定向的請求,這是指*原來*請求 的狀態。如果用%…>s,則是指後來的請求
%…b: CLF格式的已發送字節數量,不包含HTTP頭。例如當沒有發送數據時,寫入‘-’而不是0
%{Referer}i: 前一個頁面,或者說從按個頁面引過來的
%{User-Agent}i: 客戶端主體信息
%T: 響應時間
基礎:
1.找出訪問次數最多的10個IP
cat access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10
結果:
4 101.226.35.225
2 91.92.120.102
2 123.126.113.161
1 98.143.148.107
1 95.213.187.188
1 81.169.223.210
1 61.216.2.13
1 220.181.108.106
1 139.199.66.174
1 139.162.88.63
解析:
awk #首先將每條日誌中的IP抓出來,如日誌格式被自定義過,可以 -F 定義分隔符,然後print指定列
sort #進行初次排序,爲的使相同的記錄排列到一起
upiq -c #合併重複的行,並記錄重複次數
sort -nr #按照數字進行倒敘排序
head #進行前十名篩選
功能:
1.訪問最多的IP地址,一般來說單個ip訪問量就兩位數左右吧,什麼幾千幾萬次的,就有點奇怪了
2.進一步,可以查看對應IP做過在對你網站做什麼,做得最多的是什麼,訪問時間段……..
2.找到訪問最多的頁面
cat access_log | awk '{print $11}' | sort | uniq -c | sort -rn | head -n 10
結果:
3068 "http://139.199.66.174/phpmyadmin/index.php/index.php"
52 "-"
31 "http://139.199.66.174/wp-admin/post-new.php"
27 "http://139.199.66.174/?p=58"
23 "http://139.199.66.174/wp-content/themes/sparkling/inc/css/font-awesome.min.css?ver=4.3.6"
22 "http://139.199.66.174/"
21 "http://vrfxie.blog.51cto.com/11026252/1877410"
21 "http://139.199.66.174/wp-content/themes/sparkling/inc/css/bootstrap.min.css?ver=4.3.6"
16 "http://www.vrfxie.cn/"
13 "http://139.199.66.174/wp-admin/post.php?post=58&action=edit&message=6"
與1同理,只是換了一個列數
功能:
1.找出訪問最多的頁面
2.進一步可以查看對應頁面的響應效率,如果效率不正常,則要進行優化調整
3.找出網站的響應質量
cat access_log | awk '{print $9}' | sort | uniq -c | sort -rn | head -n 10 #查狀態碼
結果:
9 200
3 404
2 400
1 405
1 301
cat access_log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -n 10 #查響應時間
功能:
1.狀態碼2開頭表示正常,4的話就代表出錯了,如果佔得比例比較多則證明網站響應質量比較差,要查找對應原因了
2.響應時間一般爲0,也就是零點幾秒,大於0則要檢查一下了
4.找出訪問次數最多的那個小時
cat access_log | awk '{print $4}' | cut -c 14-15 | sort | uniq -c | sort -rn | head -n 10
結果:
3074 19
171 17
53 15
25 16
7 22
5 02
4 20
3 21
2 00
1 05
解析:
awk #用空格分出來的第四列是[09/Jan/2010:00:59:59;
cut -c #提取14到15個字符,就是表示小時那段
功能:
找出訪問最多的時候,進一步可以查找,訪問量高的原因,針對這段時間做優化。
進階:
其實就是把上述的基本命令相互結合使用,或者加上一些特定條件,進行定位分析
下面我舉幾個典型例子,其他的大家可以類比去定製自己的分析命令即可
1.查看當天ip連接數
cat access_log | grep "09/Dec/2016" | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10
關鍵在於grep,規定好特定前提--哪一天!
2.查看客戶端主體信息,可知道它是不是spider之類的東西
cat access_log | awk -F '"' '{print $6}' | sort | uniq -c | sort -rn | head -n 10
關鍵在於awk -F改變分隔符爲" 取其第六段--客戶端主體信息
spider樣子:
Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
……
3.列出傳輸時間超過30秒的文件
cat access_log | awk '($NF > 30){print $7}'| sort -n | uniq -c | sort -nr | head -10
關鍵在於$NF > 30,按照我的日誌格式$NF--最後一列是表示響應時間,響應時間大於30秒是前提
建議大家可以把對應你所需的分析命令匯合成一個腳本,定期執行形成報告,方便你查看,更牛的,可以根據報告結果,對異常的地方作出告警。