天天看點

linux apache 日志分析與狀态

linux apache 日志分析與狀态

假設apache日志格式為:

118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] “GET /Public/Css/index.css HTTP/1.1″ 304 – “http://www.a.cn/common/index.php”

“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)”

問題1:在apachelog中找出通路次數最多的10個IP。

awk '{print $1}' apache_log |sort |uniq -c|sort -nr|head -n 10

awk 首先将每條日志中的IP抓出來,如日志格式被自定義過,可以 -F 定義分隔符和 print指定列;

sort進行初次排序,為的使相同的記錄排列到一起;

upiq -c 合并重複的行,并記錄重複次數。

head進行前十名篩選;

sort -nr按照數字進行倒叙排序。

我參考的指令是:

顯示10條最常用的指令

  sed -e "s/| /\n/g" ~/.bash_history | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head

問題2:在apache日志中找出通路次數最多的幾個分鐘。

awk '{print  $4}' access_log |cut -c 14-18|sort|uniq -c|sort -nr|head

awk 用空格分出來的第四列是[09/Jan/2010:00:59:59;

cut -c 提取14到18個字元 -- 00:59

剩下的内容和問題1類似。

問題3:在apache日志中找到通路最多的頁面:

awk '{print $11}' apache_log |sed 's/^.*cn\(.*\)\"/\1/g'|sort |uniq -c|sort -rn|head

類似問題1和2,唯一特殊是用sed的替換功能将”http://www.a.cn/common/index.php”替換成括号内的内容:”http://www.a.cn(/common/index.php)”

問題4:在apache日志中找出通路次數最多(負載最重)的幾個時間段(以分鐘為機關),然後在看看這些時間哪幾個IP通路的最多?

1,檢視apache程序:

ps aux | grep httpd | grep -v grep | wc -l    // ps aux是顯示所有程序和其狀态。

2,檢視80端口的tcp連接配接:

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

3,通過日志檢視當天ip連接配接數,過濾重複:

cat access_log | grep "19/May/2011" | awk '{print $2}' | sort | uniq -c | sort -nr

4,當天ip連接配接數最高的ip都在幹些什麼(原來是蜘蛛):

cat access_log | grep "19/May/2011:00" | grep "61.135.166.230" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

5,當天通路頁面排前10的url:

cat access_log | grep "19/May/2010:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

6,用tcpdump嗅探80端口的通路看看誰最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

接着從日志裡檢視該ip在幹嘛:

cat access_log | grep 220.181.38.183| awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less

7,檢視某一時間段的ip連接配接數:

grep "2006:0[7-8]" www20110519.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l

8,目前WEB伺服器中聯接次數最多的20條ip位址:

netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r | head -n 20

9,檢視日志中通路次數最多的前10個IP

cat access_80_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less

10,檢視日志中出現100次以上的IP

cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less

11,檢視最近通路量最高的檔案

cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less

12,檢視日志中通路超過100次的頁面

cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

13,列出傳輸時間超過 30 秒的檔案

cat access_log|awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20

14,列出最最耗時的頁面(超過60秒的)的以及對應頁面發生次數

cat access_log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

繼續閱讀