linux awk 日志分析,Linux Awk使用案例总结 nginx日志统计
文章目錄
[隱藏]
一、Nginx日志分析
知識點:
數(shù)組
數(shù)組是用來存儲一系列值的變量,可通過索引來訪問數(shù)組的值。
Awk中數(shù)組稱為關(guān)聯(lián)數(shù)組,因為它的下標(索引)可以是數(shù)字也可以是字符串。
下標通常稱為鍵,數(shù)組元素的鍵和值存儲在Awk程序內(nèi)部的一個表中,該表采用散列算法,因此數(shù)組元素是隨機排序。
數(shù)組格式:array[index]=value
一、Nginx日志分析
日志格式
'$remote_addr - $remote_user [$time_local] "$request" $status $request_body $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"
日志記錄:
183.251.21.109 - - [16/Sep/2017:09:43:36 +0800] "POST /article/getKeywords HTTP/1.1" 200 str=Linux+Awk%E4%BD%BF%E7%94%A8%E6%A1%88%E4%BE%8B%E6%80%BB%E7%BB%93+nginx%E6%97%A5%E5%BF%97%E7%BB%9F%E8%AE%A1 185 "http://xxxx" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" "-"
1、統(tǒng)計日志中訪問最多的10個IP
思路:對第一列進行去重,并輸出出現(xiàn)的次數(shù)
方法1:
awk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
方法2:
awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
說明:a[$1]++ 創(chuàng)建數(shù)組a,以第一列作為下標,使用運算符++作為數(shù)組元素,元素初始值為0。處理一個IP時,下標是IP,元素加1,處理第二個IP時,下標是IP,元素加1,如果這個IP已經(jīng)存在,則元素再加1,也就是這個IP出現(xiàn)了兩次,元素結(jié)果是2,以此類推。因此可以實現(xiàn)去重,統(tǒng)計出現(xiàn)次數(shù)。
2、統(tǒng)計日志中訪問大于100次的IP
方法1:
awk '{a[$1]++}END{for(i in a){if(a[i]>100)print i,a[i]}}' access.log
方法2:
awk '{a[$1]++;if(a[$1]>100){b[$1]++}}END{for(i in b){print i,a[i]}}' access.log
說明:方法1是將結(jié)果保存a數(shù)組后,輸出時判斷符合要求的IP。方法2是將結(jié)果保存a數(shù)組時,并判斷符合要求的IP放到b數(shù)組,最后打印b數(shù)組的IP。
3、統(tǒng)計2016年4月9日一天內(nèi)訪問最多的10個IP
思路:先過濾出這個時間段的日志,然后去重,統(tǒng)計出現(xiàn)次數(shù)
方法1:
awk '$4>="[9/Apr/2016:00:00:01" && $4<="[9/Apr/2016:23:59:59" {a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
方法2:
sed -n '/[9/Apr/2016:00:00:01/,/[9/Apr/2016:23:59:59/p' access.log |sort |uniq -c |sort -k1 -nr |head -n10 #前提開始時間與結(jié)束時間日志中必須存在
4、統(tǒng)計當前時間前一分鐘的訪問數(shù)
思路:先獲取當前時間前一分鐘對應(yīng)日志格式的時間,再匹配統(tǒng)計
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -vdate=$date '$0~date{c++}END{print c}' access.log
date=$(date -d '-1 minute' +%d/%b/%Y:%H:%M);awk -vdate=$date '$4>="["date":00" && $4<="["date":59"{c++}END{print c}' access.log
grep -c $(date -d '-1 minute' +%d/%b/%Y:%H:%M) access.log
說明:date +%d/%b/%Y:%H:%M –> 09/Apr/2016:01:55
5、統(tǒng)計訪問最多的前10個頁面($request)
awk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
6、統(tǒng)計每個URL訪問內(nèi)容的總大小($body_bytes_sent)
awk '{a[$7]++;size[$7]+=$10}END{for(i in a)print a[i],size[i],i}' access.log
7、統(tǒng)計每個IP訪問狀態(tài)碼數(shù)量($status)
awk '{a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
8、統(tǒng)計訪問狀態(tài)碼為404的IP及出現(xiàn)次數(shù)
awk '{if($9~/404/)a[$1" "$9]++}END{for(i in a)print i,a[i]}' access.log
原文出處:peiwoqu -> http://peiwoqu.com/article/828
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的linux awk 日志分析,Linux Awk使用案例总结 nginx日志统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查看提交历史 —— Git 学习笔记 1
- 下一篇: 撤销操作 —— Git 学习笔记 12