日志分析的方法之grep、sed、awk常规用法

本文介绍了运维人员在处理大型日志文件时常用的grep和awk命令,包括按关键字搜索、行号显示、时间范围筛选、IP统计和响应时间分析等技巧,旨在提升日志管理效率。
摘要由CSDN通过智能技术生成

作为运维,日常工作中难免会查看日志去分析问题,但是当我们遇到一个超级大的日志文件时,如何检索出自己需要的内容就显得尤为重要,以下是我日常使用最频繁的一些指令,旨在基础,一些高阶的用法并没有列出来,欢迎各位大哥补充,共同学习,共同进步。

在这里插入图片描述
在这里插入图片描述

#按照关键字查询相关日志并打印该行前后10行内容

cat output.log | grep -C 10 'keyword'  
grep -C 10 'keyword' output.log 

#按照关键字查询相关日志并打印前面的10行内容

cat output.log | grep -A 10 'keyword' 
grep -A 10 'keyword' output.log 

#按照关键字查询相关日志并打印后面的10行内容

cat output.log | grep -B 10 'keyword' 
grep -B 10 'keyword' output.log 

#统计文件中查询到的关键字个数

grep -c 'keyword' output.log

#如果grep出现报错 grep: -C: invalid context length argument,说明该文件是二进制文件
这种情况一般加一个-a的参数即可

cat output.log | grep -a -C 10 'keyword'

#按时间段查询日志,查询2024-02-22 03:38到04:00之间的日志

cat output.log | sed -n '/2024-02-22 03:28/,/2024-02-22 04:00/p'

#这里有一个需要注意的地方,如果开始时间没有日志,那么查询结果会为空,所以还可以使用模糊查询的方法

sed -n '/2024-02-22 03:28:*/,/2024-02-22 04:00:*/p'

#正则查询

sed -n '/^2024-02-22 03:28:[0-5][0-9]/,/^2024-02-22 04:00[0-5][0-9]/p' output.log

#grep忽略大小写的用法

grep -i 'keyword' output.log

#反向匹配,查询不包含某关键字的行

grep -v 'error' output.log

#行号显示

grep -n '关键字' output.log

#递归查询,需要在目录及子目录中递归查询文件,结果展示匹配行文件名+匹配行

grep -r  'keyword' logs/

#使用sed查询关键字

sed -n '/error/p' output.log

#awk的用法 awk通常用来处理字段,并基于字段进行过滤或者模式匹配
语法:

awk [选项参数] 'script' var=value file(s)awk [选项参数] -f scriptfile var=value file(s)
		#用法:输出字段(列),换句话说就是输出第一列和第四列
		awk '{print $1,$4}' output.log
		#例如打印服务器上运行的java进程的用户和进程ID
		ps -ef | grep java | awk '{print $1,$2}'
			root 4194
			root 7961
			root 27262
	#打印nginx日志中访问的IP,统计次数并按需排列
awk '{print $1}' access.log | sort | uniq -c | sort -nr | wc -l
	sort:提取的IP进行排序
	uniq -c:统计每个IP出现的次数
	sort -nr:按照计数值进行逆向排序
#查看访问最频繁的10个IP
awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 10

#统计nginx日志中request_times的值即统计响应时间并排列,这样我们就能找到响应时间最长的然后定位到行便于排查

awk -F '"request_times:"' '{print NR, $2}' access.log | sort -n -k 2

-F  用于指定字段分隔符为 "request_times:"
'{print NR, $2}' 会输出行号 (NR) 和第二个字段,即 "request_times" 后面的值
sort -n -k 2 用于按照第二个字段(即 request_times 的值)进行数值排序

#根据时间段筛选

 grep  '2024-02-22 03:28:*/' access.log | awk -F '"request_times:"' '{print NR, $2}' access.log | sort -n -k 2

#查看指定行并输出某个字段。查看access.log文件的第6行到第7行,并输出第一个字段

 awk '{if(NR>=7 && NR<=8) print $1}' access.log
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值