千家信息网

日志统计中awk常见的运用

发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,前言:首先awk是一门语言,其次跟其他语言相比,awk的优势是在文本处理、数值计算等方面,在我们日常的运维工作中,awk还有1个很重要的场景是配合sed、grep的使用,正是因为这些,awk是运维工程
千家信息网最后更新 2024年10月17日日志统计中awk常见的运用

前言首先awk是一门语言,其次跟其他语言相比,awk的优势是在文本处理、数值计算等方面,在我们日常的运维工作中,awk还有1个很重要的场景是配合sed、grep的使用,正是因为这些,awk是运维工程师最常用的工具之一,下面记录一下,awk在日志收集、统计场景的一些最常用的姿势。


awk使用格式

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个域


awk常用函数

1、split (string, array, field separator)

2、substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分

3、 length函数返回没有参数的字符串的长度

4、gsub(regular expression, subsitutionstring, target string)



awk扩展使用

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
2、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 -nk2status code   rate400         0.00412448416         0.00412448478         0.00412448204         0.00618672401         0.02680910   0.0659916301         0.0763028302         0.787775404         2.19628403         2.66441206         5.02567304         17.7043200         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 | tailbsy.pp.starschinalive.com   125js1.pcfg.cache.wpscdn.cn        131portal.wsds.cn      162vas.fun.tv          173img.funshion.com    238www.duba.com        277plugin.video.51togic.com    280p1.meituan.net      286res.qxz.37wan.com   306d.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  | headwww.duba.com 237 0.868291p1.meituan.net 163 0.597179pas.suning.com 66 0.241803shopping.suning.com 55 0.20150277g4l9.com5.z0.glb.qiniucdn.com 55 0.201502res.qxz.37wan.com 50 0.183184review.suning.com 41 0.150211static.1sapp.com 32 0.117238s1.vas.wpscdn.cn 30 0.10991fs.ios.kugou.com 25 0.0915919


0