您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

linux日志关键字检索&处理

时间:2019-12-10 15:48:36  来源:  作者:

 最近开始用kpt记录自己的日常工作,本文将是该系列的第一篇,主要讲解linux下如何快速逻辑处理数据

Keep

正在做日志筛选数据的事情,需要从服务日志中捞出含关键字的日志,并且该条日志中含响应时间数据,需捞出其中大于500ms的数据

Problem

普通的grep只能捞出所有包含关键字的日志,没法做一些简单的逻辑判断,如果用编程语言来处理又会显得很笨重

Try

linux下有一个利器命令awk可以使用;

对于test.log日志内容类似如下的:

	2019-05-03 20:00:00 requestId:a1 bb cc dd 465
2019-05-03 20:00:01 requestId:aa bb cc kkk
2019-05-03 20:00:01 requestId:a2 bb cc dd 502
2019-05-03 20:00:01 requestId:a3 bb cc dd 600

上述内容中数字表示响应时间,如果需要打印响应时间大于500的requestId的值,基于awk该怎么写:

cat test.log |grep dd|awk '$7>500 {print $3}'

接下来让我们带着疑问来学习入门下awk命令:

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'
# 这是awk的标准格式,BEGIN和END是可选的
# 1、通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。
# 2、完成 BEGIN 块的执行,开始执行body块。
# 3、读入有 n 换行符分割的记录。
# 4、将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容),$1 表示第一个域,$n 表示第 n 个域。
# 5、依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。
# 6、循环读取并执行各行直到文件结束,完成body块执行。
# 7、开始 END 块执行,END 块可以输出最终结果。
linux日志关键字检索&处理

 

重新来分析下上面写awk命令

cat test.log |grep dd|awk '$7>500 {print $3}'
# 先通过grep获取到所有包含dd的内容
# 接下来使用awk命令,这里直接用body模块,处理每一行数据
# awk默认的分割符刚好是空格,所以我们直接用$7可以直接拿到响应时间
# 判断完后简单多了,我们直接$3拿到每一个requestId

# 如果吹毛求疵下,只想拿到对应的requestId的值该怎么写?
cat test.log |grep dd|awk '$7>500 {print $3}'|awk -F:'{print $2}'
# 我们在上述命令基础上再加上管道符,并利用-F来指定新的分隔符:,刚好将requestId:a1这样的字符串切割成两个
# 然后直接print $2即可

一些awk的高级用法

正则匹配:

cat test.log |awk '/dd/ && $7>500 {print $3}'|awk -F: '{print $2}'

# awk命令支持正则匹配,所以上述解决方案中,其实不需要grep命令,直接按照上述编写即可,&&表示并且

if函数:

cat test.log |awk '/dd/ {if($7>500)print $3}'|awk -F: '{print $2}'

# awk自带if函数,上述解决方案我们还可以这样编写。将if函数放到body的{}中

BEGIN的用法:

linux日志关键字检索&处理

 

END的用法

cat test.log |awk 'BEGIN {print "im begin"} /dd/&&$7>500 {num=num+1;total=total+$7} END {print num;print total}'

# awk支持自定义变量,上述命令是统计响应时间大于500的日志记录数,以及累计响应时长


# 我们也可以先在BGGIN模块初始化自定义变量
cat test.log |awk 'BEGIN {print "im begin";num=0;total=0} /dd/&&$7>500 {num=num+1;total=total+$7} END {print num;print total}'

参考资料:

https://www.runoob.com/linux/linux-comm-awk.html

https://coolshell.cn/articles/9070.html



Tags:linux日志   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近发现点好玩的工具,迫不及待地想跟大家分享一下。大家平时都怎么查Linux日志呢?像我平时会用tail、head、cat、sed、more、less这些经典系统命令,或者awk这类三方数据过滤工...【详细内容】
2021-07-16  Tags: linux日志  点击:(123)  评论:(0)  加入收藏
一、系统日志日志在所有应用系统中都占有极其重要的位置,本文主要介绍Linux系统内核的日志,另外还介绍了一些日志分析工具。1. 说明看Linux系统信息日志主要的两种途径: dmesg,...【详细内容】
2020-08-06  Tags: linux日志  点击:(160)  评论:(0)  加入收藏
一、系统日志日志在所有应用系统中都占有极其重要的位置,本文主要介绍Linux系统内核的日志,另外还介绍了一些日志分析工具。1. 说明看Linux系统信息日志主要的两种途径: dmesg,...【详细内容】
2020-08-04  Tags: linux日志  点击:(110)  评论:(0)  加入收藏
前言本文主要介绍实时监控Linux日志文件的4种方法。如何在Linux中实时查看日志文件的内容?有很多实用工具可以帮助用户在文件修改或不断更新时跟踪或监控文件发生的变化。在...【详细内容】
2020-05-25  Tags: linux日志  点击:(475)  评论:(0)  加入收藏
“ 最近开始用kpt记录自己的日常工作,本文将是该系列的第一篇,主要讲解linux下如何快速逻辑处理数据”Keep正在做日志筛选数据的事情,需要从服务日志中捞出含关键字的日志,并且...【详细内容】
2019-12-10  Tags: linux日志  点击:(142)  评论:(0)  加入收藏
前言在 Linux 环境中能够帮助我们分析问题蛛丝马迹的有效办法之一便是日志,常见的如操作系统 syslog 日志 /var/log/messages,应用程序 Nginx 日志 /var/log/nginx/*.log。但...【详细内容】
2019-11-07  Tags: linux日志  点击:(109)  评论:(0)  加入收藏
日志的三种类型# 内核及系统日志:这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统...【详细内容】
2019-10-08  Tags: linux日志  点击:(186)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条