日志分析常用指令简单介绍

大型分布式网站架构设计与实践的第四章的简单回顾

日志分析常用的指令:

  1. 查看文件的内容:cat,(适合日志文件比较大)cat –n install.log (-n表示显示行号)
  2. 分页显示文件:more,(cat缺少交互,只能用来查看,more可以更好的用来分页显示文件,Enter显示下一行,空格键显示下一页,按F键显示下一屏,B返回上一屏内容)  less是more更强大的交互工具
  3. 显示文件尾:tail,    tail  -n install.log (-n表示显示最后的行数) (-f 表示tail程序不退出,新写入的行会实时显示出来)
  4. 显示文件头:head,      head  -n install.log(-n表示显示最开始的行数)
  5. 内容排序 :sort ,  sort  –k  2  –t  ‘  ’  -n  -r  install.log (-k用来指定排序的列,这里指定的是第二列,-t用来指定列分隔符,这里的分隔符是空格,-n表示按照数字顺序排序,-r表示按照逆序排列)
  6. 字符统计:wc,  -l用来统计文件中的行数,-w用来统计文件中单词数,-c用来统计文件中的字节数,-L用来统计文件中最长的行的长度
  7. 查看重复出现的行:uniq,用来显示文件中行重复的次数,或者显示仅出现一次的行,或者仅显示重复出现的行,并且uniq的去重针对的只是连续的两行,因此常常与sort结合起来用,sort install.log | uniq –c (uniq去重显示,-c在每一行前面加上该行出现的次数,-u仅显示出现一次的行,-d仅显示重复的行)
  8. 字符串查找:grep, grep qq install.log (qq就是要匹配的字符串,-c统计匹配的行数,支持正则表达式查找)
  9. 文件查找:find,locate,whereis,which,find . –name install.log(find查找的当前路径下的名字为install.log的文件,find进行的是磁盘查找,locate是根据每个文件对应的数据库中的路径进行查找,whereis也是针对的文件对应的数据库中的路径进行查找,不过对应的二进制,which是根据系统环境变量路径查找)
  10. 表达式求值:expr,expr后面加上表达式就可以计算结果,不过*需要就进行转义,shell不识别*
  11. 归档文件:tar,-f指定包的名称,-c生成新的包,-t列出包里面的文件的名称
  12. URL访问工具:curl,
  13. 查看请求的访问量:                                                         如访问量排名前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
  14. 查看最耗时的页面:cat access.log | sort –k -2 –n –r | head -10
  15. 统计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 &not_found_line *  100 / $tatoal_line

日志分析脚本:

  1. 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指定)
  2. 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程序写到文件里
  3. shell
原文地址:https://www.cnblogs.com/wzyxidian/p/5460953.html