Linux与Shell实战(一)

find_error_log(){ 
awk '$9~/404|500/{print $9}' nginx.log | sort | uniq -c ;
}
find_before(){ 
grep -e ' 500 ' -B 2  nginx.log | less;
}
find_top_10(){ 
awk '{print $1}' nginx.log | sort | uniq -c | sort -rn | awk 'NR<=10';
}
url_summary(){ 
less nginx.log | awk '{print $7}' | sed -e 's#^.*topics/[0-9]*#topics/int#g' | sed -e 's#[-A-Za-z0-9]*.png#id.png#g' | sed -e 's#[-A-Za-z0-9]*.jpg#id.jpg#g'; 
}
url_avg_time(){ 
less nginx.log | awk '$7=="/"{print $(NF-2)}' | awk 'BEGIN{$1=0}{s+=$1}END{print (s/NR)}';
}
top -b -d 1 -n 10 | grep -i 'Yundun$' | awk '{print $9,$10}{m+=$9;n+=$10}END{print  "";print m/NR,n/NR}'

find_error_log(){
awk ‘$9~/404|500/{print $9}’ nginx.log | sort | uniq -c ;
}
find_top_10(){
awk ‘{print $1}’ nginx.log | sort | uniq -c | sort -rn | awk ‘NR<=10’;
}
url_avg_time(){
less nginx.log | awk ‘$7=="/"{print $(NF-2)}’ | awk ‘BEGIN{$1=0}{s+=$1}END{print (s/NR)}’;
}

top -b -d 1 -n 10 | grep -i ‘Yundun$’ | awk '{print $9,$10}{m+=$9;n+=$10}END{print “”;print m/NR,n/NR}

find_error_log

编写一个函数 find_error_log()
找出log中的404 500的报错

find_error_log() {
#awk '$9~/404|500/{print $9}' nginx.log | sort | uniq -c
#grep -e " 500 "  -e " 404 " nginx.log |less
}

find_before

找出500错误时候的上下文,找出500错误的前两行,考察grep高级用法

find_before(){
# grep -e ' 500 ' nginx.log | awk '{print($7, $8)}’
}

find_top_10

找出访问量最高的ip, 统计分析,取出top10

find_top_10(){
# awk '{print $1}' nginx.log | sort | uniq -c | sort -rn | awk 'NR <= 10'
}

url_summary

找出访问量最高的页面地址 借助于sed的统计分析

  • /topics/16689/replies/124751/edit 把数字替换为 /topics/int/replies/int/edit
  • /_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large 变成 /_img/uploads/photo/2018/id.png!large
  • /topics/9497 改成 /topics/int
  • 其他规则参考如上

输出

  • url pattern对应的请求数量
  • 取出top 20请求量的url pattern

类似
nnn urlxxx
mmm urlxxx

url_summary(){

}

main_avg_time

统计访问首页路径 / 的平均响应时间

main_avg_time(){
# awk '{print $1}' nginx.log | sort | uniq -c | sort -rn | awk 'NR <= 10'
}

性能统计

打印阿里云盾进程的cpu、mem利用率与平均利用率。

[root@shell.testing-studio.com ~]$ top -b -d 1 -n 10 | grep -i yundun$ --line-buffered | awk '{c+=$9;m+=$10;print $9,$10}END{print "";print c/NR,m/NR}'
0.0 2.0
4.9 2.0
1.0 2.0
2.0 2.0
4.0 2.0
3.0 2.0
2.9 2.0
3.0 2.0
3.0 2.0
3.0 2.0

2.68 2

awk ‘$9~/404|500/{print $9}’ /tmp/nginx.log | sort | uniq -c