大型分布式网站架构设计与实践的第四章的简单回顾
日志分析常用的指令:
- 查看文件的内容:cat,(适合日志文件比较大)cat –n install.log (-n表示显示行号)
- 分页显示文件:more,(cat缺少交互,只能用来查看,more可以更好的用来分页显示文件,Enter显示下一行,空格键显示下一页,按F键显示下一屏,B返回上一屏内容) less是more更强大的交互工具
- 显示文件尾:tail, tail -n install.log (-n表示显示最后的行数) (-f 表示tail程序不退出,新写入的行会实时显示出来)
- 显示文件头:head, head -n install.log(-n表示显示最开始的行数)
- 内容排序 :sort , sort –k 2 –t ‘ ’ -n -r install.log (-k用来指定排序的列,这里指定的是第二列,-t用来指定列分隔符,这里的分隔符是空格,-n表示按照数字顺序排序,-r表示按照逆序排列)
- 字符统计:wc, -l用来统计文件中的行数,-w用来统计文件中单词数,-c用来统计文件中的字节数,-L用来统计文件中最长的行的长度
- 查看重复出现的行:uniq,用来显示文件中行重复的次数,或者显示仅出现一次的行,或者仅显示重复出现的行,并且uniq的去重针对的只是连续的两行,因此常常与sort结合起来用,sort install.log | uniq –c (uniq去重显示,-c在每一行前面加上该行出现的次数,-u仅显示出现一次的行,-d仅显示重复的行)
- 字符串查找:grep, grep qq install.log (qq就是要匹配的字符串,-c统计匹配的行数,支持正则表达式查找)
- 文件查找:find,locate,whereis,which,find . –name install.log(find查找的当前路径下的名字为install.log的文件,find进行的是磁盘查找,locate是根据每个文件对应的数据库中的路径进行查找,whereis也是针对的文件对应的数据库中的路径进行查找,不过对应的二进制,which是根据系统环境变量路径查找)
- 表达式求值:expr,expr后面加上表达式就可以计算结果,不过*需要就进行转义,shell不识别*
- 归档文件:tar,-f指定包的名称,-c生成新的包,-t列出包里面的文件的名称
- URL访问工具:curl,
- 查看请求的访问量: 如访问量排名前10的IP地址: cat access.log | cut –f1 –d “ “ | sort | uniq –c | sort –k 1 –n –r | head -10 页面的访问量排名前十url: cat access.log | cut –f4 –d “ ” | sort | uniq –c | sort –k 1 –n –r | head -10
- 查看最耗时的页面:cat access.log | sort –k -2 –n –r | head -10
- 统计404请求的占比:使用awk指令 export total_line=’wc –l access.log |cut –f1 –d “ “’ &&export not_found_line=’awk ‘$6==’404’{print $6}’ access.log | wc –l’ && expr ¬_found_line * 100 / $tatoal_line
日志分析脚本:
- sed编辑器:sed,sed是流编辑器,并且sed并不会修改文件本身,除非使用重定向存储文件,所以sed是比较安全的。 sed “s/xxx/yahoo/” access.log | head -10(s表示把旧的字符串xxx替换成新的yahoo) sed -n “2,6p” access.log (-n表示只输出指定的行,2,6p表示打印第二行到第六行之间的行) sed “/qq/d” access.log(d表示文件的删除行指令,将包含qq的行删掉) sed “=” access.log (=用来显示文本的行号) sed –e “ihead” access.log (i用来在行首插入内容,ihead在每行前面都插入head) sed –e “aend” access.log(a用来在行尾追加内容,aend表示在每行后面追加end) sed –e “/google/chello” access.log(c替换操作,查找包含google的行,用hello替换) sed –n “1,5p;1,5=” access.log(把多行指令合并,用分号隔开,打印一到五行,并显示行号) sed –n –f test access.log还可以把指令写到文件里(指令都写到了test文件,用-f指定)
- awk程序,可以提供一种编程语言来进行查询 awk ‘{print $1}’ access.log(print用来格式化输出,支持转义字符,$1表示第一列) awk ‘/google/{print $5,$6}’ access.log | head -10(包含google行,然后打印他的第五、六列) awk ‘length($0)>40 {print $3}’ access.log | head -10 $0表示当前行,length($0)用来获取当前行的长度,然后打印出符合条件的行的第三列 也可对内容格式化输出,也可以将awk程序写到文件里
- shell