linux awk工具统计nginx日志

本文介绍了linux华宁下利用文本处理工具awk 处理日志的使用案例,awk是Linux系统上文本处理利器

awk工具介绍

awk 是一种用于操作和处理文本文件的强大语言。当文本文件中的行是记录格式时,它特别有用。即包含由分隔符分隔的多个字段的记录。即使输入文件不是记录格式,您仍然可以使用 awk 进行一些基本的文件和数据处理。即使没有需要处理的输入文件,您也可以使用 awk 编写编程逻辑。



awk日志切分统计

nginx日志样例:

119.255.7.109 - [02/Nov/2019:15:44:36 +0800]  "GET /xxx/app/main/refresh.jsp?r=1478072510132 HTTP/1.1"  - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
119.255.1.109 - [02/Nov/2019:15:44:36 +0800]  "GET /xxx/app/message/bb_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1"  - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
192.168.3.2 - [02/Nov/2019:15:44:37 +0800]  "GET /xxx/app/message/aa_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1"  - 200 "User_Cookie:7F00000123D3BF2345115EAAC21F71E0"

独立UV统计

[root@localhost logs]# cat nginx.log | awk '{print $10}' | uniq -c |sort -r |wc -l

解释:awk 默认以空格切分日志,$10: 切分后数组第10个单元内容,提取的cookie信息作为独立UV的标识,uniq -c :去重, sort -r: 按统计数量倒叙默认升序, wc -l 统计总数量

独立IP统计

[root@localhost logs]# cat nginx.log | awk '{print $1}' | uniq -c |sort -r |wc -l

解释同上

PV总量统计

[root@localhost logs]# cat nginx.log | awk '{print $6}' | uniq -c |sort -r |wc -l

解释:$6:不同的URL区分pv



awk分隔符

对于特殊的日志格式需要特殊处理,需要用到分隔符参数 '-F'
比如日志

2022-08-01 14:03:07.044  INFO 1591 --- [http-nio-18989-exec-1] c.p.interceptor.abc       : dd_request=>ip:192.168.2.6, url:http://XXXXX, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
2022-08-01 14:03:42.614  INFO 1591 --- [http-nio-18989-exec-4] c.p.interceptor.abc       : dd_request=>ip:192.168.9.22, url:http://aaaaa, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
2022-08-01 14:04:04.909  INFO 1591 --- [http-nio-18989-exec-3] c.p.interceptor.abc       : dd_request=>ip:192.168.10.28, url:http://bbbbb, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 YisouSpider/5.0 Safari/537.36

想要提取出IP地址,可以使用如下命令处理

[root@localhost logs]# cat aaa.log | awk -F '=>' '{print $2}' | awk -F ',' '{print $1}' | awk -F ':' '{print $2}' >> ip.txt

注意:这里要特别注意一点就是, 在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。否则不相邻的数据起不到去重效果。

上一篇 下一篇


推荐文章

评论
说点什么吧?

发表评论

取消回复
  最新文章