Linux排查日志总结

背景

应对线上故障的问题,换公司之后接触的比较多,一个月运维一个星期的线上运维的工作,期间呢,对于自己排查问题的问题,零零散散的,日志图形化界面的统一管理工具使用起来不太熟悉,只好通过堡垒机登陆到具体的服务器上查看具体的日志信息,这样子比较方便查看当前的日志信息,处理解决问题,分析问题也是比较的快速!这个对于我们快速定位到具体的异常,快速查找日志等能力提出了一些要求!反正就是,快速的找到日志中问题!一般情况下都是运营或者测试同学发现异常后通知到开发这里,进行处理,根据关键词进行排查。

日志排查-能力

  1. 找到打印的日志所在的具体的位置!
  2. 使用cat grep vim less more tail head 等常见的打开日志文件的命令,并能够熟练的操作其中的一二。
  3. 根据上述2中提到的各种命令组合起来搜索关键字,找到日志文件中打印的日志信息。
  4. 最后就是结合代码分析具体的错误的原因,一般情况下处理思路就是这样,一些奇葩的场景我们就不一一说明啦!一句话需要经验啊!

NOTE: 如果对于特定的命令行,可能某些参数会忘记掉怎么办?baidu,google 还是… 其实最简单的就是 man cat,man tail linux服务器直接就将当前的命令的一些详细的命令行的使用信息全部的给你打印出来啦!非常的方便。

基本命令行

前期准备:
通过vi 创建一个test.log

hello
go
日志查询
linux
国期间
日志排查
test
:wq 保存并退出
:q!保存
:u 撤回
esc 切换命令 ....

cat

cat 这个查看文件的信息命令比较常见,一般情况下都是直接cat test.log就ok,添加一个-n 显示行号。

wangjideMacBook-Pro:logs wangji$ cat -n  test.log
     1	wangji
     2	hello
     3	go
     4	日志查询
     5	linux
     6	国期间
     7	日志排查
     8	test
     9	:wq 保存并退出
    10	:q!保存
    11	:u 撤回
    12	esc 切换命令 ....

你可以通过man tail 查看一些参数,这个命令行不能查看前多少行,后多少行哈哈!,专业人处理专业的事情!

tail | head

查询最后两行的日志信息,查询第二行之后的所有信息,一直查最后的最新的两行信息;一般使用的都是查询最后的多少行的信息,或者持续的更新查询最后的最新的信息

  1. 查询最后的两行信息
wangjideMacBook-Pro:logs wangji$ tail -n 2 test.log
:u 撤回
esc 切换命令 ....
  1. 查询第二行之后的所有的信息
wangjideMacBook-Pro:logs wangji$ tail -n +2 test.log
hello
go
日志查询
linux
国期间
日志排查
test
:wq 保存并退出
:q!保存
:u 撤回
esc 切换命令 ....
  1. 最尾部的内容显示在屏幕上不断刷新
    光标一直在那里不动,查看文件是否更新…
wangjideMacBook-Pro:logs wangji$ tail -f -n 2 test.log
:u 撤回
esc 切换命令 ....

这个时候打开另外一个终端去追加文件信息(>>)

ping www.baidu.com >> test.log

效果就如下咯,一直在刷新!

wangjideMacBook-Pro:logs wangji$ tail -f -n 2 test.log
64 bytes from 115.239.210.27: icmp_seq=12 ttl=48 time=44.253 ms
64 bytes from 115.239.210.27: icmp_seq=13 ttl=48 time=88.128 ms
64 bytes from 115.239.210.27: icmp_seq=14 ttl=48 time=132.161 ms
64 bytes from 115.239.210.27: icmp_seq=15 ttl=48 time=224.554 ms
64 bytes from 115.239.210.27: icmp_seq=16 ttl=48 time=226.281 ms
64 bytes from 115.239.210.27: icmp_seq=17 ttl=48 time=12.013 ms
64 bytes from 115.239.210.27: icmp_seq=18 ttl=48 time=33.998 ms
64 bytes from 115.239.210.27: icmp_seq=19 ttl=48 time=16.195 ms
64 bytes from 115.239.210.27: icmp_seq=20 ttl=48 time=48.376 ms
64 bytes from 115.239.210.27: icmp_seq=21 ttl=48 time=9.160 ms
64 bytes from 115.239.210.27: icmp_seq=22 ttl=48 time=14.283 ms
64 bytes from 115.239.210.27: icmp_seq=23 ttl=48 time=17.027 ms
64 bytes from 115.239.210.27: icmp_seq=24 ttl=48 time=10.135 ms
64 bytes from 115.239.210.27: icmp_seq=25 ttl=48 time=9.901 ms
64 bytes from 115.239.210.27: icmp_seq=26 ttl=48 time=35.506 ms

grep

grep 搜索功能还是比较强大的!不仅支持简单的字符串匹配,还支持模式匹配(egrep)等等!

  1. 简单的搜索关键字
