日志分析常见命令

  日志中包含了程序在遇到异常状况所打印的堆栈信息,访间用户IP地址、请求url、应用响应时间、内存垃圾回收信息,以及系统开发者在系统运行过程当中想打印的任何信息。经过异常堆栈,能够定位到依赖的谁宕机了,产生问题的程序bug的行,对异常进行修复;经过访问IP和请求url和参数,排查是否遭到攻击,以及攻击的形式;经过应用的响应时间、垃圾回收,以及系统load来判断系统负载,是否须要增长机器;经过线程dump,判断是否死锁及线程阻塞的缘由;经过应用的GC (Garbage Collection, 即内存回收)日志,对系统代码和JVM内存参数进行优化,减小GC次数与stop the world时间,优化应用响应时间。正则表达式

  而想要经过日志分析得出系统产生问题的缘由,首先咱们须要熟悉日志分析的相关命令和脚本从日志中筛选出有价值的内容编程

1.常见命令

cat命令查看文件内容

若是日志文件较小能够直接用cat命令打印出来,若是日志文件较大请不要这样作,打开一个过大的文件可能会占用大量的系统资源,从而影响系统的对外服务服务器

 cat 文件名  less

cat -n 文件名 能够查看行号curl

 more和less分页显示文件

cat缺点在于:一旦执行没法进行交互和控制,more能够分页的展现文件工具

按Enter键显示文件下一行

按空格键即是下一页

F键显示下一屏内容

B键显示下一屏内容

另外一个 less 命令在于它能够支持内容查找优化

 输入/user便可url

tail查看文件尾

由于日志通常都是以追加的形式写入的,新写的内容通常都在文件末尾处spa

 -n 参数后跟的数字表示显示文件最后几行,若是为4则显示文件最后四行命令行

 -f 可让程序不退出,而且持续的显示文件新增的行

 head查看文件头

与tail相似

 sort 内容排序

sort默认是按照字符串顺序排序的

 -n 按照数字排序

 -r 按照逆序排列

 -k 指定排序的列

 -t 指定列分隔符

实例:

先cat一下咱们的文件,能够看到数字是无序的

 咱们使用 sort -n  和 sort -n -r 能够发现文件进行了一次增序和降序的排序 

 为了熟悉 -k  和 -t 我本身写了一个例子

一样是先cat一下文件,咱们的目的是要根据第二列的数字进行排序

 咱们就能够输入 sort -k 2 -t ' ' -n b.txt ,就是对第二列的数据进行排序,经过空格来区分列

 wc字符统计

 wc -l 查看文件的行数

wc -c 查看文件包含的字节数

 wc -L 查看文件中最长的行的长度

 wc -w 查看文件中有多少个单词

uniq 查出重复的行

uniq能够用来显示文件中行重复的个数,或者显示仅出现一次的行,以及仅仅显示重复的行

uniq去重针对的仅是连续的两行,所以他常常和sort一块儿用

 以上是文件内容

经过sort排序,再经过uniq去重统计

 -c 在每行前加上出现的次数

 -u 显示只出现一次的行

 -d 展现出现重复的 行

grep字符串查找

  grep 能够查找文件中符合条件的字符串,若是文件内容符合就会把这行打印

   grep -c  显示查找到的行号

grep的查找也支持正则表达式例如查找u开头r结尾的字符串

find文件查找

若是只知道文件名称不知道,文件路径那咱们就须要 find 命令了

 咱们也能够查找以txt结尾的文件

 咱们还可使用find命令递归的打印当前目录

 find . -print 

 expr表达式求值

实际操做中,尝尝须要对表达式进行求值,使用expr指令,可以对运算表达式或者字符串进行运算求值

注意:乘法运算时须要用反斜杠(\)对 *进行转义

 

 

 URL访问工具

想在命令行下经过http协议访问网页文档,就要用到 curl 工具,它支持HTTP,HTTPS,FTP,Telnet等多种协议,常被用来在命令行下抓取网页和监控Web服务器状态

这里仅简单的介绍他一些经常使用的用法好比发起网页请求

 

 加上 -i 返回带header的文档

  -I 只返回header信息

 

2.实际需求

单条命令仍是没法成气候的,须要将命令组合起来来使用才会更有效率

好比说咱们的日志是这样的(数据都是伪造的)

 

174.119.232.29 GET www.xxx1.com 404 12312
174.119.232.29 GET www.xxx2.com 200 657
174.119.124.30 GET www.xxx1.com 500 123
174.119.232.30 GET www.xxx3.com 200 1421
174.119.232.30 GET www.xxx4.com 301 4554
174.646.232.29 GET www.xxx4.com 404 45
174.546.232.29 GET www.xxx2.com 302 123
174.453.232.34 GET www.xxx1.com 303 4345
174.119.232.29 GET www.xxx5.com 404 753
174.123.232.29 GET www.xxx1.com 404 78678
174.119.232.36 GET www.xxx5.com 400 764
174.546.232.29 GET www.xxx8.com 200 43
174.546.232.29 GET www.xxx3.com 200 123
174.567.232.78 GET www.xxx2.com 200 786
174.119.232.29 GET www.xxx5.com 404 786
174.119.232.83 GET www.xxx7.com 404 7673
174.453.232.72 GET www.xxx1.com 200 37
174.119.232.50 GET www.xxx9.com 404 767
174.534.232.96 GET www.xxx1.com 200 112

1.查看请求访问量

查找访问量前五的ip地址

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

2.查看最耗时最多的页面

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

2.awk程序

awk可以提供一个相似于编程的开放环境,可以让你自定义文本处理的规则,修改和从新组织文件中的内容

awk通用格式:

 awk [option] 'pattern {action}' file 

option: 命令的选项

pattern:行匹配规则

action: 具体执行的操做

file: 文件

若是没有pattern,则对全部行执行action,而若是没有action,则打印全部行

例如:

1.打印文件指定的列

 awk '{print $1}' access.log | head -10 

 

 awk 默认用空格将一行分割成多个列,能够用 -F 指定列的分隔符

2.使用/xxx1/查找包含xxx1的行,并打印3,4列

 awk '/xxx1/{print $3,$4}' access.log |head -10 

 3.查找length大于等于40的行,并打印他的第5列

 awk 'length($0)>=40{print $5}' access.log |head -5 

$0表明当前行,length($0)即当前行长度 

4.对内容进行格式化输出

 awk '{line=sprintf("methodType:%s,responseCode:%s,responseTime:%s", $2,$4,$5);print line}' access.log |head -10  

 定义一个line的变量,用于接收sprintf的输出,打印line

 

awk最厉害的一点即是支持编程的方式来处理文本,咱们能够简单操做一下

1.建立一个文件

2.将以前的命令拷到里面去

 3.经过 -f 咱们能够指定包含文本处理程序的脚本文件(因为灵活的编程功能,因此提供了无限的扩展空间)

 4. awk -f script access.log |head -10 

 

 固然这里也就是简单的介绍了awk的一些简单功能,若是要所有掌握就得本身找资料去了解了,但这些简单的功能也足够让咱们看出他的强大

相关文章
相关标签/搜索