Linu常用日志分析实战
2024-09-06 20:27:34
日志结构分析
分析日志状态码所在位置为第九个
遍历取出第一行日志的每个字段
//取出第一行日志
awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' nginx.log
for循环取出每个字段
awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' nginx.log
练习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 -l
awk '$2~/xxx/'字段匹配
用法:awk '$9~/404|500/{print $9}' nginx.log | wc -l
awk 'NR==2'取第二行
awk 'NR>1’去掉第一行
使用t+1自增 计算统计: awk '$9~/404|500/{t+=1}END{print t}' nginx.log
练习2:
统计IP访问量(独立ip访问数量)
# 打印所有ip, sort- u 去重排序,wc-l 统计总共数目
awk '{print $1}' nginx.log |sort -u |wc -l
练习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
练习4:
查看访问最频繁的前10个IP
查找ip 去重后,倒序排序,展示前10个
awk '{print $1}' nginx.log |sort -n |uniq -c|sort -rn| head -10
练习5
查看访问100次以上的IP
sort 排序 sort -n 按数字排序 sort-r 反转
uniq 去重 uniq -c 去重并统计重复次数
head -3 头三个 tail -3 尾三个
#去重找到所有ipi地址,awk 判断 将大于100的访问次数打印后降序排序
awk '{print $1}' nginx.log |sort -n |uniq -c|awk '{if($1>100) print $0}'| sort -rn
练习6
找出名称为 /topics 的平均响应时间,响应时间在倒数第二个字段
得知/topics 所在为第7个字段
#算出全部响应时间 为倒数第二个字段: total和为{total+=$(NF-1) ,总次数为自增数据
less nginx.log | awk '$7=="/topics"{total+=$(NF-1);count+=1}END{print total/count}' nginx.log
响应时间在倒数第二个字段
练习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#'
语法解析
未替换前语句
使用 sed -E 's#[0-9]{4,}'#_id_#' ' 将第四位的数字替换为_id_(注:s后的符号可以跟任意符号)
- /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
}
练习7
性能统计脚本 perf_avg, 统计Linux进程中 AliYunDun 进程的cpu与mem,持续统计20s,每秒输出一下即时的cpu与mem的利用率,并在最后结束时候给出cpu与mem的平均值
//使用top -b 高亮展示当前进程,-d 1 每1s更新一次,-n 更新为3次
top -b -d 1 -n 3
// grep 实时取出数据,
grep --line-buffered -i aliyundun$
//计算cpu与mem的利用率
cpu=$(NF-3);mem=$(NF-2);cpu_total+=cpu;mem_total+=mem;
//完整语句
top -b -d 1 -n 3 | grep --line-buffered -i aliyundun$ |
awk
//先打印抬头
'BEGIN{OFS="\t";print "CPUf", "MEM"}
{cpu=$(NF-3);mem=$(NF-2);print cpu,mem;cpu_total+=cpu;mem_total+=mem;
}
//最后打印数据
END{print "\navg:" ;print cpu_total/NR, mem_total/NR}'
练习8:
网络连接数统计 net_avg
// 查看网络进程
netstat -tnp
//获取 ip 和监听状态
awk '{print $4,$6}'
//打印端口 号
awk -F : '{print $2}'
//完整命令
netstat -tnp |awk '{print $4,$6}'|awk -F : '{print $2}'|sort| uniq -c
优化
去除上图多余字段
//去除前两行数据
sed 1,2d
//完整
netstat -tnp |sed 1,2d | awk '{print $4,$6}' | awk -F: '{print $2}' | sort | uniq -c | sort -nr
最新文章
- 关于刷Sylvain/burst_ind分支的一些问题解答
- 一些CSS";bug";
- lintcode:Flip Bits 将整数A转换为B
- JavaScript 中 typeof 知多少?
- 【转】android开发工具Eclipse,androidStudio,adt网盘下载--不错
- 【39】明智而审慎第使用private继承
- Android应用换肤总结
- MyBatis(5):MyBatis集成Spring事务管理(上)
- Linux 开机报 or type Control-D to continue
- 关于Apache+PHP+MySQL的安装
- ceph理论及部署配置实践
- hadoop(二)
- Unity3D-Shader-热扭曲效果
- Urban Elevations UVA - 221
- C++ delegate的几种方法
- VirtualBox运行出现“0x00000000指令引用的0x00000000内存。该内存不能为written” ,错误解决
- 整合Spring和SpringMVC
- 【做题】agc002D - Stamp Rally——整体二分的技巧
- 【转】「Chris Richardson 微服务系列」微服务架构的优势与不足
- 让手机连接到指定的WIFI网络,适用于之前已经连过的网络
热门文章
- 开机时自动启动的AutoHotkey脚本 2019年10月09日
- 痞子衡嵌入式:ARM Cortex-M内核那些事(9.1)- 存储保护(MPU - PMSAv6/7)
- 自学linux——5.网络设置
- [GXYCTF2019]Ping Ping Ping(ping命令执行绕过Waf)
- Bugku-login1(SKCTF)(SQL约束攻击)
- C语言运算符(杂项运算符 ↦ sizeof &; 三元)
- Spring Cloud Alibaba - SkyWalking
- arraycopy将数组分为两部分时游标的设置方法
- DVWA(一):关于DVWA的基本介绍
- PS与CSS字间距转换