6

Linux中的日志分析利器:ail grep awk

 9 months ago
source link: https://www.51cto.com/article/776095.html
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.
neoserver,ios ssh client

Linux中的日志分析利器:ail grep awk

作者:疯狂Lawrrence 2023-12-10 21:35:45
登录服务器,查询日志文件定位相关日志,并分析原因。所以在Linux服务器上进行日志查询,成为了必备的技能。

一个日志查询分析的例子

项目发布上线后,接下来需要做什么?开Party,庆祝项目上线。但是Party开到一半,服务运行出了点问题。领导要你马上调查原因并给出合适的解决办法。项目才刚上线,日志监控系统都还没来得及完善。你该怎么处理?

93f4baf78b23fe7c9b9090c8ebc545b7c3ee68.png

登录服务器,查询日志文件定位相关日志,并分析原因。所以在linux服务器上进行日志查询,成为了必备的技能。

于是你登上了服务器,找到了对应服务的日志文件,输入了:

tail -f <xx-service>.log

但这只能看最新的日志输出,不能看到过去的某个时间点的日志,或者根据某些特定的字符进行筛选。

于是你输入了命令:

tail -n 20000 <xx-service>.log | grep "ERROR" -A 50 -B 50

查看了最近20000行中出现ERROR的日志并包括其前50行和后50行。

一顿操作后你调查出了具体原因,并给出了问题的解决方法。但是你想调查一下问题出现的频次:

tail -n 2000 <xx-service>.log | grep 'ERROR' | awk '{count++;} END {print "error count:", count}'

随后你分析出了出现问题的更深层次的原因,并出具了根本原因分析报告。

在不具备完善的ELK日志收集分析系统的情况下,日志查询分析只能依靠Linux基础的日志查询分析工具:tail, grep, awk等命令。

tail命令

tail命令用于查看日志文件,常见用法如下:

显示文件的最后10行:

tail <file name>

显示文件的最后200行:

tail -n 200 <file name>

显示文件第200行开始到末尾的内容:

tail -n +200 <file name> 

循环读取文件:

tail -f <file name>

更多tail命令相关的信息,可以通过tail --help命令查看。

grep命令

grep命令用于在一个或多个输入文件中,搜索与正则匹配的行,并将匹配的行标准输出。

在日志查询中,通常用来将tail的输出结果进行过滤日志,常见用法如下:

(1) 显示最近2000行日志中,包含Error(区分大小写)的日志行如包含SystemError,InputError, Error等单词的行

tail -n 2000 <file name> | grep 'Error' 

(2) 显示最近2000行日志中,包含Error单词(区分大小写)的日志行:

tail -n 2000 <file name> | grep -w 'Error' 

-w表示匹配单词。

(3) 如果不区分大小写,则可以用以下命令:

tail -n 2000 <file name> | grep -wi 'Error'

-i参数则表示不区分大小写。

(4) 如果需要显示不包含Error的日志行,则可以用以下命令:

tail -n 2000 postman.log | grep -wiv 'Error'

-v表示对匹配的条件取反.

(5) 如果需要进行正则匹配则可以加入-e参数,-E参数则表示扩展正则匹配

tail -n 2000 postman.log | grep -e '.*Error.*'  
tail -n 2000 postman.log | grep -E '.*Error.*|.*error.*'

(6) -A参数可以包含匹配行的前n行,-B参数则包含匹配行的后n行,上文的提到的命令

tail -n 20000 <xx-service>.log | grep "ERROR" -A 50 -B 50

则表示匹配包含ERROR字符的行,以及前50行和后50行。

更多grep命令相关的信息,也可以通过grep --help命令查看。

awk命令

awk是一个文本处理工具,主要用于数据扫描,过滤,统计汇总等。

awk基本语法则是:

awk '<pattern> {<action>} <pattern> {<action>}...'

上面提到的一个关于awk的命令则是统计了一下日志中出现ERROR字符的行数。

tail -n 2000 <xx-service>.log | grep 'ERROR' | awk '{count++;} END {print "error count:", count}'

更简单的实现方式则可以通过awk的内置变量实现,如列出ls命令输出的结果行数:

ls | awk 'END{print NR}'

END是awk中的一个关键字,后面接的代码块只会在读取完所有数据记录最后执行一次。与之相反的则是BEGIN,后面接的代码块只会在读取数据记录前执行一次。

awk是一个十分强大的文本分析工具,如果有日志分析需求,awk足以应对日常所需。更多关于awk的教程可以自行在网上搜索相关资料,或者查看官网教程:https://www.gnu.org/software/gawk/manual/html_node/index.html

总之,基于linux的日志查询分析,结合tail、grep、awk这三个命令的运用,就完全满足日常的日志分析需求了。tail控制日志查找范围,grep进行关键词筛选,awk用于分析统计。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK