大型分布式网站之日志分析

现在大部分公司在线的应用服务器采用的都是linux或Unix操作系统,因此一些常用的shell明了,会让我们更牛逼,一些较为基础的入门级的命令如:ls,cp,mv,rm,mkdir,touch等

1.查看文件的内容

 cat命令是一个现实文本文件内容的便捷工具,如果一个日志文件比较小,可以直接使用cat命令将其内容打印出来进行查看,

 cat access.log

 124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004

 124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004

 ...

 cat -n  access.log  参数-n ,可以显示行号

 1  124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004

 2  124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004

 ...

2. cat的缺点在于,一旦执行后便无法再进行交互和控制,而more命令可以分页的展现文件内容,按enter键显示文件下一行,按空格键便显示下一页,按F键显示下一屛内容,按B键显示上一屛内容

 more access.log

  124.119.223.36 455 GET www.xxx.com/list.html www.xx.com 404 432004

  124.119.223.36 230 GET www.xxx.com/list.html www.xx.com 500 432004

   ...

   More

   另外一个命令less提供比more更丰富的功能,支持内容查找并且能高亮显示

   less access.log

  3. 显示文件尾

  使用tail命令能够查看到文件最后几行,这对于日志文件非常有效,很多时候日志文件是追加写入的,新写入的内容出于文件的末尾位置。

  tail -n1 access.log

  -n 参数后面跟的数字表示显示文件最后几行,此处为2,表示显示文件最后2行,制定-f参数让tail程序不退出并且持续显示文件新增加的行

  tail -n2 -f access.log

4.显示文件头

   与tail命令类似,head命令用户显示文件开头的一组行

   head -n2 access.log

  -n 参数用来制定显示文件开头的几行,此处为2,表示显示access.log的开头2行

5.内容排序

 一个文件中包含众多的行,经常需要对这些诶行中的某一列进行排序操作,sort命令作用便是对数据进行排序。

 cat sortfile

5

90

2

5

7

9

12

343

432

 sort -n sortfile

2

5

5

7

9

12

...

通过cat命令查看sortfile文件中数字是无序的,而通过 sort -n命令查看,数字是从小到大排好序的

 6. 字符统计

wc 命令可以用来统计指定文件中的字符数,字数,行数并输出统计结果

 wc  -l access.log

 11001 access.log

 使用-l参数来统计文件中的行数,上面显示日志文件有11001行

 wc -c access.log  // -c 参数能够显示文件的字节数,

 781633 access.log

7. 查看重复出现的行

 uniq命令可以用来显示文件中行重复的次数,或者显示仅出现一次的行,以及仅仅显示重复出现的行,并且

uniq的去重针对的只是连续的两行,因此常常与sort结合使用

 cat uniqfile

 aaa

 bbb

 ccc

上面内容未排序,用过sort排序后再通过uniq去重统计

  sort uniqfile | uniq -c

 3 aaa

 4 bbb

 1 ccc

-c 参数用来在每一行最前面加上改行出现的次数

展现仅出现一次的行:

 sort uniqfile | uniq -c -u

 1 ccc

 1 eee

加上参数 -u 便只会显示出现一次的行。

 8.字符串查找,也是我们查询日志最常用到的命令+++

使用grep命令可以查找文件中符合条件的字符串,如果发现文件内容符合指定查找字符会将该行打印出来

  grep qq access.log

 124.119.20.23 GET www.xxx.com/list.html www.qq.com 404 432004

 124.119.29.30 GET www.xxx.com/list.html www.qq.com 500 432004

qq为指定的查找字符,而access.log是文件名称

使用 -c 参数,可以显示查找到的行数

 grep -c qq access.log

 2262

9. 文件查找

 常常需要修改一个文件,而只知道文件名称不知道文件路径或者需要查找一个文件的路径,这时就需要使用文件查找命令find

 $ find /home/longlong -name access.log

 /home/longlong/temp/access.log

在/home/longlong路径下查找文件名为access.log的文件,查找到的文件路径为 /home/longlong/temp/access.log

查找以 txt后缀结尾的文件

 $ find /home/longlong -name "*.txt"

/home/longlong/active-cpp/test/test1.txt

/home/longlong/active-cpp/test/test2.txt

还可以使用find命令,递归打印当前目录的所有文件

 $ find . -print

10 URL 访问工具

 要想在命令行下通过HTTP协议访问网页文档需要用curl,它支持HTTP,HTTPS,FTP,FTPS,Telnet等多中协议,常被用来在命令行下抓取网页和监控Web服务器状态。

发起网页请求:

 $ curl www.baidu.com

<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8">

11. 查看请求访问量

 如访问量排名前10的IP地址

 $ cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10

 1455 174.119.232.29

 1437 124.119.22.59

页面访问量排名前10的url

 $ cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10

 2280 www.xxx.com/list.html

 2236 www.xxx.com/info.html

命令之间使用管道连接起来,摘取访问日止为恩建中指定的列,排序去重后,再按照出现次数进行反向排序,取其中前10条记录

12. 查看最耗时的页面

 对于我们开发人员来说,页面的响应时间是非常值得关注的,我们经常需要将响应慢的页面找出来进行优化:

 $ cat access.log | sort | -k 2 -n -r | head -10 

 174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 404 2789

 174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 301 49397

 174.119.232.29 740 POST www.xxx.com.userinfo.html www.taobao.com 200 432004

 174.119.232.29 740 POST www.xxx.com.userinfo.html www.sina.com 500 48243

access.log 文件的第二行为页面的响应时间 用过sort按照第二行逆序后,再通过head命令取出排名前10的页面

猜你喜欢

转载自chenhaibo0806999.iteye.com/blog/2300219
今日推荐