Linux 日志分析实战

日志结构分析

Linux 日志分析实战

文章插图
分析日志状态码所在位置为第九个
遍历取出第一行日志的每个字段
取出第一行日志awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' Nginx.log
Linux 日志分析实战

文章插图
 
for循环取出每个字段awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' nginx.log
Linux 日志分析实战

文章插图
 
练习1找出所有404和500的错误日志,统计错误日志的行数
使用正则筛选出404 和500的类型的状态码,管道拼接统计总个数完整命令 :cat nginx.log | awk '{print $9}' | grep -E '404|500'|wc -l解法2:使用awk 直接匹配第九个是400/500的状态码的值,awk 理论上可以替代grep awk 'pattern{action}'awk 'BEGIN{} END{}’开始和结束awk ' /Running/’正则匹配awk ' / aa/ ,/bb/'区间选择用法 :cat nginx.log | awk '/ 404 | 500 /{print $9}' | wc -lawk '$2~/xxx/'字段匹配用法:awk '$9~/404|500/{print $9}' nginx.log | wc -lawk 'NR==2'取第二行awk 'NR>1’去掉第一行使用t+1自增 计算统计: awk '$9~/404|500/{t+=1}END{print t}' nginx.log
Linux 日志分析实战

文章插图
 
练习2:统计IP访问量(独立ip访问数量)
# 打印所有ip,sort- u 去重排序,wc-l 统计总共数目awk '{print $1}' nginx.log |sort -u |wc -l
Linux 日志分析实战

文章插图
【Linux 日志分析实战】 
练习3:查看某一时间段的IP访问量(1-2点)
查找出排序,unqi-c去重grep "05/Dec/2018:0[1-2]" nginx.log|' | sort | uniq -c| sort -nr | wc -l简洁版: grep "05/Dec/2018:0[1-2]" nginx.log | awk '{print $1}|sort -u |wc -l
Linux 日志分析实战

文章插图
 
练习4:查看访问最频繁的前10个IP
查找ip 去重后,倒序排序,展示前10个awk '{print $1}' nginx.log |sort -n |uniq -c|sort -rn| head -10
Linux 日志分析实战

文章插图
 
练习5查看访问100次以上的IP
#去重找到所有ipi地址,awk 判断 将大于100的访问次数打印后降序排序awk '{print $1}' nginx.log |sort -n |uniq -c|awk '{if($1>100) print $0}'| sort -rn
Linux 日志分析实战

文章插图
 
练习6找出名称为 /topics 的平均响应时间,响应时间在倒数第二个字段
Linux 日志分析实战

文章插图
得知/topics 所在为第7个字段
#算出全部响应时间 为倒数第二个字段: total和为{total+=$(NF-1),总次数为自增数据less nginx.log | awk '$7=="/topics"{total+=$(NF-1);count+=1}END{print total/count}' nginx.log
Linux 日志分析实战

文章插图
响应时间在倒数第二个字段
练习7找出访问量最高的页面地址 借助于sed的统计分析
根据日志分析的页面的地址,需要使用sed -E s (-e script 指定sed编辑命令 )替换
查找替换: s /REGEXP/REPLACEMENT /[FLAGS]
将第2替换为x:echo 1234 | sed 's#2#x#'
将第2和3替换为xecho 12433 | sed 's#[2-3]#x#g'
分组匹配与字段提取:sed 's#([0-9]*)l([a-z]*)#1 2#'
语法解析
Linux 日志分析实战

文章插图
未替换前语句
使用 sed -E 's#[0-9]{4,}'#_id_#' ' 将第四位的数字替换为_id_(注:s后的符号可以跟任意符号)
Linux 日志分析实战

文章插图
 
- /topics/16689/replies/124751/edit 把数字替换为 /topics/_id_/replies/_id_/edit- /_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large 变成 /_img/uploads/photo/2018/_id_.png!large - /topics/9497 改成 /topics/_id_ - url中的query可以去掉 - 其他规则参考如上awk '{print $7}' nginx.log |sed -E//替换字母数字编码的图片前缀为_id_-e 's#/[0-9]*/[a-z0-9-]*.(png|gif|jpeg|jpg).*#/_id_/_id_.image#'//替换问号和感叹问为空-e 's#[?!].*##'-e 's#/(topics|replies|avatar)/[0-9]{1,}#/1/_id_#g'// 替换topics|followers|following|favorites|replies|columns|reward|calendar|people 字段后的id-e 's#/[^/]*/(topics|followers|following|favorites|replies|columns|reward|calendar|people)#/_uid_/1#'-e 's#^/[^/]*$#/_top_#'-e 's#/topics/node[0-9]*#/topics/node#' |sort | uniq -c | sort -nr }


推荐阅读