wangjideMacBook-Pro:logs wangji$ grep 'hello' test.log
hello
  1. 搜索关键字,并显示后五行
    -A num, –after-context=num
    Print num lines of trailing context after each match. See also
    the -B and -C options.
wangjideMacBook-Pro:logs wangji$ grep -A 5  '日志排查' test.log
日志排查
test
:wq 保存并退出
:q!保存
:u 撤回
esc 切换命令 ....
  1. 搜索关键字,并显示前五行
    -B num, –before-context=num
    Print num lines of leading context before each match. See also
    the -A and -C options.
wangjideMacBook-Pro:logs wangji$ grep -B 5  '日志排查' test.log
hello
go
日志查询
linux
国期间
日志排查
  1. 搜索关键字显示前后五行(用的比较多!)
    -C[num, –context=num]
    Print num lines of leading and trailing context surrounding each
    match. The default is 2 and is equivalent to -A 2 -B 2. Note:
    no whitespace may be given between the option and its argument.
wangjideMacBook-Pro:logs wangji$ grep -C 5  '日志排查' test.log
hello
go
日志查询
linux
国期间
日志排查
test
:wq 保存并退出
:q!保存
:u 撤回
esc 切换命令 ....

  1. 显示行号 -n, –line-number
wangjideMacBook-Pro:logs wangji$ grep -n  '日志排查' test.log
6:日志排查
  1. and or 条件处理
  • and 处理比较简单,使用管道即可
wangjideMacBook-Pro:logs wangji$ grep -n  '日志排查' test.log | grep '日志'
6:日志排查
wangjideMacBook-Pro:logs wangji$ grep -n  '日志排查' test.log | grep 'hello'
wangjideMacBook-Pro:logs wangji$ 
  • or 处理,使用正则表达式中的处理条件即可(使用比较多)
    -E, –extended-regexp
    Interpret pattern as an extended regular expression (i.e. force
    grep to behave as egrep).
    满足两个关键字的都可以找出来
wangjideMacBook-Pro:logs wangji$ grep -n -E  '日志排查|hello' test.log 
1:hello
6:日志排查

more | less 翻页功能

你自己使用man 查看具体的命令行信息的时候就会使用到 more或者less的操作
你可以使用 more test.log 或者 less test.log 进行尝试,最主要的就是翻页的技巧咯!一般情况下使用都是放置最最后使用管道进行操作处理。多种命令组合起来操作。记住一个就好啦~多了也是记不得。
Less 吧:
Less的操作技巧主要体现在上下翻页速度上!直接滚动鼠标也是可以的!

功能 快捷键
向上移动一行;同vi k
向下移动一行;同vi j;Enter 向下移动一行;
(backword)向上滚动一屏 b
(forword)向下滚动一屏 f; Space 向下滚动一屏;
向下滚动半屏 d
向上滚动半屏 u
指定从哪行下开始显示 w
跳到最后一行 G
跳到第一行 g
搜索pattern /pattern ,比如搜索hello关键字 /hello
调用vi编辑器 v
退出less q

上面说了这么多,其实他们都不会单独的使用的!一般情况下回通过管道操作将多个命令组合在一起使用的!熟练的掌握上面的命令只是时间的问题,没事的时候看看自己总结的比在外面到处找方便很多。

vim

vim这个东东,我们应该是非常的熟悉了,虽然不经常用,但是基本的修改,保存的操作都了解的!平时配置环境变量这个时候在服务器上就需要有些必要的操作,虽然docker带来了很多的方便,有些东西都不需要配置了,了解还是十分有必要的!主要记住有些操作就行啦。

操作之前功能和命令转换需要按一下ESC在继续输入

功能
操作
向下移动一行
j;向下箭头
向上移动一行
k;向上箭头
向左移动一个字符
h;向左箭头
向右移动一个字符
l;向右箭头
上下移动在一个键盘上连城一条线的 hjkl;对于上下移动还可以添加行数字符数量,比如 3j,3k,3l等等
向上移动一屏(before)
ctrl+b
向下移动一屏(forward)
ctrl+f
搜索
正向查找,按n键把光标移动到下一个符合条件的地方
/search ,一般就是 /hello 搜索hello关键字
反向查找,按shift+n 键,把光标移动到下一个符合
?serach,?hello 搜索hello关键字
撤销命令
u
恢复撤销命令
ctrl+r
显示所有行号(全局 vim ~/.vimrc 中输入 set nu)
set nu
快速跳到一行的开头和行尾
头:0 尾 $;任意行 12

参考文档

  • linux,日志查找技巧
  • 线上日志快速定位-grep
  • vim与vi的区别,及常用操作,有查找关键词,向上向下翻页,快速跳到一行首末尾,设置取消行号,撤销编辑,跳到最后一行
  • linux vi入门——我的vi使用小心得
  • 线上问题排查实战

总结

没事多总结,使用的时候反应太慢了不太好…

你可能感兴趣的:(Linux服务器)