【项目问题排查】
【项目问题排查】
- 1. 整体分析思路
- 1.1 针对技术栈可以排查问题的命令
- 1.2 两种分析问题的视角
- 1.3 常规排查思路
- 1.4 诊断工具分类
- 1.5 故障定位系列
- 2. 如何正确高效的看日志
- 2.1 cat head tail less grep 命令
1. 整体分析思路
1.1 针对技术栈可以排查问题的命令
1.2 两种分析问题的视角
1.3 常规排查思路
1.4 诊断工具分类
1.5 故障定位系列
2. 如何正确高效的看日志
常见的查看日志的命令
2.1 cat head tail less grep 命令
-
cat
命令用于将文件内容输出,因此:
① 只适合看小文件,如配置文件
② 不适合看日志等大文件,容易造成刷屏,也常用于配合其他文本命令在管道中使用。 -
head
命令用于查看文件前几行。 -
tail
命令用于查看文件后几行,-f
不断查看新内容。
-
vim
命令,它是一个文本剪辑器,因此
① 适合编辑小文件,如配置文件。
② 不适合看日志等大文件,因为vim
会将文件内容全部加载到内存中,容易内存溢出。
-
less/more命令
less或more命令是一个文件分页查看器,因此:
① 由于它可按需加载文件数据到内存,因此它可以查看打日志,不会内存溢出。
② 一般推荐less,相比于more做了许多功能的增强,如可查看压缩包等。
③ less 命令可以直接查看压缩包,常用于检查jar包打开是否正常。
④ less过滤显示内容,比如内核日志中经常有一些可忽略的错误,less查看时可以过滤掉。
-
grep 命令
① 如果我们配合tail命令,还可以实时查看日志中正在产生的错误。tail -f app.log | grep -i error
② 如果像忽略掉某个错误,则可以使用-v来忽略,忽略多个使用多个-e
即可。
tail -f app.log | grep --line-buffered -i error | grep -v -e reset
--line-buffered
实时输出匹配结果,不缓存(非常重要)
-i
忽略大小写(error, Error, ERROR 都能匹配)| grep -v -e reset
再排除包含 “reset” 的行
-v
反向匹配:排除匹配的行
-e reset
匹配表达式 “reset”③ 查看匹配上内容前后行
-A 10
: 匹配行后的10行也输出
-B 10
: 匹配行前的10行也输出
-C 10
: 匹配行前后的10行都输出④
tac
命令可实现文件倒序输出,结合grep
可实现倒序搜索最近的日志。
tac app.log | grep -m 10 -i error
tac: 文件倒序读取输出。
-m 10: 查询到10条匹配结果就结束。
-
awk命令
awk
是为文本处理而生的脚本语言,与grep/sed
的区别是,awk会将行拆分为列,语法如下:
awk 'Begin{action} patteren1{action} patteren2{action} END{action}' app.log
awk
先执行BEGIN中的代码,然后每一行都会检查是否匹配patteren
若匹配则执行响应的action,待所有行处理完,再执行END中的代码,如下:
特殊case,当RS等于空时,表示按段分隔记录,常用于搜索异常栈。