一个日志查询分析的例子项目发布上线后 , 接下来需要做什么?开Party,庆祝项目上线 。但是Party开到一半,服务运行出了点问题 。领导要你马上调查原因并给出合适的解决办法 。项目才刚上线,日志监控系统都还没来得及完善 。你该怎么处理?
文章插图
登录服务器,查询日志文件定位相关日志 , 并分析原因 。所以在linux服务器上进行日志查询,成为了必备的技能 。
于是你登上了服务器,找到了对应服务的日志文件 , 输入了:
tAIl -f <xx-service>.log
但这只能看最新的日志输出,不能看到过去的某个时间点的日志,或者根据某些特定的字符进行筛选 。于是你输入了命令:
tail -n 20000 <xx-service>.log | grep "ERROR" -A 50 -B 50
【Linux中的日志分析利器:ail grep awk】查看了最近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用于分析统计 。
推荐阅读
- 使用Linux定时器实现定时任务和计时器应用
- 十行代码,让日志存储成本降低80%
- 《新少林五祖》中的穿帮镜头,简直不忍直视,看看你都发现了哪些
- 被誉为现实中的八尺夫人!意大利美人多娜泰拉·达米亚妮魅力无限
- 胡椒粉的作用,胡椒粉在烧烤中的作用?
- 忧愁是什么仿写句子,你心中的忧愁是什么仿写句子?
- 马伊琍,2个月减重35斤,分享3个生活中的减肥方法
- 《南海归墟》剧中的五大怪物:大拥沙、海蛇、海石花、章鱼、鲛人
- 如何让word中的表格跨页显示
- 娱乐圈中的“体虚”男星,表面是健身型男,却抱不起80斤的女星