日誌統計中awk常見的運用

前言首先awk是一門語言,其次跟其餘語言相比,awk的優點是在文本處理、數值計算等方面,在咱們平常的運維工做中,awk還有1個很重要的場景是配合sed、grep的使用,正是由於這些,awk是運維工程師最經常使用的工具之一,下面記錄一下,awk在日誌收集、統計場景的一些最經常使用的姿式。ios


awk使用格式web

awk [-F value] [-v var=value] 'program text' [files....]
program text:
     BEGIN {actions}/pattern/{actions}END{actions}
內置變量
    
FS--Field Separator:域的分隔符,默認的是以空白符分隔
    
RS--Record Separator 記錄的分隔符,默認是以換行符來分隔
    
FILENAME -- current filename
                   NF -- Number of
Feilds in current record,域的個數
    
NR -- Number of Record 輸入的記錄數,至關於行號同樣,多個文件時會接着遞增
    
FNR -- File Number of Record 輸入的當前記錄數,每一個文件單獨計算
    
$0 -- the whole record  當前整個記錄
    
$n -- the nth field of the current record 當前記錄的第n個域express


awk經常使用函數數組

一、split (string, array, field separator)bash

二、substr(s,p,n) 返回字符串s中從p開始長度爲n的後綴部分app

三、 length函數返回沒有參數的字符串的長度運維

四、gsub(regular expression, subsitutionstring, target string)dom



awk擴展使用ide

awk[options] 'script' FILES
選項
-F:字段分隔符
-v:聲明一個變量,FS=:
awk'{print $1 $2}' a.txt:則顯示welcometo
awk'{print $1,$2}' a.txt:則顯示wlecometo
--------------
內置變量
    ORS
     OFS
     FS
     RS
     NR
     NF
     FNR
     ARGV:數組,保存命令行自己這個字符串,如awk'{print $0}' a.txt b.txt
         這個命令中,ARGV[0]保存awk,ARGV[1]保存a.txt
    ARGC:awk命令的參數個數
----------------
printf命令的使用格式
    printfformat,item1
要點:
1、其與print命令最大的不一樣是,printf須要指定format
二、format用於指定後面的每一個item的輸出格式
3printf語句不會自動打印換行符
format格式的指示符:
%c:顯示字符的ASCII
%d,%i十進制的整數
%e,%E科學計數法顯示數值
%f:顯示浮點數
%g,%G以科學計數法的格式或浮點數的格式顯示數值
%s:顯示字符串
%u:無符號整數
%%:顯示%自身

修飾符:
N:顯示寬度
-:左對齊
+:顯示數值符號函數


1,統計squid日誌中各個狀態碼所佔的百分比

# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "status code","\t""rate"}{count+=1;a[$9]+=1}END{for(i in a) print i,"\t",a[i]/count*100}' | sort -nk2
status code 	rate
400 	 0.00412448
416 	 0.00412448
478 	 0.00412448
204 	 0.00618672
401 	 0.0268091
0 	 0.0659916
301 	 0.0763028
302 	 0.787775
404 	 2.19628
403 	 2.66441
206 	 5.02567
304 	 17.7043
200 	 71.4339


2,統計squid日誌中訪問次數前10的域名

]# cat /usr/local/squid/var/logs/access.log | awk 'BEGIN{print "domain","\t","rate"}{count+=1;a[$2]+=1}END{for(i in a){print i,"\t",a[i]}}' | sort -nk2 | tail
bsy.pp.starschinalive.com 	 125
js1.pcfg.cache.wpscdn.cn 	 131
portal.wsds.cn 	 162
vas.fun.tv 	 173
img.funshion.com 	 238
www.duba.com 	 277
plugin.video.51togic.com 	 280
p1.meituan.net 	 286
res.qxz.37wan.com 	 306
d.ifengimg.com 	 481

3,統計最近5分鐘的流量

日誌:27.156.95.175 uc.a.yximgs.com "p_w_picpath/webp" [25/Dec/2016:22:17:01 +0800] "GET http://uc.a.yximgs.com/upic/2016/11/27/11/BMjAxNjExMjcxMTIxMTNfODY2MTM1NV8xMzAxODgwMDQ4XzJfMw==_low.webp?tag=1-1482675421-f-0-8a7txqz36n-ce40124930229f39 HTTP/1.1" 200

cat /usr/local/squid/var/logs/access.log | awk '{i=int(substr($4,17,2)/5)*5;h=substr($4,14,2);s[h":"i]+=$10;}END{for(i in s)print i,s[i]*8/1024/1024/300"Mbps"}'
21:50 143.537Mbps


4,MISS的域名請求數top10統計

# cat /usr/local/squid/var/logs/access.log | awk '{n+=1;if($0~/MISS/)a[$2]+=1}END{for(i in a){print i,a[i],a[i]/n*100}}' | sort -nrk2  | head
www.duba.com 237 0.868291
p1.meituan.net 163 0.597179
pas.suning.com 66 0.241803
shopping.suning.com 55 0.201502
77g4l9.com5.z0.glb.qiniucdn.com 55 0.201502
res.qxz.37wan.com 50 0.183184
review.suning.com 41 0.150211
static.1sapp.com 32 0.117238
s1.vas.wpscdn.cn 30 0.10991
fs.ios.kugou.com 25 0.0915919
相關文章
相關標籤/搜索