排查万行以上大型日志文件中错误的实用方法与技术有哪些?
万行级大型日志错误排查实操方案
前置准备:先缩小排查范围
拿到日志先不要逐行翻,先确认几个核心信息,至少能砍掉80%的无效内容:
- 先明确报错的时间区间、触发异常的业务场景、涉事的服务/模块名,优先把对应时段、对应模块的日志单独摘出来,不用管其他无关的日志内容。
- 优先筛选高优先级日志级别,直接捞包含
ERROR、FATAL、Exception、traceback关键词的内容,INFO、DEBUG级别的日志可以等定位到大致范围之后再按需查看。
常用工具与对应操作
根据你所处的环境选对应的工具,效率至少提10倍:
Linux/macOS 命令行环境(生产排查最常用)
- 基础关键词过滤用
grep,需要看错误上下文的话可以加参数,比如取匹配行前后3行的命令为:grep -A3 -B3 "ERROR" 目标日志文件.log,需要把结果存为单独文件的话末尾加> 错误结果导出文件.txt即可。 - 要同时匹配多个错误关键词的话用正则匹配:
grep -E "ERROR|Exception|timeout|connect failed" 目标日志文件.log - 日志量级达到GB级的话,优先用
awk按时间切割,比如提取2024-06-10 13:00到13:20的日志命令为:awk '/^2024-06-10 13:00/,/^2024-06-10 13:20/' 目标日志文件.log > 时段过滤结果.log - 如果是JSON格式的结构化日志,直接用
jq按字段过滤,比如筛选HTTP状态码非200的请求:jq 'select(.status != 200)' 结构化日志文件.log
Windows 桌面环境
不要用系统自带记事本打开大日志,大概率会卡住崩溃,用Notepad++、VS Code这类支持大文件加载、支持正则搜索的编辑器,直接用自带的搜索功能筛选关键词即可。
定位根因的实用技巧
- 拿到错误日志后先找唯一链路标识,比如请求ID、Trace ID、用户ID,用这个标识反向搜索全量日志,可以直接串起该请求从发起到报错的完整流程,不用凭空猜测上下文。
- 高频错误优先排查:可以统计同类错误的出现频次,命令行下可以用
grep "ERROR" 目标日志文件.log | awk -F ':' '{print $3}' | sort | uniq -c | sort -nr,直接按错误出现次数从高到低排序,高频错误要么是核心根因,要么是影响范围最大的问题。 - 碰到陌生的错误信息时,优先查对应模块的开发文档、历史故障排查记录,大部分线上报错都不是首次出现,有现成的排查方案可以参考。
注意:不要直接修改生产环境的原始日志文件,所有过滤、分析操作都建议基于日志副本,或者直接把操作结果输出到新文件,避免误改原始日志影响后续溯源。
内容的提问来源于stack exchange,提问作者depotter
相关产品推荐
相关产品推荐

