67

Java开发必须掌握的日志分析命令

 4 years ago
source link: https://www.tuicool.com/articles/AfYfyaA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很难的,无论多么厉害的程序员,他写过的代码不可能完全没有问题。而且有些时候,在线上发生问题的时候,我们大部分时间都用在排查并定位问题上了。一个问题可能解决起来也就是几分钟,但是排查起来却要花费几个小时。

在日常工作中,如果我们遇到线上问题,一般的处理步骤应该是先保留现场,然后再考虑回滚,之后再是解决问题。那么,保理现场保留的是什么的?至少要包括当时机器上面的线程的dump、堆内存的dump还有最重要的就是日志。因为很多时候,日志可能是我们了解程序执行的唯一途径。

有了日志,还要掌握一些命令,才能更好的、更高效的定位问题,因为一旦发生线上问题的时候,真的是分秒必争。本文,为你总结了几个常用的命令和简单用法,以及几个小案例来运用这些命令。

在介绍之前我还要强调一点,有很多朋友说,我不需要会这么多命令,一个vim(vi)命令就够我用了,请不要在服务器上直接对日志文件进行vim(vi)操作,这样可能会导致机器直接挂掉。

aiMja2r.jpg!web

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' 

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK