三剑客实战Nginx日志分析

三剑客grep、sed、awk、正则总结

正则分为普通正则和扩展正则

普通正则:

1.  .*可以匹配多个任意字符

2. \b是匹配单词的,匹配有空格的单词

扩展正则:

1.支持扩展正则 如grep时,要加 -E参数

2. 注意⚠️grep不支持正则中的\d 用[0-9]还有\w

3. grep  -P 意思是支持perl语法

4.另外在命令或脚本中要注意" "会转译,' '不转译

推荐详细学正则的网站:https://deerchao.cn/tutorials/regex/regex.htm

 

 
 
实战场景:对Nginx log日志分析,目录:/tmp/nginx.log
 
shell脚本命令以后无论是 adb shell查看日志信息,想分析手机中的性能,docker还是jenkins使用shell脚本都会用到,因此很重要!!
不懂怎么用命令的时候 就用man grep,man awk 

找出log中的404 500的报错有多少条

1)grep -E '\s500\s|\s404\s' nginx.log | wc -l (使用扩展正则)

2)grep -cE '\s500\s|\s404\s' nginx.log  (grep -c 和wc -l使用效果是一样的,都是统计条数)

3)awk '$9~/404|500/' nginx.log |wc -l (注意⚠️$9~ 不加{print}默认就是print,如果 不加$9 默认为$0~,就是整行的意思,就默认整行中查找404和500,)

找出访问量最高的前三名ip

1)awk '{print $1}' nginx.log |sort|uniq -c|sort -nr;     awk '{print $1}' nginx.log |sort|uniq -c|sort -nr|head -3

分析:sort 排序,是一个经常使用的命令; 将重复的放在一起进行排序, sort默认排序是字典序,相对数字排序必须要加上-n加r -nr是反转;

uniq合并在: 是合并相邻的 ,因此要先用sort排序, 将重复的数据放在一起 -c可以计算出重复的有多少个

head -3 取出头部前三名

另外如果 想要把前面的统计数字去掉,在后面在加上一个awk筛选: awk '{print $1}' nginx.log |sort|uniq -c|sort -nr|head -3|awk '{print $2}’

2) grep -o '^[0-9]*.[0-9]*.[0-9]*.[0-9]*' nginx.log |sort|uniq -c|sort -nr|head -3(注意⚠️ 加.是任意字符匹配的意思,不是ip中的. 加参数 -o 只显示匹配到的字符)

也可以通过grep 加正则的形式筛选出访问量前3的ip

只要思路清楚,命令可以一直通过练习加强

学习方法:学习shell脚本编程的时候,可以把平时用python写的代码转化成shell脚本用来练习

将topics后面的数字替换成number

grep 'topics' nginx.log | sed 's@/topics/[0-9]*@/topics/numbers@g'

分析:注意⚠️sed 's后的/可以用@替换,或者其他#、*都可以,为了区别于其他的/

 

将IP地址横向打印 

awk '{print $1}' nginx.log |sed ':f;N;s/\n/|/g;tf'

分析: sed的标记和跳转用法; 标记在前面 f(前面可以加f、1等任意字符):,;tf后面跳转也是

使用该命令后的效果:将一行一行的ip转换成一行,并用|隔开

 

posted @ 2020-03-20 15:54  zhaikunkun  阅读(488)  评论(0)    收藏  举报