Linux三剑客实战-nginx日志分析

课程价值

  • 掌握linux的基本命令
  • 掌握shell的管道机制
  • 掌握三剑客的常见用法

大纲

  • linux数据统计基本命令 sort head tail uniq less vim
  • linux系统命令 ps top netstat
  • 实战环境

时长

60~90分钟

ppt

学习资料

  • 高级Bash脚本编程指南
  • LINUX与UNIX SHELL编程指南
  • 鸟哥的Linux私房菜
  • IBM DeveloperWorks
  • 阮一峰的《bash脚本教程》
  • Google

代码格式化

  • vs code
  • shell format插件

作业

演练数据

把/tmp/nginx.log文件复制到自己的主目录下,用来演练

223.104.7.59 - - [05/Dec/2018:00:00:01 +0000] "GET /topics/17112 HTTP/2.0" 200 9874 "https://www.googleapis.com/auth/chrome-content-suggestions" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/70.0.3538.75 Mobile/15E148 Safari/605.1" 0.040 0.040 .

实战内容

  • 日志数据检索
    • find_error_log 找出log中的404 500的报错 考察严谨性,某次训练没有一人做对
    • find_before 找出500错误时候的上下文 考察grep高级用法
  • 日志数据统计
    • find_top_10 找出访问量最高的ip 统计分析
  • 数据文件修改
    • url_summary 找出访问量最高的页面地址 借助于sed的统计分析

find_error_log

编写一个函数 find_error_log()
找出log中的404 500的报错 考察严谨性,某次训练没有一人做对

回复的时候按照这个格式

find_error_log() {
}

find_before

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

find_before(){
}

find_top_10

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


find_top_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(){

}

url_avg_time

计算出/topics页面的平均响应时间

url_avg_time(){

}

课后调查问卷

f 是函数
f ()
{
    echo ffff
}
find_error_log(){awk ‘$0~/404|500/ {print $0}’ }
egrep '(404) | (500) ' nginx.log
bash
find_error_log() { cat nginx.log |grep '404'|'500'}```

‘’'bash

find_error_log(){

cat ~/ngnix.log | grep 404

cat ~/ngnix.log | grep 500

}

‘’’

find_error_log()
{
grep 'HTTP/1.1" 404' nginx.log
grep 'HTTP/1.1" 500' nginx.log
}


{
cat nginx.log |awk '{if($9==404 || $9==500) print $0}'
}
find_error_log ()
{
    awk '$9~/404|500/' nginx.log | wc -l
}
find_top_10() { awk '{print $1}' nginx.log| sort | uniq -c | sort -r | head -10 }
find_top_10(){
awk '{print $1}' | sort | uniq -c | sort | awk 'NR=1 {print $1}'
}
find_top_10(){
cat nginx.log | awk -F " " '{print $3}'|sort|uniq -c|sort -nrk 1|awk -F " " '{print $2}' |head -10

}

find_top10 ()
{
    awk '{print $1}' nginx.log | sort | uniq -c | sort -rn | head -10
}
1 个赞
find_top_10() { awk $1 ngnix.log | sort | unique -l | head -10 }
find_top_10()
{
cat xx.txt | awk '{print $1}'| sort |uniq -c|sort -rn|awk 'NR<=10 {print $1}'
}
awk '{print $1} ' nginx.log |sort|uniq -c| awk '{if(NR<=10){print $1}}' nginx.log

find_top_10(){
cat nginx.log | awk ‘{print $1}’ | sort | uniq - c | sort - rn | head - 10
}

find_top_10(){
awk '{print$1}' nginx.log | sort |uniq -c|awk '{print$1,$2}'|sort -rn |head -10
}
url_avg_time(){
grep '/topics' nginx.log | awk '{a+=$32}END{print a/NR}'
}

url_avg_time()
{
cat nginx.log |awk 'BEGIN{total=0;count=0} / \/topics / {count+=1;total+=$(NF-1);print total} END{print total/count}'
}