对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很难的,无论多么厉害的程序员,他写过的代码不可能完全没有问题。而且有些时候,在线上发生问题的时候,我们大部分时间都用在排查并定位问题上了。一个问题可能解决起来也就是几分钟,但是排查起来却要花费几个小时。
在日常工作中,如果我们遇到线上问题,一般的处理步骤应该是先保留现场,然后再考虑回滚,之后再是解决问题。那么,保理现场保留的是什么的?至少要包括当时机器上面的线程的dump、堆内存的dump还有最重要的就是日志。因为很多时候,日志可能是我们了解程序执行的唯一途径。
有了日志,还要掌握一些命令,才能更好的、更高效的定位问题,因为一旦发生线上问题的时候,真的是分秒必争。本文,为你总结了几个常用的命令和简单用法,以及几个小案例来运用这些命令。
在介绍之前我还要强调一点,有很多朋友说,我不需要会这么多命令,一个vim(vi)命令就够我用了,请不要在服务器上直接对日志文件进行vim(vi)操作,这样可能会导致机器直接挂掉。
cat 查看文件的内容
cat命令是一个显示文本文件内容的便捷工具,如果一个日志文件比较小,可以直接使用cat命令将其内容打印出来,进行查看,但是,对于较大的日志文件,请不要这样做,打开一个过大的文件可能会占用过多的系统资源,从而影响系统对外的服务。
命令格式:
cat [选项] [文件]...
more 分页显示文件
cat的缺点在于,一旦执行后,便无法再进行交互和控制,而more命令可以分页的展现文件内容,按enter键显示文件下一行,按空格键便显示下一页,按 f键显示下一屏内容,按b键显示上一屏内容。
命令格式:
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]
less 分页显示文件
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup] [pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
命令格式:
less [参数] 文件
tail 显示文件尾
使用tail命令能够查看到文件最后几行,这对于日志文件非常有效,因为日志文件常常是追加写入的,新写入的内容处于文件的末尾位置。
使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.
命令格式;
tail[必要参数][选择参数][文件]
head 显示文件头
与tail命令类似,但是不同的是head命令用于显示文件开头的一组行。
命令格式:
head [参数]... [文件]...
sort 内容排序
一个文件中包含有众多的行,经常需要对这些行中的某一列进行排序操作, sort命令的作用便是对数据进行排序。
命令格式:
sort [参数][文件]
wc 字符统计
wc命令可以用来统计指定文件中的字符数,字数,行数,并输出统计结果。
命令格式:
wc [选项]文件...
uniq 查看重复出现的行
uniq命令可以用来显示文件中行重复的次数,或者显示仅出现一次的行,以及仅仅显示重复出现的行,并且,uniq的去重针对的只是连续的两行,因此它常常与sort结合起来使用。
命令格式:
uniq[选项][参数]
curl URL访问工具
要想在命令行下通过HTTP协议访问网页文档,就不得不用到一个工具,这便是curl,它支持HTTP,HTTPS,FTP,FTPS,Telnet等多种协议,常被用来在命令行下抓取网页和监控WEB服务器状态。
命令格式:
curl [option] [url]
查看请求访问量
对于在线运行的系统来说,常常会碰到各种不怀好意的恶意攻击行为,其中比较常见的便是HTTP flood,也称为CC攻击。如何能够快速的定位到攻击, 并迅速响应,便成为开发运维人员必备的技能。定位问题最快捷的办法,便是登录到相应的应用,查看访问日志,找到相应的攻击来源,如访问量排名前10的ip地址:
cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10
页面访问量排名前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页面占比
对于请求的返回码,有些时候也是需要关注的,比如,如果404请求占比过多, 要么就是有恶意攻击者在进行扫描,要么就是系统出现问题了,同样,对于 500的请求也是如此,可以通过如下命令来查看404请求的占比:
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 / $total_line
更多的需要结合linux的一些命令