用 grep 在日志里快速定位报错:从关键字到上下文

举报
yd_28502004 发表于 2026/11/03 11:54:03 2026/11/03
【摘要】 服务一出问题,日志文件往往有几万行,靠眼睛翻既慢又容易漏。grep 是按关键字筛行的工具:给它一个词,它把含这个词的行挑出来,配合上下文和排除条件,几分钟就能圈定问题。先找关键字:递归加行号最常用的是在目录里递归找:grep -rn “ERROR” /var/log-r 表示连子目录一起找,-n 会标出行号,定位后直接跳过去看原文。大小写不确定时加 -i,ERROR、Error、error ...

服务一出问题,日志文件往往有几万行,靠眼睛翻既慢又容易漏。grep 是按关键字筛行的工具:给它一个词,它把含这个词的行挑出来,配合上下文和排除条件,几分钟就能圈定问题。

  1. 先找关键字:递归加行号
    最常用的是在目录里递归找:grep -rn “ERROR” /var/log
    -r 表示连子目录一起找,-n 会标出行号,定位后直接跳过去看原文。大小写不确定时加 -i,ERROR、Error、error 一次全找出来,不用反复试。只想知道哪些文件命中、不想看具体行时,用 -l,只列文件名,范围先缩一圈。
    关键字要选报错本身的词,不要选太宽泛的词。搜 error 可能命中几千行,搜具体的异常名或错误码,命中的行才有含金量。
  2. 看上下文:报错行前后才是根因
    只看报错行往往不够,根因经常在它前面几行。-A、-B、-C 就是干这个的:grep -n -C 5 “ERROR” app.log
    -C 5 表示命中行前后各 5 行一起显示;只要后面几行用 -A 5,只要前面几行用 -B 5。先看上下文再下结论,能少走很多弯路:很多报错只是表象,真正的触发条件写在它上面几行。
  3. 排除干扰:把已知无关的行筛掉
    日志里常有固定的健康检查、心跳记录,它们也会命中关键字,干扰判断。用 -v 反向排除:grep -rn “ERROR” /var/log | grep -v “healthcheck”
    先筛出 ERROR,再排除含 healthcheck 的行。排除条件要具体,只排除确认无关的内容,排除得太宽会把真正的报错也筛掉。
  4. 先缩小范围:限定目录和文件类型
    全盘 grep 又慢又吵。先限定目录,再限定文件类型:grep -rn “ERROR” /var/log --include=“*.log”
    –include 只查 .log 文件,临时文件、压缩包就不会进来添乱。如果知道大概时间,先用 ls 按修改时间圈出最近动过的文件,再对这几个文件 grep,范围越小结果越干净。
  5. 进阶:一次筛多种级别
    想同时找 ERROR 和 FATAL,用 -E 打开扩展正则:grep -rn -E “ERROR|FATAL” /var/log
    竖线表示“或”,一次筛两种级别。正则是把双刃剑:点号、星号都有特殊含义,写之前先在小文件上试一把,确认命中结果符合预期再全量跑,不要直接对生产日志试没把握的表达式。
    几个顺手习惯:先小范围验证 pattern 再全量跑;常用组合记成一条命令或脚本,下次出问题直接复用;定位到报错后,把上下文一起保存下来,提 Issue 或找人帮忙时,对方不用再复述一遍排查过程。
    先关键字、再上下文、后排除干扰——按这个顺序走一次,日志排查就从翻文件变成了筛行,问题定位会快很多。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。