【運維小分享】Apache日誌分析命令彙總

很多像我這樣剛入門的小菜鳥,不知道日常怎麼對自己的網站的日誌進行分析,得出誰訪問過我網站,訪問什麼,響應效果如何等等,在這裏我對相關基礎分析命令作個總結,大家可以參考一下&給修改意見。i_f38.gif


在講分析命令之前,首先要明確日誌格式,每個人的格式不一定一樣,如果與我的格式不一樣則分析命令的列數號要作對應調整

 

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秒是前提

 

建議大家可以把對應你所需的分析命令匯合成一個腳本,定期執行形成報告,方便你查看,更牛的,可以根據報告結果,對異常的地方作出告警。

 

當然現在有很多日誌分析軟件如Logcheck等等,但是手工分析是基礎,而且有趣一點~i_f46.gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章