告别混乱日志:用grep、find、less快速定位和排查错误

十分钟掌握日志排查神技,效率提升1000%

作为运维工程师,每天都要面对海量的日志文件。你是否曾在成千上万行日志中挣扎,只为找到那一个关键错误?今天分享的三个命令将彻底改变你的工作效率!

三大神器核心功能速查表

命令

核心作用

典型使用场景

关键参数

grep

文本搜索过滤

在文件中查找特定模式、错误代码

-i忽略大小写, -r递归, -n显示行号, -A后几行, -B前几行

find

文件查找

按名称、时间、大小查找日志文件

-name按名称, -mtime按修改时间, -size按大小, -exec执行命令

less

文件查看

大文件分页查看、实时跟踪、内容高亮

+F跟踪模式, /搜索, -N显示行号, -S禁用换行

实战案例:快速定位生产环境问题

案例1:紧急!网站500错误排查

场景:用户报告网站返回500错误,你需要立即找到缘由。

# 1. 找到今天的日志文件
find /var/log/nginx -name "access.log*" -mtime -1

# 2. 搜索500状态码,显示前后5行上下文
grep -n -A5 -B5 " 500 " /var/log/nginx/access.log.1

# 3. 发现大量500错误来自某个API接口
# 结果示例:
# 15234:192.168.1.100 - - [15/Nov/2023:10:23:45] "POST /api/v1/payment HTTP/1.1" 500 1234
# 15235-Error: Database connection timeout
# 15236- at com.app.PaymentService.process(PaymentService.java:89)

# 4. 进一步查看相关错误日志
less +F /var/log/app/error.log
# 在less中搜索数据库连接错误
# 输入:/connection timeout

案例2:磁盘空间告警,清理历史日志

场景:收到磁盘空间不足报警,需要清理30天前的旧日志。

# 1. 查找30天前的大于100MB的日志文件
find /var/log -name "*.log" -mtime +30 -size +100M

# 2. 查看这些文件的总大小
find /var/log -name "*.log" -mtime +30 -size +100M -exec du -ch {} +

# 3. 确认无误后压缩(而不是直接删除!)
find /var/log -name "*.log" -mtime +30 -size +100M -exec gzip {} ;

# 4. 验证磁盘空间释放
df -h /var/log

命令组合技巧大全

组合1:实时日志监控 + 错误过滤

# 实时跟踪日志并高亮错误关键词
tail -f /var/log/app/app.log | grep --color -E "(ERROR|CRITICAL|Exception)"

组合2:多文件搜索 + 结果统计

# 在多个日志文件中搜索错误,并统计出现次数
grep -r "NullPointerException" /var/log/app/ | cut -d: -f1 | sort | uniq -c | sort -nr

# 输出示例:
# 25 /var/log/app/app.log.1
# 18 /var/log/app/app.log.2
# 3 /var/log/app/app.log.3

组合3:时间范围日志提取

# 提取特定时间段的日志(列如事故时间段)
sed -n '/2023-11-15 14:30:00/,/2023-11-15 15:00:00/p' /var/log/app/app.log > incident.log

# 然后在提取的文件中深入分析
less -N incident.log

高级排查模式

模式1:错误根源分析工作流

# 步骤1:快速定位错误发生时间
grep -n "CRITICAL" /var/log/app/app.log | head -10

# 步骤2:查看错误前后完整上下文  
grep -A10 -B10 "2023-11-15 14:45:23" /var/log/app/app.log

# 步骤3:关联其他相关日志
find /var/log -name "*.log" -exec grep -l "DatabaseConnection" {} ;

# 步骤4:生成错误报告
grep -c "ERROR" /var/log/app/app.log.1 /var/log/app/app.log.2

模式2:性能问题排查

bash

# 查找响应时间超过5秒的请求
grep "processing time" /var/log/app/app.log | awk '{if($NF > 5000) print}'

# 统计慢请求的数量
grep "processing time" /var/log/app/app.log | awk '{if($NF > 5000) count++} END {print count}'

实用配置文件技巧

创建个人排查工具包

在 ~/.bashrc 中添加别名,提高效率:

# 日志排查别名
alias logerror='grep -n "ERROR"'
alias logtrace='grep -A5 -B5'
alias findlogs='find /var/log -name "*.log" -mtime'
alias followlog='less +F'
alias logstats='grep -c "ERROR" /var/log/app/app.log'

重新加载配置:source ~/.bashrc

总结

掌握这三个命令的组合使用,你将能够:

1分钟内定位大多数生产问题
10分钟内完成复杂错误的根本缘由分析
日均节省1-2小时的日志排查时间

记住这个排查口诀:find定位文件,grep提取内容,less深入分析。下次遇到混乱日志时,拿出这个指南,你就能从容应对!

思考题:你最近遇到的最棘手的日志排查问题是什么?用今天学到的方法,能否在5分钟内解决?欢迎在评论区分享你的实战案例!

© 版权声明

相关文章

4 条评论

您必须登录才能参与评论!
立即登录