跳转至

大日志文件 tail 筛选最近 5 分钟关键词

状态:已验证可用(666)
日期:2026-05-19
项目:neirong_scf_appmainrecom
场景:服务器 log4j.log 约 5.9G 且持续增长,需查最近 5 分钟内的 ERROR / 业务关键词


背景

  • 日志路径:服务器当前目录 ./log4j.log(线上常见路径 /opt/service/neirong_scf_appmainrecom/logs/log4j.log
  • 导出目录:/home/work/
  • 日志格式(log4j):[05-19 14:32:15 406 INFO] ...(月-日 时:分:秒)
  • 禁止对全文件 grep:5.9G 极慢,且文件仍在写入

核心命令(一行,推荐)

log4j.log 所在目录执行,修改 KW 为要搜的关键词:

KW='crossCity| ERROR |Exception|DataOverFlow|服务调用超时'; tail -n 2000000 ./log4j.log | grep -E "$KW" | grep -E "$(for i in $(seq 0 5); do date -d "$i minutes ago" +"\\[%m-%d %H:%M"; done | paste -sd'|')" | tee /home/work/last5min_kw.log && wc -l /home/work/last5min_kw.log

要点

参数 说明
tail -n 2000000 先取尾部约 200 万行;5 分钟窗口不够时改为 5000000
seq 0 5 覆盖当前分钟 + 往前 5 分钟,避免边界漏行
grep -E "$KW" 先筛关键词,再按时间前缀过滤
tee 结果落盘到 /home/work/,终端可见行数

实时抓最近 5 分钟(tail -f + 超时)

timeout 300 tail -f ./log4j.log | grep --line-buffered -E 'crossCity| ERROR |Exception' | tee /home/work/last5min_live.log
  • timeout 300:跑满 5 分钟自动停
  • grep --line-buffered:实时输出,不攒缓冲

统计最近 5 分钟各关键词次数

tail -n 2000000 ./log4j.log | grep -E "$(for i in $(seq 0 5); do date -d "$i minutes ago" +"\\[%m-%d %H:%M"; done | paste -sd'|')" | grep -oE 'crossCity|DataOverFlowException|ConcurrentModificationException|服务调用超时|bgv7RecallNewRuleProcess|crossCityGroup=exp1' | sort | uniq -c | sort -rn | tee /home/work/last5min_kw_count.txt

确认 tail 行数是否覆盖 5 分钟

tail -n 1 ./log4j.log; echo '---'; tail -n 500000 ./log4j.log | head -n 1

若首尾时间差 < 5 分钟 → 加大 tail -n 行数。


常用关键词(本项目的排查场景)

目的 关键词
跨城上线 crossCitycrossCityGroup=exp1crossCity extract
错误对比 ERRORException
条数/超时 DataOverFlowException服务调用超时getNewAppHomePageFeed
首页条数变低 insertNumshortfallblockWaitTaskFinish

灰度 vs 未灰度对比(带 hostname)

grep -E " ERROR |Exception" ./log4j.log | grep -E "\[05-19 (19:[3-5]|20:[0-3])" > /home/work/err_$(hostname -s)_after_1930.log && wc -l /home/work/err_$(hostname -s)_after_1930.log

大文件版(先 tail 再筛):

tail -n 500000 ./log4j.log | grep -E " ERROR |Exception" | grep -E "\[05-19 (19:[3-5]|20:[0-3])" > /home/work/err_after_1930.log && wc -l /home/work/err_after_1930.log

踩坑

  1. 不要 grep ./log4j.log 扫全文件 — 5.9G + 持续写入,IO 和耗时都不可接受
  2. tail -n 行数不够 — 日志 QPS 高时 5 分钟可能远超 200 万行,需先 tail -n 1 vs head -n 1 校验时间跨度
  3. 日期要改05-19 换成当天;动态时间用 date -d "$i minutes ago" 那段即可
  4. 跨城 INFO 不等于 ERRORcrossCityGroup=off 只说明走了实验逻辑但未命中 exp1

归档建议

整理时可移至:01-职业/项目/技术方案/ 或新建 01-职业/项目/neirong_scf_appmainrecom/ 下的运维排查目录。