Linux系统应用日志问题排查方法

作者:动易软件 来源:网络 点击数: 发布时间:2024年03月17日

场景一:过滤出关键字附近的日志

因为通常时候我们用grep拿到的日志很少,我们需要查看附近的日志.
套路:按行号查看,过滤出关键字附近的日志

首先,得到关键日志的行号,
cat -n test.log | grep "error"  

如得到"error"关键字所在的行号是102行。此时如果我想查看这个关键字前10行和后10行的日志:
cat -n test.log |tail -n +92|head -n 20
tail -n +92 表示查询92行之后的日志
head -n 20 表示在前面的查询结果里再查前20条记录

显示行号,分页查看,使用空格翻页(使用more/less)
cat -n test.log | grep "error" | more


场景二:查看指定时间段内的日志

由于应用日志太多,通常我们只想查看某个时间段的日志。
套路:
sed -n '/2020-02-20 17:00:/,/2020-02-20 17:10:/p' app.log
sed -n '/2020-02-20 17:00:00/,/2020-02-20 17:10:00/p' app.log

这个需要注意的地方是17:00:00或者17:00必须出现过。如果没有任何日志出现,通过如下命令请先查看是否存在。
grep "2020-02-20 17:10:00" app.log


场景三:查看日志中特定字符的匹配数目

我们有时候想查看下,某个错误出现了多少次。
套路:统计整个文件出现的error次数。
grep "error" test.log | wc -l

统计指定时间内,该日志文件中的出现错误的次数。
sed -n '/2020-02-21 00:00:/,/2020-02-21 17:10:/p' app.log  | grep 'error' | wc -l


场景四:实时查看日志

我们上下游之间进行联调时,需要实时查看日志。比如接口是否被调用,消息有没有接收到,等等。
套路:
tail -f test.log

默认只能查看10行数据,如果要看更多,比如说100行,可以通过如下命令。
tail -100f test.log
tailf -100 app.log


场景五:查询最后100行,并查找关键字“error”

在服务器部署应用启动报错的时候,通常因为某些错误导致应用直接中断,可能会用到下面的命令,只查看最近的错误日志信息。
套路:
tail -n 100 test.log | grep 'error'

关键字文字标红,你值得拥有。
tail -n 100 test.log | grep 'error' --color

查询最后100行,并查找关键字“error”,文字标红,上下扩展两行
tail -n 20 test.log | grep '结果' --color -C2

类似参数说明:
-A: 显示匹配行及前面多少行, 如: -A3, 则表示显示匹配行及前3行
-B: 显示匹配行及后面多少行, 如: -B3, 则表示显示匹配行及后3行
-C: 显示匹配行前后多少行, 如: -C3, 则表示显示批量行前后3行


场景六:日志文件超大时,使用vim查找

有时候文件内容太多,通过过滤不太好定位出具体的错误信息,我们不妨使用vim来查看。
套路:先用vim命令打开文件
vim test.log 

然后进行相应操作,比如说下面几个常规使用方法。
跳到文本的最后一行:按“G”,即“shift+g”
跳到文本第一行的第一个字符:先按两次“g”,
跳转到当前行的第一个字符:在当前行按“0”。
查找某个关键词:查找格式为英文冒号+问号+关键词,从最后往上查找关键字,点N往上。如:?com.common.exception