一、查看有多少個IP訪問:php
awk '{print $1}' log_file|sort|uniq|wc -l # wc -l 看看有多少行
二、查看某一個頁面被訪問的次數:linux
grep "/index.php" log_file | wc -l
三、查看每個IP訪問了多少個頁面:apache
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file > log.txt sort -n -t ' ' -k 2 log.txt # 配合sort進一步排序
四、將每一個IP訪問的頁面數進行從小到大排序:服務器
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
五、查看某一個IP訪問了哪些頁面:網絡
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
六、去掉搜索引擎統計的頁面:併發
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
七、查看2015年8月16日14時這一個小時內有多少IP訪問:tcp
awk '{print $4,$1}' log_file | grep 16/Aug/2015:14 | awk '{print $2}'| sort | uniq | wc -l
八、查看訪問前十個ip地址網站
awk '{print $1}' |sort|uniq -c|sort -nr |head -10 access_log # uniq -c 至關於分組統計並把統計數放在最前面 cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10 cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}
九、訪問次數最多的10個文件或頁面搜索引擎
cat log_file|awk '{print $11}'|sort|uniq -c|sort -nr | head -10 cat log_file|awk '{print $11}'|sort|uniq -c|sort -nr|head -20 awk '{print $1}' log_file |sort -n -r |uniq -c | sort -n -r | head -20 # 訪問量最大的前20個ip
十、經過子域名訪問次數,依據referer來計算,稍有不許url
cat access.log | awk '{print $11}' | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort | uniq -c | sort -rn | head -20
十一、列出傳輸大小最大的幾個文件
cat www.access.log |awk '($7~/\.php/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -100
十二、列出輸出大於200000byte(約200kb)的頁面以及對應頁面發生次數
cat www.access.log |awk '($10 > 200000 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
1三、若是日誌最後一列記錄的是頁面文件傳輸時間,則有列出到客戶端最耗時的頁面
cat www.access.log |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
1四、列出最最耗時的頁面(超過60秒的)的以及對應頁面發生次數
cat www.access.log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
1五、列出傳輸時間超過 30 秒的文件
cat www.access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
1六、列出當前服務器每一進程運行的數量,倒序排列
ps -ef | awk -F ' ' '{print $8 " " $9}' |sort | uniq -c |sort -nr |head -20
1七、查看apache當前併發訪問數
#對比httpd.conf中MaxClients的數字差距多少。 netstat -an | grep ESTABLISHED | wc -l
1八、可使用以下參數查看數據
ps -ef|grep httpd|wc -l #1388 #統計httpd進程數,連個請求會啓動一個進程,使用於Apache服務器。 #表示Apache可以處理1388個併發請求,這個值Apache可根據負載狀況自動調整。 netstat -nat|grep -i "80"|wc -l #4341 #netstat -an會打印系統當前網絡連接狀態,而grep -i "80"是用來提取與80端口有關的鏈接的,wc -l進行鏈接數統計。 #最終返回的數字就是當前全部80端口的請求總數。 netstat -na|grep ESTABLISHED|wc -l #376 #netstat -an會打印系統當前網絡連接狀態,而grep ESTABLISHED 提取出已創建鏈接的信息。 而後wc -l統計。 #最終返回的數字就是當前全部80端口的已創建鏈接的總數。 netstat -nat||grep ESTABLISHED|wc #可查看全部創建鏈接的詳細記錄
1九、輸出每一個ip的鏈接數,以及總的各個狀態的鏈接數
netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s\n", a, S[a]);++I}printf("%-20s %s\n","TOTAL_IP",I);for(a in s) printf("%-20s %s\n",a, s[a]);printf("%-20s %s\n","TOTAL_LINK",N);}'
20、其餘的收集
# 分析日誌文件下 2012-05-04 訪問頁面最高 的前20個 URL 並排序 cat access.log |grep '04/May/2012'| awk '{print $11}'|sort|uniq -c|sort -nr|head -20 # 查詢受訪問頁面的URL地址中 含有 www.abc.com 網址的 IP 地址 cat access_log | awk '($11~/\www.abc.com/){print $1}'|sort|uniq -c|sort -nr # 獲取訪問最高的10個IP地址 同時也能夠按時間來查詢 cat linewow-access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10 #時間段查詢日誌時間段的狀況 cat log_file | egrep '15/Aug/2015|16/Aug/2015' |awk '{print $1}'|sort|uniq -c|sort -nr|head -10 # 分析2015/8/15 到 2015/8/16 訪問"/index.php?g=Member&m=Public&a=sendValidCode"的IP倒序排列 cat log_file | egrep '15/Aug/2015|16/Aug/2015' | awk '{if($7 == "/index.php?g=Member&m=Public&a=sendValidCode") print $1,$7}'|sort|uniq -c|sort -nr #($7~/\.php/) $7裏面包含.php的就輸出,本句的意思是最耗時的一百個PHP頁面 cat log_file |awk '($7~/\.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100 # 列出最最耗時的頁面(超過60秒的)的以及對應頁面發生次數 cat access.log |awk '($NF > 60 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100 # 統計網站流量(G) cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}' # 統計404的鏈接 awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort # 統計http status. cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}' cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn # 每秒併發: watch "awk '{if($9~/200|30|404/)COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}' log_file|sort -k 2 -nr|head -n10" # 帶寬統計 cat apache.log |awk '{if($7~/GET/) count++}END{print "client_request="count}' cat apache.log |awk '{BYTE+=$11}END{print "client_kbyte_out="BYTE/1024"KB"}' # 找出某天訪問次數最多的10個IP cat /tmp/access.log | grep "20/Mar/2011" |awk '{print $3}'|sort |uniq -c|sort -nr|head # 當天ip鏈接數最高的ip都在幹些什麼: cat access.log | grep "10.0.21.17" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10 # 小時單位裏ip鏈接數最多的10個時段 awk -vFS="[:]" '{gsub("-.*","",$1);num[$2" "$1]++}END{for(i in num)print i,num[i]}' log_file | sort -n -k 3 -r | head -10 # 找出訪問次數最多的幾個分鐘 awk '{print $1}' access.log | grep "20/Mar/2011" |cut -c 14-18|sort|uniq -c|sort -nr|head # 取5分鐘日誌 if [ $DATE_MINUTE != $DATE_END_MINUTE ] ;then #則判斷開始時間戳與結束時間戳是否相等START_LINE=`sed -n "/$DATE_MINUTE/=" $APACHE_LOG|head -n1` #若是不相等,則取出開始時間戳的行號,與結束時間戳的行號 # 查看tcp的連接狀態 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}' netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"\t",arr[k]}' netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c netstat -ant|awk '/ip:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -n netstat -ant|awk '/:80/{split($5,ip,":");++S[ip[1]]}END{for (a in S) print S[a],a}' |sort -rn|head -n 10 awk 'BEGIN{printf ("http_code\tcount_num\n")}{COUNT[$10]++}END{for (a in COUNT) printf a"\t\t"COUNT[a]"\n"}' #查找請求數前20個IP(經常使用於查找攻來源): netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20 #用tcpdump嗅探80端口的訪問看看誰最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20 # 查找較多time_wait鏈接 netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20 # 找查較多的SYN鏈接 netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more # 根據端口列進程 netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1 # 查看了鏈接數和當前的鏈接數 netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep EST | wc -l # 查看IP訪問次數 netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' watch "netstat -n | awk '/^tcp/ {++S[\$NF]} END {for(a in S) print a, S[a]}'" # 經過watch能夠一直監控
LAST_ACK 5 #關閉一個TCP鏈接須要從兩個方向上分別進行關閉,雙方都是經過發送FIN來表示單方向數據的關閉,當通訊雙方發送了最後一個FIN的時候,發送方此時處於LAST_ACK狀態,當發送方收到對方的確認(Fin的Ack確認)後才真正關閉整個TCP鏈接; SYN_RECV 30 # 表示正在等待處理的請求數; ESTABLISHED 1597 # 表示正常數據傳輸狀態; FIN_WAIT1 51 # 表示server端主動要求關閉tcp鏈接; FIN_WAIT2 504 # 表示客戶端中斷鏈接; TIME_WAIT 1057 # 表示處理完畢,等待超時結束的請求數;
一月 Jan January 二月 Feb February 三月 Mar March 四月 Apr April 五月 May May 六月 June June 七月 July July 八月 Aug Aguest 九月 Sept September 十月 Oct October 十一月 Nov November 十二月 Dec December